A cobertura de tradução é parcial. Consulte a fonte em inglês para a referência técnica completa. Ver versão em inglês →

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 para f64, bool e 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.

Leitura adicional