【问题标题】:How can we use the strictfp method in a real life pogram? [duplicate]我们如何在现实生活中使用 strictfp 方法? [复制]
【发布时间】:2021-10-08 14:46:42
【问题描述】:

此问题与this 问题不重复。我知道java中的strictfp关键字用于this目的。但是我们如何在现实生活中使用它。它有什么优势?

【问题讨论】:

    标签: java java-17 strictfp


    【解决方案1】:

    从 Java 17 和 JEP 306 开始,您不会使用它:

    使浮点运算始终保持严格,而不是同时具有严格的浮点语义 (strictfp) 和略有不同的默认浮点语义。

    [T]SSE2(流 SIMD 扩展 2)扩展,大约在 2001 年开始在 Pentium 4 和更高版本的处理器中提供,可以以直接的方式支持严格的 JVM 浮点运算,而不会产生过多的开销。

    由于 Intel 和 AMD 都长期支持 SSE2 和更高版本的扩展,这些扩展允许自然支持严格的浮点语义,因此具有不同于严格的默认浮点语义的技术动机不再存在。

    另见JLS §8.4.3.5

    方法声明上的strictfp 修饰符已过时,不应在新代码中使用。它的存在与否对运行时没有影响。

    从 Java 的最新 LTE 版本开始,语义上不再有任何差异,并且针对使用 strictfp 修饰符有一个新的编译器警告。

    public class Strictly {
        public strictfp double calc(double d1, double d2) {
            return d1 * d2;
        }
    }
    
    $ javac Strictly.java Strictly.java:2: 警告:[strictfp] 从 17 版开始,所有浮点表达式都经过严格计算,不需要 'strictfp' 公共 strictfp 双计算(双 d1,双 d2){ ^ 1 个警告

    【讨论】:

    • 先生,那么在 java(18) 的下一个版本中,strictfp 会被弃用吗?
    • @JFan 我不确定。从某种意义上说,它现在已被弃用,因为它的使用会产生编译器警告,但我不知道他们是否打算做更多的事情。
    【解决方案2】:
    java中的

    strictfp用于在处理浮点数时产生相同的结果,而与平台无关。

    由于硬件的处理能力,不同平台上的精度可能会有所不同。所以它保证了代码在不同平台上执行时,输出不应该因为精度不同而被操纵。

    一些优点是,

    • 在各种机器上提供准确性
    • 结果不偏向于硬件架构

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-18
      • 2019-06-20
      • 1970-01-01
      • 1970-01-01
      • 2014-01-02
      • 2015-04-12
      • 1970-01-01
      相关资源
      最近更新 更多