【问题标题】:Does code becomes non - compliant in someway if strictfp not used?如果不使用 strictfp,代码是否会以某种方式变得不合规?
【发布时间】:2015-12-21 08:53:59
【问题描述】:

我们即将进行第一次代码审核,有人告诉我,不使用 strictfp 进行浮点运算可能会导致我们被标记。软件在 Windows 机器上编码并部署到 Solaris 机器以供生产使用。关于它是真的有什么建议吗?

另外,如果不使用 'strictfp' 会使浮点算术代码不兼容或不可移植,为什么仍然允许以 non-strictfp 方式进行计算?

CERT Secure Coding Standards, NUM53-J 让我觉得必须使用strictfp

需要跨不同 JVM 和平台的浮点运算获得一致结果的程序必须使用 strictfp 修饰符。

【问题讨论】:

  • 不要只是链接,还要引用相关位。我猜到了你可能的意思。
  • 如果您将其部署到 Intel 硬件上的 Windows 或 Solaris,那么无论您是否有 strictfp 都没有区别。 (但如果您有任何机会部署到 strictfp 确实会产生影响的硬件,那么在您的代码中使用 strictfp 是个好主意)查看我的一个较早问题的答案:stackoverflow.com/questions/22562510/…
  • 当你说“不合规”时——不合规是什么?
  • @KlitosKyriacou - 为了便于携带。
  • @Erwin - 谢谢,这很有帮助。开发机器是 Intel 的机器,试图找到生产服务器的详细信息。

标签: java portability strictfp


【解决方案1】:

如果您的应用程序需要浮点运算在不同 JVM 之间保持一致,那么是的,您需要 strictfp。如果它没有,那么不,你没有。一些应用程序不需要一致性,并且可以从不使用strictfp 可以提供的计算中间步骤中获得更高精度的潜力中受益。其他人需要为相同的输入提供完全相同的输出,因此需要strictfp 来保证输出的便携性。

【讨论】:

  • 在我的应用程序中,一致性(到处都是相同的最终结果)很重要,因为产品涉及抵押贷款利率和类似的东西。我猜我们需要 strictfp。
  • @Sabir_Khan:如果您正在处理抵押贷款利率和其他财务计算,那么strictfp 肯定与您的申请无关,因为它是only applies to double and float。您没有使用doubles 或floats 进行财务计算,是吗?如果是这样,您将收到一份更大的审计报告。对于财务,通常您需要BigDecimal(或直接实现其技术,即使用整数值和刻度)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-24
  • 1970-01-01
  • 2022-10-06
  • 1970-01-01
相关资源
最近更新 更多