コンテンツにスキップ

Go/数リテラルの精度と型

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

Goの数値リテラルは、記述された形式に基づいて、コンパイラによって内部的に精度と型が扱われます。

整数リテラル

[編集]
  • 精度: 任意精度です。リテラルの値がGoの組み込み整数型の範囲を超える場合でも、数学的に正確な値として扱われます。
  • 型: 型を持たない定数(untyped constant)として扱われます。
    • 変数の宣言時に型が明示的に指定された場合、その型に変換可能な範囲であれば、その型になります。
    • 型推論が行われる場合、文脈によってデフォルトの型(通常は int)が選択されます。
    • 明示的に型を指定することも可能です(例: 10 int64)。
var x int = 10        // 10は int 型になります
var y int64 = 1000000000000000000 // 範囲内なので int64 型になります
const z = 123           // z は untyped constant です
var a = z * 2           // a は int 型になります (デフォルト)
var b int64 = z * 3     // b は int64 型になります

浮動小数点数リテラル

[編集]
  • 精度: IEEE-754規格に準拠した精度を持ちます。
    • 小数点を含む形式 (1.23) や指数形式 (1e6) で記述されます。
    • デフォルトでは float64 型として扱われ、約15桁の有効数字を持ちます。
    • float32 型として明示的に指定することも可能です(例: 1.23 float32)。この場合、約7桁の有効数字になります。
  • 型: 型を持たない定数(untyped constant)として扱われます。
    • 変数の宣言時に型が明示的に指定された場合、その型になります。
    • 型推論が行われる場合、デフォルトで float64 型が選択されます。
var f float32 = 3.14    // f は float32 型になります
var g float64 = 2.71828 // g は float64 型になります
const h = 0.5           // h は untyped constant です
var i = h * 2.0         // i は float64 型になります (デフォルト)
var j float32 = h * 3.0 // j は float32 型になります

虚数リテラル

[編集]
  • 精度: 実部と虚部がそれぞれ浮動小数点数として扱われるため、float32 または float64 の精度を持ちます。
    • 実数部に i を付けて記述します(例: 3i, 2.5i)。
    • デフォルトでは、実部と虚部が float64complex128 型として扱われます。
    • 実部と虚部が float32complex64 型として明示的に指定することも可能です(例: 3i complex64)。
  • 型: 型を持たない定数(untyped constant)として扱われます。
    • 変数の宣言時に型が明示的に指定された場合、その型になります。
    • 型推論が行われる場合、デフォルトで complex128 型が選択されます。
var c complex64 = 1 + 2i   // c は complex64 型になります
var d complex128 = 3 - 4i  // d は complex128 型になります
const e = 1.5i            // e は untyped constant です
var f = 2 + e             // f は complex128 型になります (デフォルト)
var g complex64 = 1 - 1i  // g は complex64 型になります

このように、Goの数値リテラルは、その精度と型が密接に関連しており、どのように記述され、どのように変数に代入されるかによって最終的な型が決まります。特に、型を持たない定数としての性質を理解しておくことが重要です。