我正在用Java实现一些神经网络库,并且有大量的double
(不是Double
)矩阵运算,矩阵很大,并且性能当然是必需的。
所以我开始阅读有关strictfp
关键字的内容,老实说我不明白它的确切作用,我正在寻找关于是否应该使用它以及为什么的简单解释。
最佳答案
strictfp表示浮点计算应使用确切的IEEE754标准。如果没有strictfp,则VM可以自由使用中间浮点和 double 值的其他(但取决于平台)表示形式,以提高精度。
如果您需要在多个平台上获得完全相同的结果,请使用strictfp。如果您希望当前平台可以为您提供最佳精度,请避免使用它。
例如。在以下简单的补充中:
2.0 + 1.1 + 3.0
您是否希望将中间结果(例如2.0 + 1.1)表示为IEEE754标准的两倍,或者以平台允许的最佳精度表示。 strictfp确保第一个选择,不使用strictfp允许VM使用第二个选择。
不使用strictfp不会损害性能,并且可能会在 native float 类型未映射到IEEE754的平台上提高性能,因为不需要VM在 native 和IEEE754格式之间来回转换。答案取决于平台,您需要进行衡量。
关于java - Java中的strictfp,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5181256/