Kenapa Go punya case khusus untuk abs (0)


9

Saya bermain-main dengan Go, dan menemukan kode menarik ini untuk fungsi abs dalam paket matematika:

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  }

Mengapa kita perlu memiliki case khusus x == 0? Apa yang akan terjadi jika saya menghapus baris 18 dan 19?

Jawaban:


16

Komentar menjelaskan alasan - abs(-0)harus mengembalikan 0, tetapi tanpa kasus khusus, abs(-0)akan mengembalikan -0.

Saya berasumsi Go menggunakan IEEE floats sehingga +0 dan -0 dapat direpresentasikan menggunakan nilai yang berbeda untuk bit tanda.


Baiklah, tapi bukankah 0 dan -0 direpresentasikan dengan cara yang sama dalam memori?
user84386

6
@ user84386 - Saya berasumsi Go menggunakan IEEE floats, jadi ia akan memiliki bit tanda, sehingga +0 dan -0 mewakili.
Lee

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.