Чому 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 представлені однаково в пам'яті?
користувач84386

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.