-1

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

4

2 回答 2

7

从 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 个警告
于 2021-10-08T15:12:02.910 回答
1

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

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

一些优点是,

  • 在各种机器上提供精度
  • 结果不偏向于硬件架构
于 2021-10-08T15:16:59.747 回答