我正在尝试实现可逆物理引擎,因此我决定使用十进制模块。因此,这显然有效。
>>> from decimal import *
>>> a = Decimal('1')
>>> b = Decimal('0.82')
>>> a = a*b/b
>>> print(a)
1
但是,如果重复此操作,即“乘以100,然后除以100,”,结果将不再精确等于a
。
>>> for _ in range(100):
... a = a*b
...
>>> for _ in range(100):
... a = a/b
...
>>> a
Decimal('0.9999999999999999999999999965')
我做错什么了吗?是否可以可逆地进行这些计算,以便获得初始结果?
十进制没有无限精度。如果发现它不太准确,可以单击increase its precision。
from decimal import *
getcontext().prec = some larger number