プロジェクト

全般

プロフィール

操作

Float doubleで誤差が発生する説明

はい、float や double で誤差が発生する理由を、初心者にもわかりやすく説明します。


🔍 ざっくり結論

コンピュータは 「2進数」しか使えない。
だから、**「きれいな10進数の小数」**が 正確に表現できないことがある。


📌 具体例

たとえば「0.1」という値。

人間は当たり前のように「0.1」と書けるけど…

0.1(10進数) = 0.000110011001100...(2進数・無限に続く)

このように、0.1 は 2進数で正確に表現できない無限小数になります。


💥 結果:こんな誤差が出る

double a = 0.1;
double b = 0.2;
double c = a + b;

System.out.println(c);  // 結果:0.30000000000000004

0.3 に見えるはずが、微妙にずれた 0.30000000000000004 になります。


🧠 なぜ float/double にだけ誤差が出るの?

  • float や double は 有限のビット数で小数を表現します(IEEE 754形式)。
  • でも、0.1 や 0.2 などは 2進数で無限に続く → 途中で切り捨てるしかない。
  • それが **誤差(丸め誤差)**の原因です。

💡 どうすればいいの?

✅ 金額・精度が重要な場面では…

→ BigDecimal(Javaの場合)や decimal 型(C#)など、誤差のない小数型を使う。

BigDecimal a = new BigDecimal("0.1");
BigDecimal b = new BigDecimal("0.2");
BigDecimal c = a.add(b);
System.out.println(c);  // 結果:0.3(誤差なし)

🧪 まとめ

項目 内容
なぜ誤差が出る? 2進数で小数(例:0.1)が正確に表現できない
影響 計算結果が微妙にずれる(例:0.30000004)
対処法 金額などは BigDecimal を使う
float/doubleの用途 ざっくりした計算(グラフ、座標など)向け

さらに図解やアニメーション付きで理解したい場合は、希望を教えてください。それに合わせて説明を調整します!

渡邉 拓英 さんが1年以上前に更新 · 0件の履歴