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

如何计算尾数为最大值的浮点数的ULP?

关于ULP(最后一位单位)的疑问解答

首先明确:任何可表示的浮点数都有对应的ULP,ULP的核心定义就是该浮点数与相邻的下一个更大可表示浮点数之间的差值,不管尾数是否会溢出进位。

针对你举的5位尾数、3位指数的浮点数11111 100(假设是规格化表示,二进制指数100对应十进制4),这个数的实际值为 (1 + 31/32) × 2^4 = 31.5。下一个更大的可表示浮点数是指数加1(变为二进制101,即十进制5)、尾数归为00000的数,也就是(1 + 0/32) × 2^5 = 32。两者的差值是32 - 31.5 = 0.5,这就是11111 100的ULP。

再看你提到的公式「ULP = 机器epsilon × 2^指数」:
对于这个浮点数格式,机器epsilon是1.0到下一个可表示数的差值,即2^(-5) = 1/32 = 0.03125。代入原数的指数4计算:0.03125 × 2^4 = 0.5,和实际的ULP完全一致。

你之前误以为公式仅适合同指数的情况,是因为没注意到尾数全1时,溢出进位后的间隙值依然符合公式计算结果——本质上,机器epsilon是「指数为0时的ULP」,其他指数下的ULP就是epsilon乘以对应指数的缩放倍数,这个规律对所有规格化浮点数都成立,包括尾数全1的边界情况。

总结:

  • 所有可表示浮点数都有ULP,不存在没有ULP的情况
  • 「ULP = 机器epsilon × 2^指数」是通用公式,并非仅适合同指数的相邻浮点数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 17:20:04