我想以不丢失符号信息的方式序列化一个浮点数。具体来说,我想区分 IEEE-754 负零和常规零。
language spec 说
这表明我不能做
n == 0 && (float64(1) / n) < 0
我试过 math.Copysign
和 math.Signbit
上面写着但
n == 0 && math.Signbit(n)
似乎不起作用n := -float64(0)
有任何想法吗?编辑:
我提交了 issue 2196 来跟踪我认为两者之间令人困惑的区别
nz := -float64(0)
和pz := float64(0)
nz := -pz
正如 peterSO 所建议的那样。 最佳答案
package main
import (
"fmt"
"math"
)
func main() {
pz := float64(0)
nz := -pz
fmt.Println(pz, math.Signbit(pz), nz, math.Signbit(nz))
if n := nz; n == 0 && math.Signbit(n) {
fmt.Println("n is negative zero:", n)
}
}
输出:
0 false -0 true
n is negative zero: -0
关于go - 零的区分符号 : -float64(0) from float64(0) in Go,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7224132/