定义:对于给定的浮点格式,特定实数值的 ulp 是与此实数值左右最近的两个浮点数的距离。
以IEEE754标准的32位浮点数为例。如果想表示实数值 0.1 是无法准确表示的,只能用最接近 0.1 的可以精确表示的浮点数来表示。这样的数有两个,设为A、B,它们的十六进制和十进制表示分别为:
A: 十六进制:0x3dcccccc 十进制:0.099999994039536 B: 十六进制:0x3dcccccd 十进制:0.10000000149012
那么 0.1 的 ulp 就等于 |A - B| = 0.00000000745076
如果计算机 1 使用向下近似的方法用 A 来表示 0.1
那么误差ulps = 0.1 - 0.099999994039536 = 0.000000005960464 = (0.000000005960464 / 0.00000000745076) ≈ 0.8
如果计算机 2 使用向上近似的方法用 B 来表示 0.1
那么误差ulps = 0.10000000149012 - 0.1 = 0.00000000149012 = (0.00000000149012 / 0.00000000745076) ≈ 0.2
由上述计算可知,在 IEEE754 标准的 32 位浮点数的前提下,计算机 1 关于 0.1 的计算误差为 0.8 ulps,计算机 2 关于 0.1 的计算误差为 0.2 ulps。