我希望以一种标志信息不会丢失的方式序列化浮点.具体来说,我想区分IEEE-754负零和常规零.
The result of a floating-point division by zero is not specified beyond the IEEE-754 standard; whether a run-time panic occurs is implementation-specific.
这表明我做不到
n == 0 && (float64(1) / n) < 0
我试过数学.copysign和math.Signbit
说
06001
Signbit
returnstrue
if x is negative or negative zero.
但
n == 0 && math.Signbit(n)
似乎不起作用
n := -float64(0)
有任何想法吗?
编辑:
我提交了issue 2196来追踪我认为之间令人困惑的区别
nz := -float64(0)
和
pz := float64(0) nz := -pz
正如彼得斯所建议的那样.
解决方法
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。