コンテンツにスキップ

Go/0.0

出典: フリー教科書『ウィキブックス(Wikibooks)』
< Go

Goにおける 数値リテラル 0.0 は、浮動小数点型ゼロ値 として重要な役割を果たします。整数の 0 とは異なる特性を持ち、浮動小数点数特有の振る舞いを示します。

数値リテラル 0.0 の基本

[編集]

浮動小数点型としての 0.0

[編集]
var f float64 = 0.0    // float64型の0.0
var g float32 = 0.0    // float32型の0.0
var h = 0.0           // 型推論により float64
  • Goでは、0.0型推論 によって float64 型として扱われます
  • 小数点を含む数値リテラルは浮動小数点型として解釈されます

整数リテラル 0 との違い

[編集]
var i int = 0      // 整数型のゼロ値
var f float64 = 0.0 // 浮動小数点型のゼロ値
var mixed float64 = 0 // 整数リテラルも浮動小数点型の初期値に使用可能

「ゼロ値(Zero Value)」としての 0.0

[編集]

Goでは、浮動小数点型の変数を宣言した時点で暗黙的に初期化される値0.0 です。

浮動小数点型のゼロ値

[編集]

例: ゼロ値の自動初期化

[編集]
var temperature float64  // temperature == 0.0
var price float32       // price == 0.0
var ratio float64       // ratio == 0.0

浮動小数点数特有の 0.0 の振る舞い

[編集]
正のゼロと負のゼロ
var positiveZero float64 = 0.0
var negativeZero float64 = -0.0
fmt.Println(positiveZero == negativeZero) // true(等価性チェック)
fmt.Println(math.Signbit(positiveZero))   // false
fmt.Println(math.Signbit(negativeZero))   // true
IEEE 754標準に従い、+0.0-0.0 は異なる表現を持ちますが、等価性チェックでは同じとして扱われます
ゼロ除算の特別な処理
var zero float64 = 0.0
fmt.Println(1.0 / zero)  // +Inf(正の無限大)
fmt.Println(-1.0 / zero) // -Inf(負の無限大)
fmt.Println(0.0 / zero)  // NaN(非数)
浮動小数点数のゼロ除算は実行時エラーにならず、特殊値を返します
無限小の比較
var epsilon float64 = 1e-10
var zero float64 = 0.0
fmt.Println(epsilon > zero) // true
fmt.Println(epsilon == zero) // false

0.0 の実用的な用途

[編集]
数値計算の初期値
sum := 0.0      // 合計値の初期化
average := 0.0  // 平均値の初期化
閾値との比較
threshold := 1e-9
if math.Abs(result - expected) < threshold {
    // 浮動小数点数の近似的な等価性チェック
}
配列・スライスの初期化
data := make([]float64, 10) // 全要素が0.0で初期化

注意点とベストプラクティス

[編集]

浮動小数点の精度問題

[編集]
var a float64 = 0.1 + 0.2
var b float64 = 0.3
fmt.Println(a == b) // false(浮動小数点誤差)
fmt.Println(a)      // 0.30000000000000004
0.0 との比較時も浮動小数点誤差に注意が必要です

NaN と無限大の検出

[編集]
if math.IsNaN(value) {
    // NaN の処理
}
if math.IsInf(value, 0) {
    // 無限大の処理
}

型変換時の注意

[編集]
var i int = 0
var f float64 = float64(i) // 明示的な型変換
// var f float64 = i       // エラー:暗黙的な型変換は不可

他の言語との比較

[編集]

C言語

[編集]
  • 0.0double 型として扱われる
  • 暗黙的な型変換が多く、整数の 0 と混在しやすい

Python

[編集]
  • 0.0float
  • 動的型付けのため、整数の 0 との相互変換が柔軟

Go

[編集]
  • 0.0 は厳密に浮動小数点型
  • 型安全性が高く、意図しない型変換を防げる

まとめ

[編集]
  • Goの 0.0「浮動小数点型のゼロ値」 であり、IEEE 754標準に準拠した振る舞いを示します
  • 整数の 0 とは明確に区別され、型システムの安全性に貢献しています
  • 浮動小数点数特有の正のゼロ・負のゼロ、ゼロ除算時の特殊値処理など、数値計算における重要な概念を理解する上で重要です
  • 精度問題や型変換に注意しながら使用することで、安全で正確な数値計算を実現できます

0.0 は単なる浮動小数点のゼロではなく、Goの 『型安全性』と『数値計算の正確性』を両立させる重要な要素」として位置付けられます!

ゼロ値
float32 0.0
float64 0.0
complex64 (0+0i)
complex128 (0+0i)