首页 > 解决方案 > 我们如何在现实生活中使用 strictfp 方法?

问题描述

这个问题不是这个问题的重复。我知道strictfpjava中的关键字就是用于这个目的。但是我们如何在现实生活中使用它。它的优点是什么?

标签: javajava-17strictfp

解决方案


从 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 个警告

推荐阅读