Floating point 尝试计算指数函数的比率时溢出

Floating point 尝试计算指数函数的比率时溢出,floating-point,floating-accuracy,Floating Point,Floating Accuracy,我试图计算函数sinh(k-k*x)/sinh(k)的逐点值,其中k=1e4和x的值介于0和1之间。这个函数本质上是一个指数函数的和。当然,试图计算exp(1e4)会导致溢出错误。但是,上面的实际函数只接受0到1之间的值,因此我想知道是否有一种聪明的方法可以计算指定范围内任意x值的函数 该函数可以扩展为 exp(k-k*x)/(exp(k)-exp(-k)) - exp(k*x-k)/(exp(k)-exp(-k)) 我想先试试对数,看看有没有什么可以简化的,但我看不出一条路。有人对我如何处理

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

该函数可以扩展为

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

我想先试试对数,看看有没有什么可以简化的,但我看不出一条路。有人对我如何处理这个问题有什么建议吗?我现在正在使用Python,但我认为语言在这里并没有那么重要。

如果您使用
y=1-x
,您将尝试对其进行评估

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

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


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

这对于@RobertBaron来说是个好问题,我会选择,但我有偏见:)
e^(ky)/e^k = (e^k)^y * (e^k)^(-1) = (e^k)^(y-1) = e^(k(y-1)) = e^(-kx)