Go/数リテラルの精度と型
表示
< 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)。 - デフォルトでは、実部と虚部が
float64のcomplex128型として扱われます。 - 実部と虚部が
float32のcomplex64型として明示的に指定することも可能です(例: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の数値リテラルは、その精度と型が密接に関連しており、どのように記述され、どのように変数に代入されるかによって最終的な型が決まります。特に、型を持たない定数としての性質を理解しておくことが重要です。