为何无法复现strictfp修饰符的效果?求可复现示例
寻找Java中
strictfp修饰符产生差异的可复现示例 我深知此问题在社区中可能较为常见,但在我的编程生涯中从未成功复现过相关现象。我理解strictfp修饰符的作用,它能确保计算完全符合IEEE754标准,但从未遇到官方规范中提及的使用扩展指数值的场景。
我曾尝试过以下实验方案:
- 使用
-XX:+UseFPUForSpilling选项在现代处理器上强制使用FPU块计算,但毫无效果; - 在虚拟机中安装Windows 98 SE,通过Bochs模拟不支持SSE指令集的Intel Pentium II处理器,期望只能依赖FPU块计算,仍未得到预期结果。
我的实验逻辑是:取double类型的最大值乘以2,使中间结果超出double的允许范围,再除以4后存回double变量。理论上应得到有意义的结果,但所有场景下最终都得到Infinity。
截至2024年,我在全网未找到任何能展示使用与不使用strictfp产生不同结果的可复现示例。Java诞生近30年,难道真的没有此类清晰示例吗?
注:我了解Java 17+的情况,所有实验均在理论上应能观察到差异的早期版本(虚拟机中安装了Java SE 1.3)中进行。
内容的提问来源于stack exchange,提问作者Dmytro Kostenko
相关产品推荐
相关产品推荐

