12

IEEE754 は負のゼロをサポートしています。しかし、このコード

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

出力

0 +Inf

私が期待していた場所

-0 -Inf

float 形式が 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)

copysignで定義された標準関数を明らかに参照しているので、それほど悪くはありませんIEEE754

しかし、これはパッケージをインポートする必要があることを意味しますが、これはまだ (確かにマイナーでまれな) ニーズに対しては重すぎるように見えます。

于 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 に答える