【Go言語学習|初心者向け】Go言語でメモリを賢く節約!float32型の基本と使い分け

なぜfloat32が重要なのか

Go言語で数値を扱う際、デフォルトで float64 を使うことが多いかもしれません。しかし、大量のデータを扱うアプリケーションや、メモリ制限が厳しい環境では、少しのメモリ節約が大きなパフォーマンス改善につながります。今回解説する float32 型は、まさにその「メモリ効率」という課題を解決するための強力なツールです。

float32の基礎知識

float32 は「32ビット浮動小数点数」のことで、コンピュータの世界では「単精度(Single Precision)」とも呼ばれます。

浮動小数点数とは?
小数点を含む数値を表現するための形式です。Go言語の float64 が8バイト(64ビット)を使うのに対し、float32 はその半分の4バイト(32ビット)しか使いません。

IEEE-754とは?
float32 が従っている「IEEE-754」とは、浮動小数点数の計算方法や表現方法を定めた世界共通の規格です。これにより、異なるプログラミング言語や異なるCPU間でも、計算結果の互換性が保たれています。

実装の考え方

float32 を使う際の最大のポイントは「精度のトレードオフ」です。
メモリ使用量は半分になりますが、表現できる桁数は float64 よりも少なくなります。そのため、以下のような場面で採用するのが一般的です。

・画像処理や音声データなど、大量の数値を配列として保持する場合
・精度の高さよりも、メモリの消費を抑えることが優先される場合

サンプルプログラム

以下のコードで、float32 の宣言方法と、int型との演算時の注意点を確認してみましょう。

package main

import (
	"fmt"
)

func main() {
	// float32型の変数を宣言
	// 型推論を使わず明示的に指定します
	var price float32 = 123.45

	// 別のfloat32型の変数と計算
	var taxRate float32 = 0.1
	total := price  (1 + taxRate)

	fmt.Printf("計算結果: %f\n", total)

	// 重要:異なる型との演算はエラーになる
	// var num int = 10
	// fmt.Println(price + num) // これはコンパイルエラー!
	
	// 計算するには型変換が必要
	var num int = 10
	result := price + float32(num)
	fmt.Printf("型変換後の結果: %f\n", result)
}

応用・注意点

現場で float32 を扱う際に最も注意すべきは「型変換(キャスト)」です。

Go言語は型に対して非常に厳格な言語です。float32 型と float64 型を混ぜて計算しようとすると、コンパイルエラーになります。必ず float32(変数名) のように明示的に変換を行う必要があります。

また、float32 は精度が限られているため、金融計算のように「1円の誤差も許されない」ような厳密な計算には向きません。そのような場合は、整数で管理するか、標準ライブラリ以外の専用パッケージ(decimal型など)の使用を検討してください。

適材適所で float32 を使いこなし、効率的で無駄のない Go のコードを書いていきましょう!

コメント

タイトルとURLをコピーしました