C 中的大数、浮点数和双精度数

large numbers and float and double in C

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

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

有人能告诉我我错过了什么吗?

C中浮点数最常见的格式是IEEE-754格式,this wikipedia article. The binary32 format corresponds to a float, and the binary64中描述的格式对应一个double.

A float 的精度刚刚超过 7 位小数。由于方程式的答案有 8 位有效数字,因此答案不能精确表示为 float.

A double 具有近 16 位十进制数字的精度,因此确实具有答案的精确表示。因此,一般来说,当你在做通用数学时,你应该使用doubles。但是,请务必注意,即使是 double 也可能无法满足每个应用程序的要求。例如,美国的国债是 18,149,752,816,959.61,勉强符合 double.