为什么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行会怎样?

Answers:


16

注释解释了原因- abs(-0)应该返回0,但没有特殊情况,abs(-0)将返回-0。

我假设Go使用IEEE浮点数,因此+0和-0都可以使用符号位的不同值表示。


好的,但是0和-0是否在内存中表示的方式相同?
user84386 2013年

6
@ user84386-我假设Go使用IEEE浮点数,因此它将具有一个符号位,因此+0和-0都是可表示的。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.