math.Abs în Go

Returnează valoarea absolută (modulul) unui număr float64: distanța lui față de zero, fără semn.

Sintaxă
import "math"

func Abs(x float64) float64

Ce face math.Abs

math.Abs transformă un număr negativ în opusul lui și lasă neschimbat un număr pozitiv. math.Abs(-7.5) dă 7.5. O folosești când te interesează cât de mare este o diferență, nu în ce sens este.

Ca aproape toate funcțiile din pachetul math, primește și returnează float64. Pentru un int trebuie să faci conversia (math.Abs(float64(n))) sau să scrii o funcție mică: if n < 0 { n = -n }. Go nu are o funcție Abs pentru întregi în biblioteca standard.

Cazuri speciale: Abs(±Inf) dă +Inf, iar Abs(NaN) dă NaN.

Parametri

Parametru Descriere
x Numărul (float64) al cărui modul vrei să-l afli.

Ce returnează

Valoarea lui x fără semn, tot ca float64.

Exemple

Exemplul 1: Modulul câtorva numere

package main

import (
    "fmt"
    "math"
)

func main() {
    fmt.Println(math.Abs(-7.5))
    fmt.Println(math.Abs(3))
    fmt.Println(math.Abs(-0.25))
}

Rezultat

7.5
3
0.25

Exemplul 2: Diferența dintre două temperaturi

Nu contează care oraș are mai cald: math.Abs dă mereu o diferență pozitivă.

package main

import (
    "fmt"
    "math"
)

func main() {
    iasi, cluj := -3.5, 2.0
    fmt.Printf("Diferența Iași - Cluj: %.1f grade\n", math.Abs(iasi-cluj))
    fmt.Printf("Diferența Cluj - Iași: %.1f grade\n", math.Abs(cluj-iasi))
}

Rezultat

Diferența Iași - Cluj: 5.5 grade
Diferența Cluj - Iași: 5.5 grade

Exemplul 3: Modulul unui întreg

Pentru int faci conversia la float64 și înapoi, sau scrii o funcție proprie.

package main

import (
    "fmt"
    "math"
)

func absInt(n int) int {
    if n < 0 {
        return -n
    }
    return n
}

func main() {
    sold := -250
    fmt.Println(int(math.Abs(float64(sold))))
    fmt.Println(absInt(sold))
}

Rezultat

250
250

Greșeli frecvente

  • Dai un int direct: math.Abs(n) cu n int nu compilează (cannot use n (variable of type int) as float64 value). Fă conversia sau folosește o funcție pentru întregi.
  • Compari numere zecimale cu ==: 0.1+0.2 == 0.3 este false. Folosește math.Abs(a-b) < 1e-9.

Comenzi înrudite

  • 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.Max: math.Max returnează cel mai mare, iar math.Min cel mai mic dintre două numere float64.
  • math.Floor: math.Floor rotunjește în jos, math.Ceil în sus, iar math.Trunc taie partea zecimală (spre zero).