本帖最后由 楚香饭 于 2015-9-30 07:36 编辑
由于浮点数有误差。所以 1.0/3.0 并不能精确的表示 1/3,例如可能是 0.333333334,极大可能是一个偶数分之一。
你知道,负数开偶次方会是 NaN 对吧?
所以,如果要开三次方,比较好的办法,是先取绝对值,开方以后,再把符号乘上去。(sign函数可以返回符号,即1.0或-1.0)
以下代码在三个编译器上测试,均能得到正确结果。
[Fortran] 纯文本查看 复制代码 Program www_fcode_cn
Implicit None
real(8) :: d = -1.63899782385934d-24 , s
s = sign(1.0d0,d)*abs(d)**(1.0d0/3.0d0)
write(*,*) s , d , s*s*s
End Program www_fcode_cn |