arithmetic
Luna-Flow/arithmetic は Luna Flow の数値型の解析的能力を定義する。初等関数、構造化エラーを返す検査付き演算、明示的な精度と丸めモードのもとで結果がどう丸められたかを報告するコンテキスト付き演算、そして区間のような包含区間どうしの関係である。Float、Double、整数型の既定のインスタンスを提供し、コンテキストに忠実な算術と証明付き算術は、同じトレイトを実装するバックエンドに任せる。
このマニュアルはバージョン 0.5.0 と、CHANGELOG.md に記載した未リリースの MoonBit 0.10 移行を記述する。
位置付け
luna-generic は型が何であるか(Ring、Field など)を述べる。arithmetic はその型がどの解析的演算をサポートし、それがどう失敗するかを述べる。数値バックエンドがこれらのトレイトを実装し、アルゴリズムは具体的な数値型ではなくトレイトに依存する。
| 層 | 例 | 戻り値 | 使う場面 |
|---|---|---|---|
| 非検査 | Sqrt::sqrt | Self | 型自身の特殊値の振る舞いで構わない |
| 検査付き | SqrtChecked::sqrt_checked | Result[Self, ArithmeticError] | 不正な入力を処理されるエラーにしなければならない |
| コンテキスト付き | SqrtContextual::sqrt_contextual | Result[ArithmeticOutcome[Self], ArithmeticError] | 精度と丸めを明示し、診断が重要である |
| 包含区間の関係 | DefinitelyLt::definitely_lt | Bool | 値が点ではなく区間やボールである |
パッケージ
モジュールにはソースルート src/ に一つのパッケージがあり、core として文書化される。
| パッケージ | インポートパス | 内容 | ページ |
|---|---|---|---|
core | Luna-Flow/arithmetic | 能力トレイト、ArithmeticContext、診断、エラーと証明の詳細、Float/Double/整数のインスタンス | API、チュートリアル、設計 |
ブラックボックステスト(src/*_test.mbt)とホワイトボックステスト(src/certification_error_wbtest.mbt)は同じパッケージに属する。それらが何を確かめるかは検証ガイドに挙げる。
読み進め方
- パッケージが初めての場合: はじめにを読み、続いて core チュートリアル を読む。
- ライブラリで使う場合: core API を手元に置くこと。その表は、提供される各インスタンスが境界(NaN、ゼロ、無限大、オーバーフロー)で実際に何をするかを示す。
- バックエンドを実装する、または貢献する場合: 契約とその数学については core 設計 を、構成についてはアーキテクチャを読み、プルリクエストを出す前に検証と規約を読む。
インストール
moon add Luna-Flow/arithmetic@0.5.0
import {
"Luna-Flow/arithmetic" @lf_arith,
}
このパッケージは Float と Double の初等関数のために Kaida-Amethyst/math に依存する。テストでは Luna-Flow/luna-generic も使う。
ツールチェーン
コードは moon.mod と moon.pkg マニフェストを使う MoonBit moonc 0.10 以降を対象とし、wasm-gc、wasm、js、native の各バックエンドで検査される。