Computer Systems: A Programmer's Perspectiveという本を読んでいて、それが提供するコードを Intel Core i7 搭載の Macbook Pro で実行しようとしています。
しかし、一部のコードは、本が示唆するとおりには実行されません。
この C の例は、同じ float がメモリに格納される場合とレジスタに格納される場合とで異なることを示すことになっています。
#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
しかし、「==」が 2 つ表示され、その理由がわかりません。本の環境設定について何か提案はありますか? どうもありがとう。