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