Float 値を使用したゼロ除算のコンパイラ エラー
Go では、float64 をゼロで除算すると、代わりに特殊な数値定数が生成されます。コンパイラエラー。整数のゼロによる除算はエラーを生成しますが、浮動小数点のゼロによる除算は、分子が正か負かに応じて Inf または -Inf になります。
例:
<code class="go">func main() { var y float64 = 0.0 var x float64 = 4.0 / y fmt.Println(x) // Prints +Inf }</code>
この動作は、ゼロで除算すると実行時エラーが発生する C や Python などの他の言語とは異なります。
異常な動作の背後にある理由
Golang の数値定数は次のとおりです。特殊であり、任意の精度を持ちます。これらは IEEE754 float 型に直接マッピングされず、無限大や負のゼロを定数として保存しません。
次の例に示すように、この選択により定数のオーバーフローが防止されます。
<code class="go">var x float64 = 1e1000 / 1e999 // Compiles successfully, equals 10</code>
無限値の作成
特に無限値が必要な場合は、 math.Inf 関数を使用できます。
<code class="go">var x float64 = math.Inf(1) // Equivalent to +Inf</code>
コンパイラ エラーの利点
エラーの代わりに Inf を出力するのは珍しいように思えるかもしれませんが、これには次のような利点があります。
以上がGo がコンパイラ エラーではなく Infinity による Float ゼロ除算を処理するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。