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

为什么java.lang.Math类中Pi与E两个常量的精度存在差异?

java.lang.Math类中E和PI常量小数点后位数差异的原因

我们先看JDK中这两个常量的定义:

  • public static final double E = 2.7182818284590452354;
  • public static final double PI = 3.14159265358979323846;

这个小数点后位数的差异只是字面量书写层面的差异,没有特殊的技术设计原因,也完全不会影响运行时的实际精度:

  • 两个常量的底层存储都是IEEE 754标准的双精度浮点数,这种类型最多只能保留约15~17位十进制有效数字,字面量中超出这个范围的位数在编译阶段就会被截断,不会实际生效。
  • 算上整数位的话,两个常量写出来的有效数字位数本身就非常接近:E的字面量总共有20位有效数字,PI的字面量总共有21位有效数字,都超过了双精度能承载的上限,多写的位数本质上是冗余的。
  • 这个书写形式是JDK早期版本就一直沿用下来的,只是源码作者当时参考的数学常数书写格式如此,没有特别的考量。你可以自己写测试验证:手动把E的字面量补到小数点后20位,编译后得到的double值和原定义的E完全相等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 23:45:07