Ce face std::hypot
std::hypot(x, y) returnează lungimea ipotenuzei unui triunghi dreptunghic cu catetele x și y, adică distanța de la origine la punctul (x, y). Este mai sigur decât sqrt(x*x + y*y), pentru că evită depășirea când x sau y sunt foarte mari sau foarte mici.
Varianta cu trei argumente (C++17) calculează distanța în spațiu: √(x² + y² + z²).
Parametri
| Parametru | Descriere |
|---|---|
x, y, z |
Componentele (z opțional). |
Ce returnează
Lungimea, ca double.
Exemple
Exemplul 1: Ipotenuză și distanță între două puncte
#include <cmath>
#include <print>
int main() {
std::println("hypot(3, 4) = {}", std::hypot(3.0, 4.0));
double x1 = 1, y1 = 2;
double x2 = 7, y2 = 10;
std::println("Distanța: {}", std::hypot(x2 - x1, y2 - y1));
std::println("Diagonala unei cutii 2x3x6: {}", std::hypot(2.0, 3.0, 6.0));
}
Rezultat
hypot(3, 4) = 5
Distanța: 10
Diagonala unei cutii 2x3x6: 7
Exemplul 2: Fără depășire
x * x depășește valoarea maximă a lui double și devine inf; hypot dă rezultatul corect.
#include <cmath>
#include <print>
int main() {
double x = 1e200;
double y = 1e200;
std::println("sqrt(x*x + y*y) = {}", std::sqrt(x * x + y * y));
std::println("hypot(x, y) = {:.4e}", std::hypot(x, y));
}
Rezultat
sqrt(x*x + y*y) = inf
hypot(x, y) = 1.4142e+200
Greșeli frecvente
- Folosești
hypotdoar ca să compari distanțe. Dacă ai nevoie doar de comparație, compararea pătratelor (fără radical) este mai rapidă.
Comenzi înrudite
std::sqrt: Calculează rădăcina pătrată (sqrt) sau rădăcina cubică (cbrt) a unui număr.std::atan2: Calculează unghiul punctului (x, y) față de axa orizontală, între -π și π, ținând cont de cadran.std::complex: Numere complexe (a + bi), cu operațiile aritmetice obișnuite, modul, argument și funcții matematice.