十进制在提高到 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
我在使用 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