翻译尚未覆盖全部内容。完整技术参考请查阅英文原文。 查看英文版本 →

单位和不确定性

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。