nio*_*rix 5 python precision decimal
从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())
Run Code Online (Sandbox Code Playgroud)
它给了我不同的结果!
我想计算以 6 为基数表示的数字6**500000,所以我的预期结果是int(b.ln() / a.ln()) + 1,所以我的预期结果是,应该是 500001。但是,当我将 prec 设置为 250 时,它给出了错误的结果。我该如何解决这个问题?
另外,如果我想输出不带科学计数法(即 )的结果5E+5,我该怎么办?
小智 2
文档清楚地显示了参数getcontext()
当你简单地执行它时,getcontext()它可以显示它的内置参数。
Context(prec=28, rounding=ROUND_HALF_EVEN, Emin=-999999, Emax=999999, capitals=1, clamp=0, flags=[], traps=[InvalidOperation, DivisionByZero, Overflow])
Run Code Online (Sandbox Code Playgroud)
当您可以更改时getcontext().prec = 250,它只能覆盖prec值。
影响结果的主要是rounding parameter right after the prec,它是内置参数rounding=ROUND_HALF_EVEN。我想将其更改为,None但它可能会显示错误。
所以它可以澄清,无论我们能做什么,它都必须因为rounding参数而发生哪怕是轻微的改变。
注意:您的结果也可能因其他内置参数而产生影响。