C和Fortran中的精度不同

对于我正在从事的项目,我已经用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并不是最佳实践,但是我现在没有时间对此进行扩展.

上一篇:使用ctypes从Python调用fortran函数


下一篇:g77介绍 g77 是 Fortran77 的编译器。它对 Fortran 77 标准提供完备的支持,并支持 Fortran 90 和 95 的部分特性。 由于 Fortran 77 标准在数值计算中