Go コンパイラ エラー: Float Zero Division
Go では、有限 float をゼロで除算しようとすると、コンパイル エラーが発生します。この動作は、特に次の例に示すように、2 つの有限の浮動小数点数を除算すると通常は無限大になることを考えると、直感に反するように見えるかもしれません。
<code class="go">func main() { var y float64 = 0.0 var x float64 = 4.0 / y fmt.Println(x) }</code>
出力:
+Inf
ただし有限浮動小数点数をゼロで除算すると、コンパイラ エラーが発生します:
<code class="go">func main() { var x float64 = 4.0 / 0.0 fmt.Println(x) }</code>
出力:
prog.go:9:22: division by zero
コンパイラ エラーの理由
これこの動作は、Go における数値定数の一意な表現に由来しています。数値定数を IEEE754 float 型に直接マッピングするほとんどのプログラミング言語とは異なり、Go は数値定数を任意精度の正確な値として扱います。したがって、Go は本質的に無限大や負のゼロを格納できません。
この設計選択には、次の例で示されているように、定数計算でのオーバーフローを回避するという利点があります。
<code class="go">var x float64 = 1e1000 / 1e999 // yes, this is 10</code>
無限大を表すための代替法
特に無限大の値が必要な場合は、math.Inf(1) 関数を使用して正の無限大を表すか、math.Inf(-1) を使用して負の無限大を表すことができます。
以上がGo コンパイラが浮動小数点数によるゼロ除算でエラーになるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。