Math golang中的负零字面值

Math golang中的负零字面值,math,floating-point,go,ieee-754,Math,Floating Point,Go,Ieee 754,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#: Javascript: ​var a = -0; console.log(a, 1/a);​ /

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#:

Javascript:

​var a = -0;
console.log(a, 1/a);​ // logs "0 -Infinity"
但我在围棋中找不到等价物

如何在go中编写负零文本

package main

import (
        "fmt"
        "math"
)

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


输出:

-0 -Inf

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

a := math.Copysign(0, -1)
它并没有那么糟糕,因为它显然是指由
IEEE754
定义的标准
copysign
函数


但这意味着您需要导入一个包,而这个包对于(无可否认是次要和罕见的)需求来说仍然显得太重。

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

package main

import (
    "fmt"
    )

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

虽然当我使用
neg_zer0:=-float64(0)

时,它并没有像预期的那样工作,但您是否尝试过
a:=0.0;a*=-1.0
?不,我只测试了
a:=0.0*-1.0
。如果没有更好的解决方案,我会使用你的代码。但这并不是我所说的文字。是的,不是文字。我不知道golang,所以我只想通过这种方式检查它是否支持普通操作中的负零。你对go提出错误了吗?@StephenCanon我会在填充前询问golang nuts。但事实上这是不必要的:已经有一个注册问题(请参阅下面我的“答案”),好的。它回答(因此+1)。但是说真的,为什么不像其他语言那样
a:=-0.0
?这是一个bug还是一个“特性”?从数学上讲,0和0是相等的,所以我想Go做的事情是正确的。0的符号性只是下溢的结果,而不是一元负号(如-1*0)。它们“相等”,因为-0==0应该为真,但在其他语言中(我刚刚在Javascript和Java中测试过),将1除以-0或+0会得到-Infinity或+Infinity。这可能很重要。请不要与Javascript相比。JS以数学中的许多错误而闻名。@jnml-不太正确的是+0==-0,因为”−0“可能表示已四舍五入为零的小负数。请注意,Go声称能够正确处理IEEE-754,这是其要求之一。W/o导入“数学”:(我相信它是内联的)不幸的是,这似乎是指定的语言行为(从问题页面的讨论中),因为它显然违反了IEEE-754(5.12.1)“从支持的格式到外部字符序列[包括源语言文字]的转换,以及恢复原始浮点表示的转换,应恢复零、无限和安静的N,以及非零有限数。特别是,零和无穷大的符号被保留下来。”这相当于我收到的第一条评论(来自Daniel Fischer)。这不是字面意思。
package main

import (
    "fmt"
    )

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