ball_float 設計ノート
BallFloat はこのリポジトリの包絡表現です。
表現
center_ : BinFloatradius_ : BinFloatprecision_ : Int
意味は:
[center - radius, center + radius]
半径不変条件
構築時に半径は次を満たすよう検証されます。
- 有限
- 非 NaN
- 非負
中心値をより低い精度へ量子化する場合、構築経路と精度変更経路は中心変位に対応する誤差を半径へ加え、表現区間が縮まらないようにします。
sign の意味
- 半径が 0 なら中心値の符号
- 包絡全体が正なら
Positive - 包絡全体が負なら
Negative - 零をまたぐなら
Zero
これは Sign::Zero がこのパッケージでは一部「零をまたぐ区間」という意味も担うことを示します。
算術モデル
この算術は包絡指向です。
- 加算と減算は半径を足し合わせて結果を広げます
- 乗算は中心の絶対値と誤差項に基づく半径伝播式を使います
- 除算は分母包絡が零を含む場合を拒否します
- 出力中心を目標精度へ量子化したときの変位も半径へ戻し込みます
全順序を持たない理由
この型は:
- 重なり
- 分離
- 証明可能な
</>
を提供しますが、通常の実数のような全順序は提供しません。