浮动数字之间的不直观的等式

时间:2018-02-02 01:09:27

标签: python floating-point

例如,2.0**53 == 2.0**53 + 1会返回True。我理解它与浮动数字表示有关,但有人能解释一下吗?

2 个答案:

答案 0 :(得分:2)

浮点数中只有很多精度位。对于Python的float(也称为“double”),该数字为53.在示例中存储1所需的位只是结束,因此它被删除。 (它实际上是四舍五入的,所以有时它会向上舍入:2.**53+3==2.**53+4。)

答案 1 :(得分:1)

简单的float没有足够的精度来表示两个数量级之间的差值1。如果需要,您可以自己测试限制:编写一个循环来测试2.0**N == 2.0**N + 1 Nrange(16, 55)的值。你会发现float中有多少精度位。

对于一个有趣的结果,也尝试添加1到2.0 ** 53几十倍。您将看到该值如何随着这些小增量而改变。