Точность 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 ответов

Другие вопросы по тегам