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

64位浮点数下为什么sqrt(2^52+1)-sqrt(2^52)结果为0?

双精度浮点数规则下该计算现象的成因

直接整数减法得到1的原因

  • 64位双精度浮点数的尾数包含52位显式存储位+1位隐含前导1,总共有53位二进制精度,可精确表示所有绝对值≤2^53的整数。2^52和2^52+1都远小于2^53,二者都可以被无误差存储,因此直接做整数减法(2^52+1)-2^52可以得到精确结果1。

sqrt运算相减得到0的原因

  • sqrt(2^52)的结果是精确值2^26,无任何计算误差。
  • 对sqrt(2^52 + 1),可用泰勒展开近似:当Δ远小于a时,sqrt(a²+Δ) ≈ a + Δ/(2a)。代入a=2^26、Δ=1,可得近似值为2^26 + 1/(2^27) = 2^26 + 2^-27。
  • 双精度浮点数的最小可分辨间隔eps(x)表示数值x附近两个相邻可表示浮点数的差值,计算公式为eps(x) = 2^(floor(log2(x)) - 52)。对于x=2^26,eps(2^26) = 2^(26 - 52) = 2^-26。
  • 此时sqrt(2^52+1)和2^26的差值刚好是eps(2^26)的一半,按照双精度默认的就近舍入、偶数优先规则,该值会被舍入到最近的可表示浮点数,也就是2^26本身。
  • 因此sqrt(2^52+1)的计算结果和sqrt(2^52)完全相等,二者相减自然得到0。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 11:45:06