Eu estava brincando com o Go e encontrei este código interessante em particular para a função abs no pacote matemático:
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 }
Por que precisamos ter o caso especial de x == 0? O que acontecerá se eu excluir as linhas 18 e 19?
O padrão de ponto flutuante IEEE 754 permite zeros assinados . Um zero negativo é igual a um zero positivo, portanto não seria coberto pelo
< 0
teste.fonte