arithmetic
Luna-Flow/arithmetic 定义 Luna Flow 数值类型的分析能力:初等函数;返回结构化错误的检查运算;在显式精度和舍入模式下报告结果如何被舍入的上下文运算;以及区间等包络之间的关系。它为 Float、Double 和整数类型提供默认实例,而把忠实遵循上下文的算术和经认证的算术留给实现同一组 trait 的后端。
本手册描述版本 0.5.0,以及 CHANGELOG.md 中列出的尚未发布的 MoonBit 0.10 迁移。
定位
luna-generic 说明一个类型是什么(Ring、Field 等)。arithmetic 说明它支持哪些分析运算以及这些运算如何失败。数值后端实现这些 trait,算法依赖这些 trait 而不是具体的数值类型。
| 层级 | 示例 | 返回 | 适用场景 |
|---|---|---|---|
| 非检查 | 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 | 能力 trait、ArithmeticContext、诊断、错误与认证详情,以及 Float/Double/整数实例 | API、教程、设计 |
黑盒测试(src/*_test.mbt)和白盒测试(src/certification_error_wbtest.mbt)属于同一个包;验证指南列出了它们所确立的内容。
阅读路线
- 初次接触本包: 先阅读入门,再阅读 core 教程。
- 在库中使用它: 随手备好 core API;其中的表格说明了每个随包实例在边界情形(NaN、零、无穷、上溢)下的实际行为。
- 实现后端或参与贡献: 阅读 core 设计了解契约及其数学,阅读架构了解代码布局,并在发起 pull request 之前阅读验证和约定。
安装
moon add Luna-Flow/arithmetic@0.5.0
import {
"Luna-Flow/arithmetic" @lf_arith,
}
本包依赖 Kaida-Amethyst/math 来提供 Float 和 Double 的初等函数。其测试还用到 Luna-Flow/luna-generic。
工具链
代码面向 MoonBit moonc 0.10 或更高版本,使用 moon.mod 和 moon.pkg 清单,并在 wasm-gc、wasm、js 和 native 后端上进行检查。