EL *_*ine 4 c++ double fortran fortran77
对于我正在处理的项目,我用 C++ 编写了一个非常简单的函数:
Fne(x) = 0.124*x*x,问题是当我计算函数的值时
对于x = 3.8938458092314270Fortran 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;
}
Run Code Online (Sandbox Code Playgroud)
Fortran 代码:
real*8 function FNe(X)
implicit real*8 (a-h,o-z)
FNe = 0.124*X*X
return
end
Run Code Online (Sandbox Code Playgroud)
你能帮我找出这种差异的来源吗?
差异的一个来源是 C++ 和 Fortran 对文字常量的默认处理,例如您的0.124. 默认情况下,Fortran 会将其视为单精度浮点数(在您可能使用的几乎所有计算机和编译器组合上),而 C++ 会将其视为双精度 fp 数。
在 Fortran 中,您可以kind通过像这样添加种类选择器后缀来指定fp 数字(或任何其他与此相关的内在数字常量,并且没有任何编译器选项来更改最可能的默认行为)的
0.124_8
Run Code Online (Sandbox Code Playgroud)
试试看,看看结果如何。
哦,当我在写的时候,你为什么像 1977 年那样写 Fortran?和所有其他的Fortran专家溜,是的,我知道,*8和_8是不是最好的做法,但我没有在目前的时间上所有的扩展。
| 归档时间: |
|
| 查看次数: |
1018 次 |
| 最近记录: |