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
.
我需要处理非常大的矩阵 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
.