Go 浮動小数点演算でのゼロ除算のコンパイラ エラー
Go で float64 変数を使用してゼロ除算を実行しようとすると、コンパイラ警告を発行するのではなく、エラーをスローします。このような状況では警告がより適切であると予想されるため、この動作は直感に反するように見えるかもしれません。
次の例を考えてみましょう。
<code class="go">func main() { var y float64 = 0.0 var x float64 = 4.0 / y fmt.Println(x) }</code>
このコード スニペットの結果は、次のことを示す出力 Inf になります。
ただし、明示的に 0.0 で除算するようにコードを変更すると、コンパイラはエラーを生成します。
<code class="go">func main() { var x float64 = 4.0 / 0.0 fmt.Println(x) }</code>
エラー メッセージは次のとおりです。 prog.go: 9:22: ゼロによる除算。
動作を理解する
Golang の数値定数 (浮動小数点定数を含む) には特別なプロパティがあり、IEEE754 float に直接マッピングされません。種類。これらの型とは異なり、Go の定数は無限大や負のゼロを表すことができません。
Go のドキュメントによると、
「数値定数は任意精度の正確な値を表し、オーバーフローしません。したがって、 IEEE-754 の負のゼロ、無限大、非数値を表す定数です。
この設計選択により、次の例に示すように、定数のオーバーフローが防止されます。
<code class="go">var x float64 = 1e1000 / 1e999 // yes, this is 10</code>
If無限大の値が必要な場合は、 math.Inf 関数を使用できます:
<code class="go">var x float64 = math.Inf(1)</code>
以上がGo コンパイラが浮動小数点演算のゼロ除算でエラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。