math.Hypot în Go

Calculează ipotenuza: rădăcina din p² + q², fără depășiri pentru numere foarte mari sau foarte mici.

Sintaxă
import "math"

func Hypot(p, q float64) float64

Ce face math.Hypot

math.Hypot(p, q) returnează Sqrt(p*p + q*q), adică lungimea ipotenuzei unui triunghi dreptunghic cu catetele p și q, sau distanța de la origine la punctul (p, q).

Avantajul față de formula scrisă de mână: Hypot evită depășirea. Pentru p = 3e200, p*p devine +Inf, dar Hypot dă rezultatul corect (aproximativ 5e+200, cu o mică eroare de rotunjire pe ultima cifră).

Parametri

Parametru Descriere
p, q Catetele (sau diferențele de coordonate).

Ce returnează

Lungimea ipotenuzei, ca float64.

Exemple

Exemplul 1: Triunghiul 3-4-5 și distanța între două puncte

package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Hypot(3, 4))

    // distanța de la (2, 1) la (8, 9)
    fmt.Println(math.Hypot(8-2, 9-1))
}

Rezultat

5
10

Exemplul 2: Fără depășire pentru numere mari

package main

import (
    "fmt"
    "math"
)

func main() {
    p, q := 3e200, 4e200
    fmt.Println(math.Sqrt(p*p + q*q))
    fmt.Println(math.Hypot(p, q))
}

Rezultat

+Inf
4.9999999999999995e+200

Greșeli frecvente

  • Scrii math.Sqrt(p*p + q*q) pentru valori foarte mari sau foarte mici și obții +Inf sau 0. Hypot le tratează corect.

Comenzi înrudite

  • math.Sqrt: math.Sqrt calculează rădăcina pătrată, iar math.Cbrt rădăcina cubică a unui număr float64.
  • math.Asin: Funcțiile trigonometrice inverse: arcsinus, arccosinus, arctangentă și Atan2, care dă unghiul unui punct (x, y).