一尘不染

Golang中的负零文字

go

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


阅读 302

收藏
2020-07-02

共1个答案

一尘不染

一个已注册的问题

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

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

还不错,因为它显然引用了copysign定义的标准函数IEEE754

但这意味着您需要导入一个软件包,而对于(当然较小且很少见的)需求来说,这仍然显得过于沉重。

2020-07-02