【问题标题】:Overflow when attempting to compute ratio of exponential functions尝试计算指数函数的比率时溢出
【发布时间】:2019-06-08 22:39:16
【问题描述】:

我正在尝试计算函数 sinh(k-k*x)/sinh(k) 的逐点值,其中 k=1e4x 的值介于 0 和 1 之间。这个函数本质上是指数函数的总和。当然,尝试计算exp(1e4) 会导致溢出错误。但是,上面的实际函数只取 0 和 1 之间的值,所以我想知道是否有一种聪明的方法可以计算指定范围内任意值 x 的函数。

函数可以展开成表格

exp(k-k*x)/(exp(k)-exp(-k)) - exp(k*x-k)/(exp(k)-exp(-k))

我想先尝试取对数,看看是否有什么可以简化的,但我找不到解决办法。有人对我如何处理这个问题有建议吗?我现在正在使用 Python,但我认为该语言在这里并不重要。

【问题讨论】:

标签: floating-point floating-accuracy


【解决方案1】:

如果你接受y=1-x,你正在尝试评估这个

(e^(ky)-e^(-ky)) / (e^k - e^(-k))

那是

e^(ky) * (1 - e^(-2ky)) / (e^k * (1 - e^(-2k)))

然后

e^(ky)/e^k = (e^k)^y * (e^k)^(-1) = (e^k)^(y-1) = e^(k(y-1)) = e^(-kx)

另一个因素(1 - e^(-2ky)) / (1 - e^(-2k)) 可以在没有溢出的情况下进行评估。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-15
    • 1970-01-01
    • 2020-02-06
    • 1970-01-01
    • 2021-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多