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)