golang中的负零字面值

时间:2012-12-10 15:46:34

标签: math floating-point go ieee-754

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中的负零文字?

3 个答案:

答案 0 :(得分:9)

a registered issue

它碰巧提供了一种解决方案:

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)

时无法正常工作