单位和不确定性
Sounio中的编译时单位检查和GUM不确定性传播
单位和不确定性
Sounio有内置的单位检查吗? 有。物理维度在编译时检查。
如何传播测量不确定性? 使用带有GUM(测量不确定性表示指南)传播的Knowledge<T>。
维度分析 — 编译时单位检查
Sounio在类型级别检查物理维度。将米与秒相加是编译错误,而不是运行时错误。
fn main() with IO {
let distance: m = 100.0
let time: s = 9.58
// 这会编译: m / s = m/s
let velocity = distance / time
println(velocity) // 10.438413
// 这是编译错误:
// let wrong = distance + time
// error[E041]: unit mismatch
}
已验证示例
完整的维度安全示例在examples/showcase/type_safe_units.sio。
不确定性传播 — Knowledge<T>和GUM
Knowledge<T>表示带有标准不确定性的测量值。不确定性通过计算传播,遵循测量不确定性表示指南(JCGM 100:2008)。
已验证示例
完整的GUM传播示例在examples/science/uncertainty_propagation.sio。
状态和限制
-
单位: 编译时检查有效。派生单位(
m/s,kg·m/s²)正确组合。 -
不确定性(
Knowledge<T>): 已实现f64、bool和结构类型的GUM传播。 -
未实现:
Knowledge<f128>和128位浮点数上的GUM(KL-15)。 -
这是pre-1.0软件。参见KNOWN_LIMITATIONS.md。