有一个关于 Python 中浮点数(和精度)的底层数据结构的问题:
>>> b = 1.4 + 2.3
>>> b
3.6999999999999997
>>> c = 3.7
>>> c
3.7000000000000002
>>> print b, c
3.7 3.7
>>> b == c
False
似乎 b 和 c 的值取决于机器,它们是最接近目标值但不完全相同的数字。我受到监督,我们通过“打印”获得了“正确”的数字,有人告诉我这是因为打印“谎言”,而 Python 选择告诉我们真相,即准确显示它们存储的内容。
我的问题是:
1. 如何撒谎?例如,在一个函数中,我们取两个值并返回它们是否相同,如果小数位数(精度)未知,我怎么能有一个最好的猜测?像上面提到的b和c?有没有明确定义的算法来做到这一点?有人告诉我,如果我们涉及浮点计算,每种语言(C/C++)都会遇到这种问题,但是他们如何“解决”这个问题呢?
2. 为什么我们不能只存储实际数字而不是存储最接近的数字?是限制还是换取效率?
非常感谢约翰