Почему у Go есть особый случай для abs (0)


9

Я играл с 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?

Ответы:


16

Комментарий объясняет причину - abs(-0)должен вернуть 0, но без особого случая abs(-0)вернет -0.

Я предполагаю, что Go использует IEEE-числа с плавающей точкой, поэтому и +0, и -0 могут быть представлены разными значениями для знакового бита.


Хорошо, но разве 0 и -0 не представлены одинаково в памяти?
user84386

6
@ user84386 - Я предполагаю, что Go использует IEEE-числа с плавающей точкой, поэтому он будет иметь знаковый бит, поэтому +0 и -0 представимы.
Ли

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.