使用日志值来表示科学价值

时间:2015-03-27 21:56:04

标签: java floating-point logarithm micro-optimization

我最近阅读了一些需要进行大量乘法的java科学代码。

实现使用日志值,因为开发人员认为它更快更精确。

例如, 如果他/她需要计算双倍值A[1]*A[2]*...*A[n],则他会让La[i]=log(A[i]),然后La[1]+La[2]...+La[n]

(所有值都是最终值,因此可以重用。无需担心一次性log()操作。)

对我来说,我真的不确定这是否会带来显着的性能优势。

  1. 我在线查看了What's the relative speed of floating point add vs. floating point multiplyhttps://agner.org/optimize/)。在现代CPU中,我没有看到FP的加速明显快于FP乘法。

  2. 我还阅读了IEEE的double二进制表示标准。我不认为日志值可以保留更多信息以使价值更精细,因为IEEE标准也在做同样的事情。

  3. 您怎么看?

1 个答案:

答案 0 :(得分:-2)

目的可能不是表现,而是处理非常大的数字。当处理系统中的原子数,状态总数等时,这可能很有用,这很容易超出浮点范围。