scala - Scala 版本之间数值行为的差异

标签 scala scala-2.10 numerical

我们正在升级到 Scala 2.10。我们似乎已经修复了所有的问题,但对于我们的一些数值计算,在少数情况下答案会略有不同。 2.9.1 和 2.10.2 之间是否引入了任何可能导致此问题的已知更改,或者其他人之前是否遇到过类似情况?

由于我们所有的小测试都通过了,这应该是迭代计算中的一些累积效应,即便如此,它也只会影响一小部分情况。这些是复杂的计算,这是执行它们的唯一系统,因此我们没有独立的方法来验证哪个版本是正确的,除非进行洁净室重新实现。

最佳答案

抱歉,目前还不能发表评论。 您看到的差异有多大?您在代码中进行了何种计算?问哪个是正确的可能没有意义,毕竟是 FP。你能尝试用 strictfp 编译你的代码吗?代码生成和优化方面的细微差异可能会导致 80 位中间体被截断为 64 位的时间/频率有所不同——假设您在 x86 架构上运行。如果您可以访问没有 80 位 fp 寄存器的硬件,您可以尝试在其上运行两个版本。即使这样,像 LL + S1 + S2 这样的简单表达式(其中 LL 远大于 S1 或 S2)也可以根据加法的顺序给出不同的结果。

关于scala - Scala 版本之间数值行为的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18372056/

相关文章:

scala - 惯用的 scala 处理文件 A 或文件 B?

python - 在Python中使用sorted()对csv文件进行排序会返回程序员DESC顺序的值,而不是时间DESC顺序

algorithm - 初始解接近最优的多元函数优化

scala - Scala 2.9 REPL 的 settings.maxPrintString

android - 是否可以在 android studio 的 java 文件中使用 scala 对象?

scala - 非文字值的模式匹配

斯卡拉 : generics and variable inheritance issue

有效地将十进制移位应用于所有数字的算法

scala - 如何使用SBT和IntelliJ IDEA管理多个相互依赖的模块?

scala - APL 可以作为 DSL 在 Scala 中实现吗?