ホームページ > バックエンド開発 > Golang > Go コンパイラが浮動小数点数によるゼロ除算でエラーになるのはなぜですか?

Go コンパイラが浮動小数点数によるゼロ除算でエラーになるのはなぜですか?

DDD
リリース: 2024-10-31 17:39:02
オリジナル
1027 人が閲覧しました

Why Does Go Compiler Error Out on Division by Zero with Floats?

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート