You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java 8/17浮点计算差异致Apache Commons最小二乘优化器不收敛问题

JDK 8与JDK 17浮点语义差异导致Apache Commons Math优化器收敛异常问题

问题背景

我们基于Java开发的科学计算流水线中,使用Apache Commons Math 3.6.1的最小二乘优化器。将环境从JDK 8(jdk8u322-b06)迁移至JDK 17(17.0.5)后,发现两者存在数值计算差异。

复现验证

通过排除数据加载、多线程等干扰因素的单元测试,可稳定复现以下现象:

  • JDK 17恢复严格浮点语义后,优化器无法收敛;而JDK 8下可正常完成收敛。
  • JDK 8环境中,代码的解释执行与编译执行结果也存在数值差异,所有场景的结果均完全可复现。

问题定位

已定位到Apache Commons Math的LevenbergMarquardtOptimizer类第453行代码:

  • 在JDK 17中迭代至第17次时,actRed值为0(因r == 1),进而触发第533行的ConvergenceException。
  • 在JDK 8中,同位置的actRed为微小正值,不会触发该异常。

复现步骤

切换项目pom.xml中的java.version参数为1.8或17,运行TimeSeriesModelFitterBugTest测试用例即可复现问题。

咨询问题

  1. 该浮点计算差异现象是否为JDK官方文档化的已知行为?
  2. 该问题是否属于JDK 8或JDK 17的Bug?

内容的提问来源于stack exchange,提问作者greg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 13:30:59