回 帖 发 新 帖 刷新版面

主题:Fortran log运算

大家好,我现在正用Fortan做一个运算,其中要用到这样一个式子,y=log{1 /( 1+exp(x) )}.

exp(x)中的 x 一旦大于709 的话,exp(x) 的值就会大于Fortran 可以运算的范围。理论上

1 /( 1+exp(x) ) 会非常小,Fortran会默认为 0 。 如果这样的话,log(0)是没法运算的,请问该

如何处理呢?

 

 

回复列表 (共5个回复)

沙发

当 x 很大的时候,exp(x) 更大更大,所以 1+exp(x) 几乎就 == exp(x)

所以 y = log(1/(1+exp(x))) 约等于

y = - log( exp(x) )
  = -x * log(e)

其中 e = 2.718281828 ,我怀疑你的 log 应该是 ln

那样的话 , y = -x

板凳

我讲讲我的看法吧.
y=log{1/(1+exp(x))} = -log{1+exp(x)}
单精度计算的话, 有效数字6~7位左右, 所以1+exp(x)如果值大于10^7, 这个1就被误差吃掉(此时x=16~18左右). 于是可以合理地近似为:1+exp(x)=exp(x). 原式 y= = -log{exp(x)} = -x
双精度相应条件做出点变化.

个人看法, 仅供参考.

3 楼

差一分钟, 在雪球兄面前献丑了...

4 楼


非常感谢您的回复!

5 楼

[quote]差一分钟, 在雪球兄面前献丑了...[/quote]

词异理相同,与君共勉

我来回复

您尚未登录,请登录后再回复。点此登录或注册