我需要处理非常大的矩阵和/或大数字,我不知道为什么 double result = 2251.000000 * 9488.000000 + 7887.000000 * 8397.000000; 给我正确的输出87584627.000000。 与int结果相同。
但是,如果我使用float result = 2251.000000f + ...等, 它给了我87584624.000000,我不明白为什么!
有人可以告诉我我失踪了吗?
答案 0 :(得分:0)
C中浮点数的最常见格式是IEEE-754格式,如this wikipedia article中所述。 binary32格式对应float
,binary64格式对应double
。
float
的精度只有7位十进制数。由于您的等式的答案有8位有效数字,因此答案不能完全表示为float
。
double
具有近16个十进制数字的精度,因此确实具有答案的精确表示。因此,一般来说,当你进行通用数学时,你应该使用doubles
。但是,重要的是要注意即使double
也可能没有足够的精度用于每个应用程序。例如,美国的国债是18,149,752,816,959.61,几乎不适合double
。