我希望能够对浮点数进行序列化,使得符号信息不会丢失。具体来说,我想区分IEEE-754负零和普通零。
语言规范中提到:
这表明我不能这样做。除以零的浮点数结果在IEEE-754标准之外未指定;运行时是否发生崩溃是由实现特定的。
n == 0 && (float64(1) / n) < 0
我尝试了math.Copysign
和math.Signbit
,它们的作用是
但是func Signbit(x float64) bool
Signbit
returnstrue
if x is negative or negative zero.
n == 0 && math.Signbit(n)
似乎无法工作于
n := -float64(0)
有什么想法吗?
编辑:
我提交了问题2196来跟踪我认为存在的一个令人困惑的差异。
nz := -float64(0)
并且
pz := float64(0)
nz := -pz
如PeterSO所建议。