我在 Fortran77 (gfortran) 中有一个数字代码。我将它翻译成 Java (jdk7)。
我希望这两个代码的机器精度完全相同。有没有办法做到这一点?是否有任何编译器开关可以强制 gfortran 和 jdk7 以完全相同的方式对 float 进行运算?
问题是代码非常复杂,一段时间后,两个代码开始给出一些不同的结果(我认为是因为 float 的舍入)。从统计上看,结果看起来是一样的,但我真的非常希望能够将它们与机器精度进行比较。
最佳答案
这几乎是不可能的,尤其是对于复杂的代码。尝试禁用优化。确保在两个版本( double )中使用相同大小的浮点变量。您必须确保没有更改任何表达式,两个版本中的括号相同,乘法和加法的顺序相同...
在 gfortran 中使用 -fprotect-parens
、-fno-unsafe-math-optimizations
、-frounding-math
以及类似的 Java .
跟踪确切出现差异的位置,并检查这些行在 Fortran 和 Java 中有何不同。
关于java - 如何在 Fortran 77 和 Java 数字代码之间获得机器精度协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32582574/