使用 Math.fma 的准确性和性能优势是什么?
我今天才注意到Java 9中存在,它计算
(对于双精度
值和浮点
值)。Math.fma(a, b, c)
a*b + c
返回三个参数的融合乘法加法;也就是说,返回与第三个参数相加的前两个参数的确切乘积,然后舍入一次到最接近的浮点数。舍入是使用舍入到最接近的偶数舍入模式完成的。相反,如果将 a * b + c 计算为正则浮点表达式,则涉及两个舍入错误,第一个用于乘法运算,第二个用于加法运算。
因此,看起来它通过执行1舍入而不是2来提高准确性。这是对的吗?这是以CPU能力为条件的,还是我们可以始终依靠它?
我猜它可能是使用特殊的CPU指令实现的。事实果真如此吗?如果是这样,我们能否期望性能也带来好处?我有兴趣阅读有关当前平台/ CPU的实际好处,以及假设的未来好处。
编辑(试图让它不那么宽泛):我不是在关注非常详细的答案:对几个项目是/否来纠正/确认我的理解,加上一些指针,足以让我将答案标记为已接受。我对准确性和性能方面都非常感兴趣,我认为它们相辅相成......