Tại sao Go có trường hợp đặc biệt cho abs (0)


9

Tôi đã chơi xung quanh với Go và tìm thấy mã thú vị đặc biệt này cho hàm abs trong gói toán học:

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  }

Tại sao chúng ta cần phải có trường hợp đặc biệt là x == 0? Điều gì sẽ xảy ra nếu tôi xóa dòng 18 và 19?

Câu trả lời:


16

Nhận xét giải thích lý do - abs(-0)nên trả về 0, nhưng không có trường hợp đặc biệt, abs(-0)sẽ trả về -0.

Tôi giả sử Go sử dụng các float của IEEE để cả hai +0 và -0 có thể được biểu diễn bằng các giá trị khác nhau cho bit dấu.


Được rồi, nhưng không 0 và -0 đại diện theo cùng một cách trong bộ nhớ?
user84386

6
@ user84386 - Tôi giả sử Go sử dụng các float của IEEE, vì vậy nó sẽ có một bit dấu, vì vậy cả +0 và -0 đều có thể biểu thị được.
Lee

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.