java - 如何在 Fortran 77 和 Java 数字代码之间获得机器精度协议(protocol)?

标签 java fortran ieee-754 fortran77

我在 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/

相关文章:

java - java中线程的使用方法

java - 如何在ScrollView的底部添加字符串

java - 使用反射获取 Field 的通用类型

floating-point - 计算算术均值时,哪种求和方式更精确?

mysql - 将 MySQL DECIMAL 转换为浮点 IEEE 表示形式的十六进制

java - Spring应用程序中数据源的IllegalArgumentException

c - 简单数学函数的基准 : why is Fortran and Julia faster than C

function - Fortran 函数返回未分配的数组会导致段错误

fortran - gdb if 条件语法错误

C++ ofstream浮点编码