java - 我们如何在现实生活中使用 strictfp 方法?
解决方案
从 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 个警告
推荐阅读
- ios - 如何创建一个精度为 0.1 秒的计时器?
- r - R 堆积条形图
- ssl - 如何修复“javax.net.ssl.SSLHandshakeException:链验证失败”
- symfony - Symfony 4重定向循环以登录表单多个角色
- vb.net - 忽略空白文本框
- mysql - 如何准确选择用户名和密码注意大小写字母 - mysql
- python - After using @ray decorator can't add data to dictionary
- mysql - Laravel NULL 日期是有效的“今天”日期
- ios - pod install error [!] 无法添加 URL 名为“master-1”的源
- c# - Session.clear 会话放弃不起作用