C中的大数字和浮点数和双数

时间:2015-02-28 00:32:03

标签: c matrix floating-point double gpu

我需要处理非常大的矩阵和/或大数字,我不知道为什么 double result = 2251.000000 * 9488.000000 + 7887.000000 * 8397.000000; 给我正确的输出87584627.000000。 与int结果相同。

但是,如果我使用float result = 2251.000000f + ...等, 它给了我87584624.000000,我不明白为什么!

有人可以告诉我我失踪了吗?

1 个答案:

答案 0 :(得分:0)

C中浮点数的最常见格式是IEEE-754格式,如this wikipedia article中所述。 binary32格式对应floatbinary64格式对应double

float的精度只有7位十进制数。由于您的等式的答案有8位有效数字,因此答案不能完全表示为float

double具有近16个十进制数字的精度,因此确实具有答案的精确表示。因此,一般来说,当你进行通用数学时,你应该使用doubles。但是,重要的是要注意即使double也可能没有足够的精度用于每个应用程序。例如,美国的国债是18,149,752,816,959.61,几乎不适合double