Ce face math.Dim
math.Dim(x, y) returnează x - y dacă este pozitivă, altfel 0. Este util pentru „cât lipsește” sau „cât depășește”: Dim(cheltuieli, buget) spune cu cât ai depășit bugetul, fără valori negative.
math.Copysign(f, sign) returnează valoarea lui f fără semn, dar cu semnul lui sign. Copysign(3, -1) este -3.
math.Signbit(x) returnează true dacă bitul de semn este setat, adică pentru numerele negative și pentru -0. Spre deosebire de x < 0, recunoaște și zero negativ.
Parametri
| Parametru | Descriere |
|---|---|
x, y |
Pentru Dim: numerele scăzute. |
f, sign |
Pentru Copysign: valoarea și numărul din care se ia semnul. |
Ce returnează
Dim, Copysign: un float64. Signbit: un bool.
Exemple
Exemplul 1: Depășirea bugetului cu Dim
package main
import (
"fmt"
"math"
)
func main() {
buget := 500.0
for _, cheltuit := range []float64{420, 575.5} {
fmt.Printf("Cheltuit %.2f lei, depășire: %.2f lei\n", cheltuit, math.Dim(cheltuit, buget))
}
}
Rezultat
Cheltuit 420.00 lei, depășire: 0.00 lei
Cheltuit 575.50 lei, depășire: 75.50 lei
Exemplul 2: Copysign, Signbit și zero negativ
Zero negativ se obține cu Copysign(0, -1). Comparația < 0 nu îl deosebește de zero, dar Signbit da.
package main
import (
"fmt"
"math"
)
func main() {
fmt.Println(math.Copysign(3, -1))
fmt.Println(math.Copysign(-2.5, 1))
zeroNegativ := math.Copysign(0, -1)
fmt.Println(zeroNegativ, zeroNegativ < 0, math.Signbit(zeroNegativ))
fmt.Println(math.Signbit(-4), math.Signbit(4))
}
Rezultat
-3
2.5
-0 false true
true false
Greșeli frecvente
- Scrii
-0.0în cod ca să obții zero negativ: constanta este evaluată exact și dă zero pozitiv. Foloseștemath.Copysign(0, -1).