从Decimal的文档页面上看,我认为一旦我们使用十进制数进行计算,结果将是没有任何浮点误差的正确结果。
但是当我尝试这个等式时
from decimal import Decimal, getcontext
getcontext().prec = 250
a = Decimal('6')
b = Decimal('500000')
b = a ** b
print('prec: ' + str(getcontext().prec) + ', ', end='')
print(b.ln() / a.ln())
它给我不同的结果!
我想要计算以六进制表示时6**500000
数位的数量,所以我的期望结果应该是int(b.ln() / a.ln()) + 1
,即500001。但是,当我将精度设置为250时,它给我错误的结果。我该怎么解决呢?
此外,如果我想输出结果时避免使用科学计数法(如5E+5
),我该怎么做?
decimal
是可调节的精度,而不是无限精度。它说的是“正确舍入的十进制浮点运算”,而不是“未舍入的实数运算”。 - user2357112