Quero fazer algo assim para poder lidar com casos em que minhas expressões transbordam
fn add(a : f64, b: f64) -> Result<f64, OverflowError>{
a.checked_add(b)?
}
Mas não consegui encontrar nenhuma maneira de fazer isso.
Quero fazer algo assim para poder lidar com casos em que minhas expressões transbordam
fn add(a : f64, b: f64) -> Result<f64, OverflowError>{
a.checked_add(b)?
}
Mas não consegui encontrar nenhuma maneira de fazer isso.
Operações de ponto flutuante não transbordam. Em vez disso, elas saturam para algo, como infinito positivo, infinito negativo ou NaN (por exemplo, divisão por zero ou operações em infinitos de sinais diferentes).
Você pode usar
is_finite
para ver se um valor de ponto flutuante não é nem infinito nem NaN. Normalmente, você faria toda a aritmética de ponto flutuante que precisa e então executaria uma verificação final no final em vez de testar cada valor intermediário.Você pode combinar
is_finite
comthen_some
se quiser produzir umOption
onde é somenteSome
se for finito. Por exemplo: