Ce face f64::min
a.min(b) și a.max(b) compară două valori f64. Dacă una dintre ele este NaN, se returnează cealaltă, deci un NaN izolat nu strică rezultatul.
Pentru o listă întreagă, iter().min() nu merge pe f64 (lipsește Ord). Se folosește fold: v.iter().copied().fold(f64::INFINITY, f64::min). Alternativ, iter().max_by(|a, b| a.total_cmp(b)).
Parametri
| Parametru | Descriere |
|---|---|
other |
Al doilea număr. |
Ce returnează
f64.
Exemple
Exemplul 1: Minim și maxim, inclusiv cu NaN
fn main() {
println!("{}", 3.5_f64.min(2.1));
println!("{}", 3.5_f64.max(2.1));
println!("{}", f64::NAN.min(4.0));
println!("{}", 4.0_f64.max(f64::NAN));
}
Rezultat
2.1
3.5
4
4
Exemplul 2: Temperatura minimă și maximă a săptămânii
fn main() {
let temperaturi: [f64; 5] = [12.5, 9.0, 15.25, 7.75, 11.0];
let minima = temperaturi.iter().copied().fold(f64::INFINITY, f64::min);
let maxima = temperaturi.iter().copied().fold(f64::NEG_INFINITY, f64::max);
println!("minimă: {minima}, maximă: {maxima}");
let cea_mai_calda = temperaturi.iter().enumerate().max_by(|a, b| a.1.total_cmp(b.1));
println!("cea mai caldă zi: {:?}", cea_mai_calda);
let mut sortate = temperaturi;
sortate.sort_by(f64::total_cmp);
println!("sortate: {sortate:?}");
}
Rezultat
minimă: 7.75, maximă: 15.25
cea mai caldă zi: Some((2, 15.25))
sortate: [7.75, 9.0, 11.0, 12.5, 15.25]
Greșeli frecvente
- Scrii
temperaturi.iter().max(): eroareathe trait bound `f64: Ord` is not satisfied. Foloseștefoldsaumax_bycutotal_cmp. - Pornești
foldpentru maxim de la0.0: dacă toate valorile sunt negative, rezultatul greșit este 0. Pornește de laf64::NEG_INFINITY.
Comenzi înrudite
f64::clamp: Limitează valoarea la un interval: sub min devine min, peste max devine max, altfel rămâne neschimbată.f64::is_nan: Verifică dacă valoarea este NaN („nu e număr”), singurul mod sigur, pentru că NaN nu este egal nici cu el însuși.f64: Tipul implicit pentru numere cu zecimale: virgulă mobilă pe 64 de biți (precizie dublă, IEEE 754).