Ce face std::fmin
std::fmin și std::fmax sunt variantele din <cmath> pentru numere cu virgulă. Diferența față de std::min/std::max: dacă unul dintre argumente este NaN, returnează celălalt argument. std::min ar returna un rezultat care depinde de ordinea argumentelor.
Acceptă și tipuri amestecate (de exemplu int și double), pe care le convertește la double.
Parametri
| Parametru | Descriere |
|---|---|
x, y |
Cele două numere. |
Ce returnează
Minimul sau maximul, ca double.
Exemple
Exemplul 1: Valori normale și NaN
#include <algorithm>
#include <cmath>
#include <limits>
#include <print>
int main() {
double nan = std::numeric_limits<double>::quiet_NaN();
std::println("fmin(2.5, 1.5) = {}", std::fmin(2.5, 1.5));
std::println("fmax(3, 7.25) = {}", std::fmax(3, 7.25));
std::println("fmin(nan, 4) = {}", std::fmin(nan, 4.0));
std::println("std::min(nan, 4.0) = {}, std::min(4.0, nan) = {}", std::min(nan, 4.0), std::min(4.0, nan));
}
Rezultat
fmin(2.5, 1.5) = 1.5
fmax(3, 7.25) = 7.25
fmin(nan, 4) = 4
std::min(nan, 4.0) = nan, std::min(4.0, nan) = 4
Exemplul 2: Senzor cu citiri lipsă
Citirile lipsă sunt NaN; fmax le ignoră.
#include <cmath>
#include <limits>
#include <print>
#include <vector>
int main() {
double lipsa = std::numeric_limits<double>::quiet_NaN();
std::vector<double> citiri{21.5, lipsa, 23.75, 22.0, lipsa};
double maxim = lipsa;
for (double c : citiri) {
maxim = std::fmax(maxim, c);
}
std::println("Temperatura maximă: {:.2f}", maxim);
}
Rezultat
Temperatura maximă: 23.75
Greșeli frecvente
- Folosești
std::maxpe date care pot conține NaN: rezultatul depinde de ordinea argumentelor și poate fi NaN.
Comenzi înrudite
std::min: Returnează cea mai mică dintre două valori sau dintr-o listă de valori scrisă între acolade.std::max: Returnează cea mai mare dintre două valori sau dintr-o listă de valori scrisă între acolade.std::isnan: Verifică dacă un număr cu virgulă este NaN (rezultat nedefinit) sau infinit (inf).std::clamp: Limitează o valoare la un interval: o aduce la minim dacă e prea mică și la maxim dacă e prea mare.