例如,2.0**53 == 2.0**53 + 1
会返回True
。我理解它与浮动数字表示有关,但有人能解释一下吗?
答案 0 :(得分:2)
浮点数中只有很多精度位。对于Python的float
(也称为“double”),该数字为53.在示例中存储1所需的位只是结束,因此它被删除。 (它实际上是四舍五入的,所以有时它会向上舍入:2.**53+3==2.**53+4
。)
答案 1 :(得分:1)
简单的float
没有足够的精度来表示两个数量级之间的差值1。如果需要,您可以自己测试限制:编写一个循环来测试2.0**N == 2.0**N + 1
N
中range(16, 55)
的值。你会发现float
中有多少精度位。
对于一个有趣的结果,也尝试添加1到2.0 ** 53几十倍。您将看到该值如何随着这些小增量而改变。