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

Java中精确表示的double乘除结果是否保证精确(不超±INF时)?

关于IEEE-754双精度浮点数乘法与除法的精确性问题

答案是否定的——不管是乘法还是除法,都没法保证运算结果一定能被double类型精确表示,哪怕输入的a和b本身是符合IEEE-754标准的精确值,且运算结果没有溢出到±INF。

乘法的反例

取两个能被double精确表示的整数:

double a = Math.pow(2, 52) + 1; // 2^52+1是精确值,2^53以内的整数都能被double精确存储
double b = 2.0;

两者相乘的结果是2^53 + 2,但double类型的尾数只有52位(加1位隐含位),最多能精确表示到2^53以内的连续整数,2^53 + 2无法被精确存储,运算后会得到一个近似值。

除法的反例

更直观的例子:

double a = 1.0;
double b = 3.0;

a / b的结果是1/3,这个值在二进制中是无限循环的小数,不符合IEEE-754双精度浮点数的有限尾数存储规则,因此无法被精确表示,运算后返回的是近似值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 08:42:12