我在Fortran77(gfortran)中有一个数字代码。我把它翻译成Java(jdk7)。
我希望这两个代码的结果与机器精度完全相同。有没有办法实现这一目标?是否有任何编译器开关可以强制执行gfortran和jdk7以完全相同的方式操作浮点数?
问题是代码非常复杂,经过一段时间后,两个代码开始产生一些不同的结果(因为我认为浮点数的四舍五入)。从统计上看,结果看起来一样,但我真的非常希望能够将它们与机器精度进行比较。
答案 0 :(得分:3)
这几乎是不可能的,特别是对于复杂的代码。尝试禁用优化。确保在两个版本(双精度)中使用相同大小的浮点变量。您必须确保没有更改任何表达式,两个版本中的括号相同,乘法和加法的顺序相同......
在gfortran中使用-fprotect-parens
,-fno-unsafe-math-optimizations
,-frounding-math
以及类似的Java。
跟踪差异的确切位置,并检查这些行在Fortran和Java中的区别。