【发布时间】:2013-04-03 17:12:50
【问题描述】:
以下代码给出了一些奇怪的结果:
#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。 谢谢。
【问题讨论】:
-
...提示this fantastic document! :)
-
其实,如果你想得到或多或少精确的结果,你应该避免这样的操作。如果数字具有相同的 10 次方,您将获得最佳结果。
-
浮点(以及双精度或任何其他浮点格式)没有无限精度
标签: c floating-point