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?

pengguna84386
sumber

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.

Lee
sumber
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
9

Standar titik-mengambang IEEE 754 memungkinkan nol yang ditandatangani . Nol negatif sama dengan nol positif, jadi tidak akan dicakup oleh < 0tes.

parsifal
sumber