十进制在提高到 1 的幂时会失去准确性

Decimal loses accuracy when raised to a power of 1

我在使用 Decimal 的程序中遇到了一些准确性问题。

一个简单的复制:

from decimal import Decimal

print Decimal(1910944005427272400562113336049664)
print Decimal(1910944005427272400562113336049664)**1
print int(Decimal(1910944005427272400562113336049664)**1)

给出:

1910944005427272400562113336049664
1.910944005427272400562113336E+33
1910944005427272400562113336000000

如您所见,原来的值变小了一点(准确地说是减去 49664)。

现在,我的实际代码所做的不仅仅是将一个数的 1 次方计算在内,所以我最终的准确度有所下降。

有什么 "better Decimal" 可供我使用吗?

我的输入输出都在0(含)到2^256(不含)之间。

the documentation、"the decimal module has a user alterable precision (defaulting to 28 places)" 中所述。您可以将精度设置为更高的值以获得准确的结果:

>>> decimal.getcontext().prec = 100
>>> print(int(Decimal(1910944005427272400562113336049664)**Decimal(1)))
1910944005427272400562113336049664