浮点数的加法/减法如何在Python中起作用?

时间:2011-11-05 21:48:15

标签: python floating-point

我不明白以下代码行中发生了什么:

>>> 123456789012345678. -123456789012345677.
0.0

结果不应该是1.0吗?

感谢。干杯:)

4 个答案:

答案 0 :(得分:7)

浮点数只存储53位信息,因此您将受到四舍五入的影响。

改为使用整数:

>>> 123456789012345678 - 123456789012345677
1

或使用Decimal模块:

>>> from decimal import Decimal
>>> Decimal('123456789012345678.0') - Decimal('123456789012345677.0')
Decimal('1.0')

答案 1 :(得分:3)

没有确切表示123456789012345678作为浮点数:

>>> 123456789012345678.
1.2345678901234568e+17
                 ^ oops

答案 2 :(得分:3)

Floating point numbers被存储为53位 1 的尾数加上11位指数,加上一个符号位。 enter image description here

您的数字需要超过53位来表示,因此使用最接近的实际可表示浮点值。

浮点数通常用于模拟真实世界系统的实际测量或模拟。很少有任何物理常数或测量结果甚至可以达到52位精度,所以这通常都可以。


1。 53 rd 位是隐藏位,但它不足以帮助您:
$ dc
2 52 ^ p
4503599627370496个
2 53 ^ p
9007199254740992个
123456789012345678<<<<你的数字更大,实际上,它需要大约56位:
2o 2 53 ^ 1-p
11111111111111111111111111111111111111111111111111111个
123456789012345678p
110110110100110110100101110100110001100001111001101001110 功能

答案 3 :(得分:1)