컴퓨터 시스템 : 프로그래머의 관점, 그리고 Macbook Pro에서 제공하는 코드를 Intel Core i7과 함께 실행하려고합니다. .학습을위한 환경 설정 "컴퓨터 시스템 : 프로그래머의 시각 *"
그러나 일부 코드는 책의 제안대로 정확하게 실행되지 않습니다.
이 C 예제는 레지스터에 저장 될 때부터 메모리에 저장 될 때 동일한 부동 소수점이 다를 것임을 보여줍니다.
#include<stdio.h>
double recip(int denom)
{
return 1.0/(double) denom;
}
void do_nothing(){} /* to clear the register */
void fcomp(int denom)
{
double r1, r2;
int t1, t2;
r1 = recip(denom); /* stored in memory */
r2 = recip(denom); /* stored in register */
t1 = r1 == r2; /* Compares register to memory */
do_nothing(); /* Forces register save to memory */
t2 = r1 == r2; /* Compares memory to memory */
printf("test1 t1: r1 %f %c= r2 %f\n", r1, t1 ? '=' : '!', r2);
printf("test1 t1: r2 %f %c= r2 %f\n", r1, t2 ? '=' : '!', r2);
}
main(){
int demon = 10;
fcomp(demon);
}
이 책에서 제안 "O2"옵션, 결과,와 GCC와 비교해야한다 :
test1 t1: r1 0.100000 != r2 0.100000
test2 t1: r1 0.100000 == r2 0.100000
는 그러나, 나는이 "=="의를 가지고 왜 궁금해. 책의 환경 설정에 대한 제안 사항이 있습니까? 고마워.
직사광선이 비치는 건조한 책상 위에 책을 보관해야합니다 ... –
중간에 괜찮은 컴파일러는 do_nothing() 호출이 아무 것도하지 않으며 단순히 코드를 내 보내지 않는다는 것을 증명할 수 있습니다. 이 컴파일러는 우연히'r1'과'r2'가 동일한 값을 가져야하고 할당을 최적화하고'printf()'호출에서 삼항 연산자를 바로''= '' '. 또한, 코드에 레지스터에 관한 것이 전혀 없으므로 레지스터에 저장된 값에 대한 가정은 전혀 부인할 수 없습니다. –
뭔가 잘못되었습니다. 이 책은 유명한 사람인 Randal Bryant가 썼습니다. 이 책의 일부는 온라인입니다. 코드 스 니펫이 책에있는 내용인지 확인하십시오. 장, 섹션 및 페이지는 무엇입니까? –