对于我正在从事的项目,我已经用C语言编写了一个非常简单的函数:
Fne(x)= 0.124 * x * x,问题是当我计算函数的值时
对于x = 3.8938458092314270(使用Fortran 77和C语言),我得到了不同的精度.
对于Fortran,我的Fne(x)= 1.8800923323458316,对于C我的Fne(x)= 1.8800923630725743.对于两种语言,Fne函数都编码为双精度值,并且还返回双精度值.
C代码:
double FNe(double X) {
double FNe_out;
FNe_out = 0.124*pow(X,2.0);
return FNe_out;
}
Fortran代码:
real*8 function FNe(X)
implicit real*8 (a-h,o-z)
FNe = 0.124*X*X
return
end
您能帮我找到区别的地方吗?
解决方法:
差异的一个来源是C和Fortran对文字常量(例如0.124)的默认处理.默认情况下,Fortran会将其视为单精度浮点数(几乎在您可能使用的任何计算机和编译器组合上),而C会将其视为双精度f-p数.
在Fortran中,您可以通过在后缀中添加种类选择器来指定f-p数的种类(或与此相关的任何其他内在数值常量,并且不包含任何编译器选项来更改最可能的默认行为)
0.124_8
试试看,看看结果如何.
哦,而当我在写作时,为什么还要像1977年那样写Fortran?对于所有其他Fortran专家,是的,我知道* 8和_8并不是最佳实践,但是我现在没有时间对此进行扩展.