【发布时间】:2018-02-12 14:44:44
【问题描述】:
如果我正在实现一个包含 1-Math.exp(-50) 的公式并希望结果具有高性能,我应该预先计算该常量并将其保存在 static final double 中,或者 Java 编译器是否足够聪明,可以意识到结果是常量并预先计算它,就像使用1-50/7 这样更简单的东西一样?
【问题讨论】:
-
其实这些函数的预计算表是应用中常见的优化,需要大量使用它们。就像在密码学中,log 和 exp 表用于有效地计算大功率。
-
1-Math.exp(-50)只是1.0,无需计算 -
@harold 从技术上讲它是 1-1.9287498e-22 - 所以不是 1.0 ;)
-
@TimB 技术上 1-1.9287498e-22 = 1.0
-
@harold 很有趣,1.9e-22 适合双倍,但是当你从 1 中减去它时,就不再适合了。我想这是有道理的,但它并不能回答更一般的情况。
标签: java performance compiler-optimization