Goにabs(0)の特別なケースがあるのはなぜですか


9

私はGoをいじってみましたが、mathパッケージにある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行目を削除するとどうなりますか?

回答:


16

コメントは理由を説明しています-0を返すabs(-0)必要がありますが、特別な場合がない場合はabs(-0)-0を返します。

GoはIEEE floatを使用しているため、+ 0と-0の両方を符号ビットに異なる値を使用して表すことができると思います。


じゃあ、メモリ内で0と-0は同じように表現されていませんか?
user84386 2013年

6
@ user84386-GoはIEEE浮動小数点数を使用すると想定しているため、符号ビットが含まれるため、+ 0と-0の両方が表現可能です。
Lee

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.