我一直在玩浮点数,根据我过去对它们的了解,0.1 + 0.2
最终会变成这样的事实0.30000000000000004
并不让我感到惊讶。
然而,令我惊讶的是,整数运算似乎总是工作得很好,并且没有任何这些伪像。
我首先在 JavaScript(node.js 中的 Chrome V8)中注意到了这一点:
0.1 + 0.2 == 0.3 // false, NOT surprising
123456789012 + 18 == 123456789030 // true
22334455667788 + 998877665544 == 23333333333332 // true
1048576 / 1024 == 1024 // true
C++(Mac OS X 上的 gcc)似乎具有相同的属性。
最终结果似乎是整数——因为没有更好的词——工作。只有当我开始使用十进制数字时,事情才会变得不稳定。
这是设计的一个特征,一个数学工件,还是编译器和运行时环境完成的一些优化?