math.Max în Go

math.Max returnează cel mai mare, iar math.Min cel mai mic dintre două numere float64.

Sintaxă
import "math"

func Max(x, y float64) float64
func Min(x, y float64) float64

Ce face math.Max

math.Max(x, y) returnează valoarea mai mare, iar math.Min(x, y) valoarea mai mică. Ambele lucrează doar cu două valori float64.

Din Go 1.21 există funcțiile predefinite max și min, care primesc oricâte argumente de orice tip ordonat (int, float64, string): max(3, 9, 5). În cod nou sunt de obicei alegerea mai simplă. Pentru minimul sau maximul unui slice există slices.Max și slices.Min.

Cazuri speciale: dacă un argument este NaN, rezultatul este NaN. Max(+0, -0) este +0, iar Min(+0, -0) este -0.

Parametri

Parametru Descriere
x, y Cele două numere comparate.

Ce returnează

Numărul mai mare (Max) sau mai mic (Min).

Exemple

Exemplul 1: math.Max, math.Min și max, min predefinite

package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Max(3.5, 7.2))
    fmt.Println(math.Min(3.5, 7.2))
    fmt.Println(max(4, 9, 2), min(4, 9, 2)) // funcțiile predefinite, Go 1.21+
    fmt.Println(max("Iași", "Cluj"))
    fmt.Println(math.Max(1, math.NaN()))
}

Rezultat

7.2
3.5
9 2
Iași
NaN

Exemplul 2: Limitarea unei valori într-un interval

Combinația Min(Max(x, jos), sus) ține valoarea între două limite, de exemplu o notă între 1 și 10.

package main

import (
    "fmt"
    "math"
)

func limiteaza(x, jos, sus float64) float64 {
    return math.Min(math.Max(x, jos), sus)
}

func main() {
    for _, nota := range []float64{11.5, 7.25, -2} {
        fmt.Println(nota, "->", limiteaza(nota, 1, 10))
    }
}

Rezultat

11.5 -> 10
7.25 -> 7.25
-2 -> 1

Greșeli frecvente

  • Dai int la math.Max: nu compilează. Pentru întregi folosește max/min predefinite (Go 1.21+).
  • Cauți maximul unui slice cu o buclă și math.Max: slices.Max(s) face asta direct.

Comenzi înrudite

  • slices.Max: Returnează cel mai mare (Max) sau cel mai mic (Min) element dintr-un slice; variantele Func folosesc o comparație proprie.
  • math.Dim: math.Dim dă diferența pozitivă max(x-y, 0); math.Copysign copiază semnul; math.Signbit spune dacă un număr are semn minus.
  • math.Inf: Valorile speciale ale lui float64: infinit (Inf, IsInf) și „nu este un număr” (NaN, IsNaN).
  • cmp.Compare: Compare returnează -1, 0 sau +1 după cum x este mai mic, egal sau mai mare decât y; Less spune dacă x < y.