浮点戏剧性错误(小数部分完全丢失)

use*_*567 0 c# precision floating-accuracy

quotient = 43156414f / 3;
Run Code Online (Sandbox Code Playgroud)

我在这里得到quotient== 1438547 2(完全不是真正的价值应该是: 1438547 1,333...)。它完全失去了所有小数部分!

我知道浮点计算不准确(似乎不是全部,我应该知道),但是,正如我所告知的,错误可能出现在更远的有效数字上。但这里的红利只是 8 位数字。为什么会发生如此戏剧性的错误?

可选的子问题:我应该记住哪些规则来预见未来的此类错误?

请注意:将分红类型从 float 更改为 double 可以解决此问题。

Han*_*ing 7

float的精度为 6-9 位。您的价值太大而无法无损失地放入浮动中。

double 的精度约为 15-17 位。

例如,检查(int)43156414for的值(double)43156414f- 它们都是 4315641 6