我正在阅读这本书Computer Systems: A Programmer's Perspective,我正在尝试使用 Intel Core i7 在我的 Macbook Pro 上执行它提供的代码。
但是有些代码并没有完全按照书中的建议运行。
这个 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
但是,我得到了两个“==”,不知道为什么。对本书的环境设置有什么建议吗?非常感谢。