Unidades e Incerteza
Checagem de unidades em tempo de compilação e propagação de incerteza GUM no Sounio
Unidades e Incerteza
O Sounio tem checagem de unidades embutida? Sim. Dimensões físicas são checadas em tempo de compilação.
Como propagar incerteza de medição? Use Knowledge<T> com propagação GUM (Guide to the Expression of Uncertainty in Measurement).
Análise dimensional — checagem de unidades em tempo de compilação
O Sounio checa dimensões físicas no nível de tipo. Somar metros com segundos é um erro de compilação, não um bug de runtime.
fn main() with IO {
let distance: m = 100.0
let time: s = 9.58
// Isso compila: m / s = m/s
let velocity = distance / time
println(velocity) // 10.438413
// Isso é ERRO DE COMPILAÇÃO:
// let wrong = distance + time
// error[E041]: unit mismatch in arithmetic operation
// left unit: length^1
// right unit: time^1
}
Exemplo verificado
O exemplo completo de segurança dimensional está em examples/showcase/type_safe_units.sio.
Execute:
./bin/souc run examples/showcase/type_safe_units.sio
Propagação de incerteza — Knowledge<T> e GUM
Knowledge<T> representa um valor medido com sua incerteza padrão. A incerteza se propaga através dos cálculos seguindo o Guide to the Expression of Uncertainty in Measurement (JCGM 100:2008).
// Medições com incerteza
let mass = Measurement { value: 75.0, uncertainty: 0.5 } // 75.0 ± 0.5 kg
let height = Measurement { value: 1.80, uncertainty: 0.01 } // 1.80 ± 0.01 m
// Incerteza se propaga através de BMI = m/h²
let bmi = compute_bmi(mass, height)
// Resultado: 23.148 ± 0.300 kg/m²
Exemplo verificado
O exemplo completo de propagação GUM está em examples/science/uncertainty_propagation.sio.
Execute:
./bin/souc run examples/science/uncertainty_propagation.sio
Status e limitações
-
Unidades: Checagem em tempo de compilação funciona. Unidades derivadas (
m/s,kg·m/s²) compõem corretamente. -
Incerteza (
Knowledge<T>): Propagação GUM paraf64,boole tipos struct está implementada. Derivadas de primeira ordem cruzam chamadas de função para helpers puros. -
Não implementado:
Knowledge<f128>e GUM sobre floats de 128 bits (KL-15). -
Este é software pre-1.0. Espere mudanças incompatíveis, superfícies incompletas e limitações documentadas. Veja KNOWN_LIMITATIONS.md.