本文目录导读:

Java 的数学 API 主要更新体现在 Java 8、Java 9、Java 17 和 Java 21 这几个版本。
以下是各版本最核心的数学 API 更新:
Java 8:最重大的扩展
这是 Java 数学 API 扩展最大的一次,主要在 java.lang.Math 和 java.lang.StrictMath 中新增了大量函数:
- 精确算术运算:
addExact(),subtractExact(),multiplyExact(),negateExact():当结果溢出时直接抛出ArithmeticException,而不是静默返回错误值。incrementExact(),decrementExact():安全的 +1/-1 操作。
- 无符号整数处理:
floorDiv(),floorMod():向负无穷取整的除法与取模(不同于传统向零取整)。toIntExact():将long安全转换为int。
- 其他常用数学计算:
floor():返回不大于参数的最大整数(双精度)。nextDown():返回比参数小的下一个浮点数(对应已有的nextUp())。copySign():复制符号位。
Java 9:精度与除法的改进
Math.fma(float, float, float)和Math.fma(double, double, double): 执行浮点融合乘加运算(a * b + c),关键优势是它只舍入一次,相比之下,先乘后加会舍入两次,fma()结果更精确。
Java 17:向量计算的序幕
jdk.incubator.vector模块:这是一个孵化器模块,引入了 Vector API。- 它允许开发者使用 SIMD(单指令多数据流)指令,在 CPU 上并行处理数组数据,显著提升科学计算、机器学习等场景的性能。
- 官方示例:
FloatVector SPECIES_PREFERRED; SPECIES_PREFERRED.broadcast(1.0f);。
Java 21:除法与向量功能转正
Math.divideUnsigned()和Math.floorDiv()的溢出处理:divideUnsigned():无符号除法,当除数为 0 时抛出ArithmeticException。floorDivExact(int, int)和floorDivExact(long, long):安全向负无穷取整除法,溢出时抛出异常。
- 向量 API 转正:
jdk.incubator.vector模块在 Java 19 和 20 经历三轮孵化后,在 Java 21 中正式成为标准 API,不再是孵化器特性。
总结表:你最需要关心的 API
| 版本 | 新增方法 / 特性 | 主要用途 |
|---|---|---|
| Java 8 | addExact, multiplyExact, floorDiv, floorMod, toIntExact |
防止整数溢出,安全处理大数 |
| Java 9 | fma(a, b, c) |
高精度浮点乘加运算(一次性舍入) |
| Java 17 | Vector API (孵化器) |
高性能并行向量计算(SIMD) |
| Java 21 | floorDivExact, divideUnsigned, Vector API (转正) |
更安全的除法、官方推荐的高性能并行数学运算 |
注意:java.math.BigDecimal、BigInteger 和 java.util.Random 的更新不在此列,它们属于各自的独立更新范畴。
如果你需要查看某个具体方法的源码细节或使用示例,可以告诉我,我可以帮你进一步解释。