标准库 - 更高精度的浮点数?

时间:2009-11-27 23:37:43

标签: python floating-point

所以,我在Python中遇到了一些精确问题。

我想计算这样的函数:

P(x,y) = exp(-x)/(exp(-x) + exp(-y))

x和y可能> 1000。 Python的math.exp(-1000)(至少在2.6中!)没有足够的浮点精度来处理这个问题。

  1. 这个表单看起来像logistic / logit / log-odds,但它不是,对吧?我在这里缺少一些代数简化吗?
  2. 我知道Decimal,但不确定它是否适用于此
  3. 看起来像是家庭作业,但不是,我保证!
  4. (另外,我对标题持开放态度!对于这个问题,我想不出一个好的!)

4 个答案:

答案 0 :(得分:8)

您可以按exp(-x)

划分顶部和底部
P(x,y) = 1/(1 + exp(x-y))

答案 1 :(得分:8)

>>> import decimal
>>> decimal.Decimal(-1000).exp()
Decimal('5.075958897549456765291809480E-435')
>>> decimal.getcontext().prec = 60
>>> decimal.Decimal(-1000).exp()
Decimal('5.07595889754945676529180947957433691930559928289283736183239E-435')

答案 2 :(得分:4)

P(x,y) = exp(-x)/(exp(-x) + exp(-y))

相当于:

P(x,y) = 1 / (1 + exp(x-y))

也许第二个可以在不使用更高精度的情况下工作。

答案 3 :(得分:3)

我认为您正在寻找用于任意精度浮点可靠算术的bigfloat包。