下面的代碼給出了一些奇怪的結果:float操作在c中如何工作?大的數字,奇怪的結果
#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
所以,如果我減去1從FLT_MAX的結果是一樣的,如果我減去1從其他大流量中,結果大於初始數量。
我使用的是gcc版本4.7.2。 謝謝。
...和提示[這個神奇的文件](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)! :) – unwind
其實,如果你想得到或多或少的確切結果,你應該避免這樣的操作。如果數字具有相同的冪數爲10,您將得到最佳結果。 – Alex
float(以及double或任何其他浮點格式)不具有無限精度 –