我在这里找到了一些代码(http://www.network-theory.co.uk/docs/gccintro/gccintro_70.html),它们应该证明标准和双FPU精度之间的区别。但是,如果我以两种方式编译代码(无论是否定义了DOUBLE),我都会得到相同的结果。我真正想要做的是得到一个展示差异的好例子,但我还没有找到一个有用的例子。 谁能解释为什么这个演示不起作用?
#include <stdio.h>
void
set_fpu (unsigned int mode)
{
asm ("fldcw %0" : : "m" (*&mode));
}
int
main (void)
{
double a = 3.0, b = 7.0, c;
#ifdef DOUBLE
set_fpu (0x27F); /* use double-precision rounding */
#endif
c = a / b;
if (c == a / b) {
printf ("comparison succeeds\n");
} else {
printf ("unexpected result\n");
}
return 0;
}
输出:
philipp@wurstbrot:/tmp> g++ test3.cpp -o test3.out
philipp@wurstbrot:/tmp> ./test3.out
comparison succeeds
philipp@wurstbrot:/tmp> g++ test3.cpp -DDOUBLE -o test3.out
philipp@wurstbrot:/tmp> ./test3.out
comparison succeeds