Skip to content

ball_float 设计说明

BallFloat 是当前仓库里的包络表示。

表示

  • center_ : BinFloat
  • radius_ : BinFloat
  • precision_ : Int

语义是:

[center - radius, center + radius]

半径不变量

构造阶段会保证半径:

  • 有限
  • 非 NaN
  • 非负

当中心值被量化到更低精度时,构造与精度重调路径会把中心位移对应的误差并入半径,避免表示区间缩小。

sign 的含义

如果半径为零,sign 就等于中心值的符号。
如果包络跨过零点,当前实现返回 Sign::Zero

这意味着 Sign::Zero 在这里部分承担了“区间跨零”的语义。

算术模型

这里的算术遵循包络语义:

  • 加法和减法通过相加半径来扩张结果
  • 乘法使用基于中心绝对值与误差项的半径传播公式
  • 除法拒绝分母包络包含零的情况
  • 结果中心在回落到目标精度时,如果发生量化位移,该位移也会并入半径

为什么没有总序

BallFloat 提供的是:

  • 重叠
  • 分离
  • 可证明的小于/大于

而不是普通实数意义下的总序比较。