我的问题很简单。
1/3=0.33333…..(经常性(1/3+1/3+1/3=1(在纯数学中(
实际上
1/3+1/3+1/3=0.99999….(经常性(
我的问题是
1] 。程序员如何消除这个错误?
2] 。这个错误消除命名为什么吗?
3] 。1/3+1/3+1/3=0.9999….是正确的。1/3+1/3+1/+3=1是无逻辑的。无逻辑运算是如何在编程中实现的?
这个问题是在math.stackexchange的数学社区中提出的,如果你是一名数学家和程序员,请试着回答这个问题。
https://math.stackexchange.com/questions/4391241/why-fractions-like-1-3-1-9-is-recurring-and-how-to-stop-this-recurring
程序员如何消除此错误?
您不能完全消除浮点不精确性,但您可以通过多种方式来减轻它:
- 四舍五入到合理的精度(小数位数(
- 不要直接比较浮点值;总是将绝对差值与极小的公差进行比较
- 确保将显示的小数位数限制在合理的范围内
- 只有当这种不精确性无关紧要时(比如测量温度或距离等非离散事物时(,才使用浮点值。当十进制表示法至关重要时(如计算货币金额时(,请使用
decimal
或等效类型