我们即将进行第一次代码审核,有人告诉我,不使用strictfp
进行浮点运算可能会被标记出来。软件在Windows计算机上编码,并部署到Solaris计算机上以用于生产。关于它是真的有什么建议吗?
另外,如果不使用“strictfp”可以使浮点算术代码不兼容或不可移植,为什么仍然允许使用 non-strictfp 方式进行计算?
CERT Secure Coding Standards, NUM53-J让我觉得必须使用strictfp
:
需要跨不同JVM和平台进行浮点运算的一致结果的程序,必须使用strictfp修饰符。
最佳答案
如果您的应用程序需要浮点操作以在不同的JVM之间保持一致,那么是的,您需要strictfp
。如果不是,那么您就不会。某些应用程序不需要一致性,并且可以从不使用strictfp
可以提供的中间计算步骤中受益于更高的精度。其他人则需要为相同的输入提供完全相同的输出,因此需要strictfp
来保证可移植的输出。