我正在使用浮点值作为字典键.
偶尔,很偶尔(也许永远,但不能肯定从来没有),就会出现冲突.我想通过将浮点值递增尽可能小的数量来解决这些问题.我怎样才能做到这一点?
在C中,我会旋转尾数的位来实现这一点,但我认为在python中是不可能的.
有人可以帮我解开引擎盖下的确切内容吗?
>>> 1e16 + 1.
1e+16
>>> 1e16 + 1.1
1.0000000000000002e+16
Run Code Online (Sandbox Code Playgroud)
我使用的是64位Python 2.7.对于第一个,我会假设因为浮点数只有15的精度,所以它只是四舍五入的错误.真正的浮点答案可能是这样的
10000000000000000.999999....
Run Code Online (Sandbox Code Playgroud)
小数只是被削减了.但第二个结果让我质疑这种理解,不能完全代表?有什么想法吗?
[ 编辑:只是澄清一下.我并不以任何方式暗示答案是"错误的".显然,他们是对的,因为他们是.我只是想了解原因.]