12

IEEE754 支持负零。但是这段代码

a  := -0.0
fmt.Println(a, 1/a)

输出

0 +Inf

我本来期望的地方

-0 -Inf

浮点格式基于 IEEE754 的其他语言允许您创建负零文字

爪哇:

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 中写一个负零文字?

4

3 回答 3

11

一个已注册的问题

它恰好给出了一种解决方案:

a := math.Copysign(0, -1)

它并没有那么糟糕,因为它显然是指copysignIEEE754.

但这意味着您需要导入一个包,这对于(诚然次要和罕见的)需求来说仍然显得过于繁重。

于 2012-12-10T16:18:03.613 回答
6
package main

import (
        "fmt"
        "math"
)

func main() {
        a := 1. / math.Inf(-1)
        fmt.Println(a, 1/a)
}

(也在这里


输出:

-0 -Inf
于 2012-12-10T15:51:54.403 回答
0

我刚试过这个,它似乎对我有用。

package main

import (
    "fmt"
    )

func main() {
    zero := float64(0)
    neg_zero := -zero
    fmt.Println(zero, neg_zero)
}

虽然当我这样做时它没有按预期工作neg_zer0 := - float64(0)

于 2012-12-20T16:17:49.660 回答