从 Java 17 和JEP 306开始,您不会使用它:
\n\n\n使浮点运算始终严格,而不是同时具有严格的浮点语义 (
\nstrictfp
) 和略有不同的默认浮点语义。SSE2(流 SIMD 扩展 2)扩展在 Pentium 4 和大约 2001 年开始的更高版本处理器中提供,可以以简单的方式支持严格的 JVM 浮点运算,而无需过多的开销。
\n由于 Intel 和 AMD 都长期支持 SSE2 和更高版本的扩展,这些扩展允许对严格浮点语义的自然支持,因此具有不同于严格的默认浮点语义的技术动机不再存在。
\n
另请参见JLS\xc2\xa0\xc2\xa78.4.3.5:
\n\n\n方法声明上的修饰符
\nstrictfp
已过时,不应在新代码中使用。它的存在或不存在对运行时没有影响。
从 Java 的最新 LTE 版本开始,语义上不再有任何差异,并且对于修饰符的使用出现了新的编译器警告strictfp
。
public class Strictly {\n public strictfp double calc(double d1, double d2) {\n return d1 * d2;\n }\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n$ javac Strictly.java\nStrictly.java:2: 警告: [strictfp] 从版本 17 开始,所有浮点表达式都经过严格计算,不需要 \'strictfp\'\n public strictfp double calc(double d1 , 双 d2) {\n ^\n1 警告\n\n