Warum hat Go einen Sonderfall für abs (0)


9

Ich habe mit Go herumgespielt und diesen besonders interessanten Code für die abs-Funktion im Mathe-Paket gefunden:

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  }

Warum brauchen wir den Sonderfall x == 0? Was passiert, wenn ich die Zeilen 18 und 19 lösche?

Antworten:


16

Der Kommentar erklärt den Grund - abs(-0)sollte 0 zurückgeben, würde aber ohne den Sonderfall abs(-0)-0 zurückgeben.

Ich gehe davon aus, dass Go IEEE-Floats verwendet, sodass sowohl +0 als auch -0 mit unterschiedlichen Werten für das Vorzeichenbit dargestellt werden können.


Okay, aber sind 0 und -0 im Speicher nicht gleich dargestellt?
user84386

6
@ user84386 - Ich gehe davon aus, dass Go IEEE-Floats verwendet, daher hat es ein Vorzeichenbit, sodass sowohl +0 als auch -0 darstellbar sind.
Lee

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.