Я играл с Go и нашел этот интересный код для функции abs в пакете математики:
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 }
Зачем нам нужен особый случай x == 0? Что будет, если я удалю строки 18 и 19?
Стандарт IEEE 754 с плавающей точкой допускает подписанные нули . Отрицательный ноль равен положительному нулю, поэтому он не будет покрыт
< 0
тестом.источник