尝试计算指数函数的比率时发生溢出

时间:2019-06-08 22:39:16

标签: floating-point floating-accuracy

我正在尝试计算函数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工作,但我认为这里的语言无关紧要。

1 个答案:

答案 0 :(得分: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))而不会发生溢出。