Perché Go ha un caso speciale per abs (0)

9

Stavo giocando con Go e ho trovato questo particolare codice interessante per la funzione abs nel pacchetto matematico:

link

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  }

Perché abbiamo bisogno del caso speciale di x == 0? Cosa succederà se elimino le righe 18 e 19?

    
posta user84386 14.03.2013 - 20:05
fonte

2 risposte

16

Il commento spiega il motivo - abs(-0) dovrebbe restituire 0, ma senza il caso speciale, abs(-0) restituire -0.

Suppongo che Go usi float IEEE in modo che sia +0 che -0 possano essere rappresentati utilizzando valori diversi per il bit di segno .

    
risposta data 14.03.2013 - 20:08
fonte
9

Lo standard a virgola mobile IEEE 754 consente zeri firmati . Uno zero negativo è uguale a uno zero positivo, quindi non verrebbe coperto dal test < 0 .

    
risposta data 14.03.2013 - 20:11
fonte

Leggi altre domande sui tag