FPU精度表现不同?

时间:2014-04-12 18:53:34

标签: gcc rounding precision fpu

我在这里找到了一些代码(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

0 个答案:

没有答案