C言語のfloatはどのようにメモリに格納される?IEEE 754形式の仕組みを解説
C言語におけるfloat(浮動小数点数)とは
C言語において、floatとは「floating point(浮動小数点)」の略称で、小数点以下の値を持つ数値を扱うためのデータ型です。では、この浮動小数点数はコンパイラやメモリ上にどのように格納されているのでしょうか。
浮動小数点数は、一般的にIEEE(Institute of Electrical and Electronics Engineers:米国電気電子学会)が定めたIEEE 754形式で表現されます。この形式では、数値を次の3つの要素に分解して格納します。
符号ビット(sign bit):数値の正負を表します。「0」なら正の値、「1」なら負の値を示します。
仮数部(mantissa):数値そのものの有効桁を表す部分です。2進数に変換し、正規化した形で格納されます。正規化後の仮数部は、最上位の桁が必ず「1」になります。
指数部(exponent):2の何乗を掛けるかを表す整数部分です。正の整数であるバイアス値を加算したうえで、符号なし2進数として格納されます。
バイアス値の役割
指数部にバイアスを加えることで、格納される指数が常に正の値になるようにしています。これにより、符号の扱いがシンプルになり、比較や演算が容易になります。
float型の場合:バイアス値は 127
double型の場合:バイアス値は 1023
なお、単精度のfloat型は32ビット(符号1ビット+指数8ビット+仮数23ビット)、倍精度のdouble型は64ビット(符号1ビット+指数11ビット+仮数52ビット)で構成されています。
サンプルプログラム1:小数第4位に丸めて表示する
次のCプログラムは、浮動小数点数を小数点以下4桁に丸めて出力する例です。
#include <stdio.h>
int main(){
float var = 37.66666;
printf("%.4f", var);// 小数点以下4桁に丸める
return 0;
}
実行結果
37.6667
サンプルプログラム2:小数第8位まで表示する
続いて、浮動小数点数を小数点以下8桁で表示した例です。
#include <stdio.h>
int main(){
float var = 78.67;
printf("%.8f", var);
return 0;
}
実行結果
78.66999817
まとめ:誤差が発生する理由
2つ目の実行結果を見ると、「78.67」と入力したはずの値が「78.66999817」と表示されています。これは、float型がIEEE 754形式で有限のビット数(仮数23ビット)しか持たないため、すべての10進数の小数を正確に2進数で表現できないことに起因します。このような浮動小数点数特有の丸め誤差は、金額計算など高い精度が求められる場面ではdouble型の利用や誤差対策を検討することが重要です。
-
直方体を一刀で切断!切り分けられたキューブの数を求めるPythonプログラム
問題概要 一辺の長さが a、b、c の単位立方体(キューブ)を組み合わせて、a×b×c の直方体を作ることを考えます。ただし、a、b、c はペアごとに互いに素、すなわち gcd(a, b) = gcd(b, c) = gcd(c, a) = 1 を満たすものとします。 この直方体を、下の図のように頂点 P・Q・R を通る平面でたった一刀で2つに切断します。このとき、断面によって「2つに切り分けられてしまう」単位立方体が何個あるかを求めるのがこの問題です。複数のテストケースが配列として与えられるので、それぞれのケースについて答えを計算して返します。 切断は、頂点 P、Q、R の3点を通る平面
-
Pythonプログラムの実行方法まとめ!IDLE・コマンドライン・PyCharmなど5つの方法を解説
コードを書いたら、次はそれを実行して出力結果を確認する必要があります。プログラムを実行することで、書いたコードが正しく動作し、期待通りの結果が得られるかどうかをチェックできます。幸いなことに、Pythonプログラムの実行はとても簡単です。この記事では、代表的な5つの実行方法をわかりやすく解説します。IDLEで実行するPythonに標準で付属しているIDLEを使ってプログラムを実行するには、以下の手順に従います。Pythonのコードを書いて保存します。メニューから「Run > Run Module」を選択するか、キーボードのF5キーを押すだけで実行できます。IDLEは初心者にとって扱いやす