IEEE754支持负零。 但是这段代码
a := -0.0
fmt.Println(a, 1/a)
输出
0 +Inf
我希望
-0 -Inf
其浮动格式基于IEEE754的其他语言允许您创建负零文字
Java:
float a = -0f;
System.out.printf("%f %f", a, 1/a); // outputs "-0,000000 -Infinity"
C#:
var a = -0d;
Console.WriteLine(1/a); // outputs "-Infinity"
Javascript:
var a = -0;
console.log(a, 1/a); // logs "0 -Infinity"
但是我找不到Go中的等价物。
你怎么写go中的负零文字?
答案 0 :(得分:9)
它碰巧提供了一种解决方案:
a := math.Copysign(0, -1)
它并没有那么糟糕,因为它显然是指copysign
定义的标准IEEE754
函数。
但这意味着您需要导入一个包,这对于(无可否认的次要和罕见)需求看起来仍然过于沉重。
答案 1 :(得分:5)
package main
import (
"fmt"
"math"
)
func main() {
a := 1. / math.Inf(-1)
fmt.Println(a, 1/a)
}
(还here)
输出:
-0 -Inf
答案 2 :(得分:0)
我刚试过这个,它似乎对我有用。
package main
import (
"fmt"
)
func main() {
zero := float64(0)
neg_zero := -zero
fmt.Println(zero, neg_zero)
}
虽然我执行neg_zer0 := - float64(0)