Bawiłem się z Go i znalazłem ten szczególny interesujący kod funkcji abs w pakiecie matematycznym:
http://golang.org/src/pkg/math/abs.go
14 func abs(x float64) float64 {
15 switch {
16 case x < 0:
17 return -x
18 case x == 0:
19 return 0 // return correctly abs(-0)
20 }
21 return x
22 }
Dlaczego potrzebujemy specjalnego przypadku x == 0? Co się stanie, jeśli usunę wiersz 18 i 19?
Standard zmiennoprzecinkowy IEEE 754 zezwala na podpisane zera . Zero ujemne jest równe zero dodatniemu, więc nie zostanie objęte
< 0
testem.źródło