C言語入門|C言語の小数型を理解しよう:float型とdouble型の違いと注意点

整数型に続いて扱うのが、小数を扱うための float 型double 型 です😊
C言語にはさまざまな数値型がありますが、この2つは「小数を扱うときに必ず使う」基礎中の基礎。

たとえば、

  • 身長 → 171.3
  • 体重 → 67.5
  • 気温 → -2.8
  • 金額の計算(割引率など)

といった“小数のある値”を扱うときには、必ずこのどちらかを使うことになります。
ただし……小数型には 落とし穴 があります⚠️
精度や誤差など、整数型とは違った注意点があるので、しっかり理解しておきましょう✨

🧮 小数を扱う2つの型:float と double の違い

まずは特徴を表で比較してみましょう👇

📋 float と double の比較

メモリ消費表現できる小数の精度利用頻度コメント
float4バイトおよそ6~7桁精度が低いため特殊用途向け
double8バイトおよそ15~16桁標準的な精度。通常はこちら

✔ 結論

小数を使うなら、基本は double を選べば安心😊!

理由は精度の高さ。
6桁しか正確でない float では、多くの場面で誤差が問題になります。

💻 小数型のサンプルプログラム

プロジェクト名:2-5-1 ソースファイル名: sample2-5-1.c

#include <stdio.h>

int main(void)
{
    double height = 165.8;    // 小数を正確に扱いたいので double を使用
    float bmiRate = 22.7F;    // float の場合は末尾に F を付ける

    printf("身長は %.1f cm です\n", height);
    printf("BMI 指標 %.1f を参照中…\n", bmiRate);

    return 0;
}

📝 ここで登場した命令の解説

printf の書式

printf("文字列", 値);

小数を表示するときには %f を使います。

書式意味
%f小数をそのまま表示
%.1f小数1桁まで表示
%.3f小数3桁まで表示

printf("%.1f\n", height);

float 型に F が必要な理由

67.5 はデフォルトで double とみなされるため、float 変数に入れるときは

float value = 67.5F;

F を付けて float リテラルであることを示します。

⚠️ 超重要!小数は厳密な計算ができない

float や double は「浮動小数点数(floating point)」と呼ばれ、
2進数で小数を表現しています。

しかし……
2進数では 0.1 や 0.3 のような一見シンプルな小数も 正確に表せない のです😱💦

0.1(10進数)
↓ 変換
0.00011001100110011...(2進数で無限に続く)

→ メモリに保存するときに途中で打ち切られる
→ わずかな誤差が必ず残る!

この誤差が加算・乗算を繰り返すうちに広がり、
大きなズレになることもあります😥

✔ 浮動小数点の弱点

  • 内部的には“近似値”を扱っている。
  • 計算誤差が蓄積する。
  • 誤差が許されない処理(お金、座標計算など)では使用禁止

🎯 誤差が許されない場合

  • 整数で扱う。
  • 固定小数点方式を使う。
  • 文字列で扱う。
  • 専用ライブラリ(decimalなど)を使う。

浮動小数点はとても便利ですが、
“完璧ではない” ということを絶対に覚えておきましょう🌟

📘 float と double の使い分けまとめ

場面選ぶ型理由
通常の小数計算double精度が高く誤差が小さい。
メモリ節約が重要float組み込みシステムや大量データ
誤差が絶対に許されない使用不可整数 or fixed-point を使う。
非常に大きい or 非常に小さい値double表現可能範囲が広い。