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

주석은 이유를 설명합니다 -0을 반환 abs(-0)해야하지만 특별한 경우가 없으면 abs(-0)-0을 반환합니다.

Go는 IEEE float을 사용 하므로 부호 비트에 대해 다른 값을 사용하여 +0과 -0을 모두 표현할 수 있습니다.


그렇다면 메모리에서 0과 -0이 같은 방식으로 표시되지 않습니까?
user84386

6
@ user84386-Go가 IEEE float을 사용한다고 가정하므로 부호 비트가 있으므로 +0과 -0을 모두 나타낼 수 있습니다.
Lee

9

IEEE 754 부동 소수점 표준은 부호있는 0을 허용 합니다. 음수 0은 양수 0과 같으므로 < 0테스트에서 다루지 않습니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.