我想以不丢失符号信息的方式序列化一个浮点数。具体来说,我想区分 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/

10-12 22:31