以下代码给出了一些奇怪的结果:
#include <stdio.h>
#include <float.h>
int main()
{
float t = 1.0;
float res;
float myFltMax = 340282346638528859.0;
printf("FLT_MAX %f\n", FLT_MAX);
res = FLT_MAX - t;
printf("res %f\n", res);
res = myFltMax - t;
printf("res myFltMax %f\n", res);
return 1;
}
结果是:
FLT_MAX 340282346638528859811704183484516925440.000000
res 340282346638528859811704183484516925440.000000
res myFltMax 340282356122255360.000000
因此,如果我从FLT_MAX中减去1,结果是相同的,如果我从其他大浮点数中减去1,则结果大于初始数。
我使用的是gcc 4.7.2版。 谢谢。
答案 0 :(得分:3)
如果从myFltMax
中减去1,则不会得到大于初始数字的差异。你得到相同的号码。同时打印myFltMax
,您会看到它是340282356122255360
而不是340282346638528859
。
基本上,编译器将340282346638528859
四舍五入到可以浮点类型表示的最接近的值,恰好是340282356122255360
。