当处理 e-325 阶数字时,“十进制”python 模块返回“0”

When working with numbers of order e-325 'decimal' python module returns '0'

提问人:filidibava 提问时间:10/6/2023 最后编辑:rioV8filidibava 更新时间:10/6/2023 访问量:56

问:

我正在尝试实现一个表示为幂级数的函数。 它的形式是:formula

问题与分子上的项 t_min 和 t_max有关:当 s 变大时,这两个项都开始给我 e-324 阶的值,然后当它应该是 e-325 时,python 返回值 0。 我知道它与 python 的最大精度有关,因此我尝试使用“decimal”模块,但它不起作用。例如,如果我尝试如下操作:

from decimal import Decimal, getcontext

getcontext().prec = 400  
a = Decimal(10**(-325))
b = Decimal(10**(-325))

总和返回:

a+b

Decimal('0')
Python 精度

评论

5赞 deceze 10/6/2023
您提供的十进制值这一事实已经将您限制在浮点数的精度上。您需要使用字符串或安全数字文本进行初始化,并使用对实例的操作执行所有计算。10**(-325)DecimalDecimal

答:

1赞 rioV8 10/6/2023 #1

10**(-325)是一个普通的双精度值,用于初始化 、 so 和 are 两者DecimalabDecimal('0')

你必须构造小数

from decimal import Decimal, getcontext
getcontext().prec = 400

a = Decimal(10)**Decimal(-325)
b = Decimal(10)**Decimal(-325)

现在结果a+bDecimal('2E-325')