标准库 - 更高精度的浮点数?
我在用Python的时候遇到了一些精度问题。
我想计算像这样的函数:
P(x,y) = exp(-x)/(exp(-x) + exp(-y))
其中x和y可能大于1000。在Python 2.6中,math.exp(-1000)的浮点数精度不够,无法处理这个问题。
- 这个形式看起来像是逻辑回归/对数几率,但其实不是,对吧?我是不是漏掉了什么代数上的简化?
- 我知道有Decimal这个东西,但不确定它是否适用这里。
- 看起来像是作业,但我保证不是!
(另外,我也在想标题!我想不出一个好的标题来描述这个问题!)
4 个回答
4
P(x,y) = exp(-x)/(exp(-x) + exp(-y))
等价于:
P(x,y) = 1 / (1 + exp(x-y))
也许第二种方法在不需要更高精度的情况下就能正常工作。
8
在编程中,有时候我们需要让程序在特定的条件下执行某些操作。这就像是给程序设定了一些规则,只有当这些规则被满足时,程序才会继续运行。
比如说,你可能希望程序在用户输入一个正确的密码后才能继续进行。这种情况下,你就需要用到“条件判断”。条件判断就像是一个检查点,程序会在这里停下来,看看条件是否成立。如果成立,程序就会继续执行;如果不成立,程序可能会给出一个提示,告诉用户需要做些什么。
在代码中,条件判断通常用“if”语句来实现。你可以把“if”想象成一个问号,程序会问:“如果这个条件成立,我该怎么做?”
通过使用条件判断,我们可以让程序变得更加智能和灵活,能够根据不同的情况做出不同的反应。
>>> import decimal
>>> decimal.Decimal(-1000).exp()
Decimal('5.075958897549456765291809480E-435')
>>> decimal.getcontext().prec = 60
>>> decimal.Decimal(-1000).exp()
Decimal('5.07595889754945676529180947957433691930559928289283736183239E-435')
8
你可以用 exp(-x)
来把上面和下面的部分都除一下。
P(x,y) = 1/(1 + exp(x-y))