マンガで分かる Java入門講座

第4章 数値変数と演算子
4-3. float double

「浮動小数点数」とは何か、またその2つの型である「float」「double」を紹介します。

● float、double

 前回は整数を扱う型を紹介しました。今回は小数点付きの数(実数)を扱う型を紹介します。

 「float」と「double」という型で、小数点付きの数を扱うことができます。この2つの型の違いは、使用するメモリ サイズです。floatは32bit、doubleは64bitになります。

 また、floatの値は「1.23f」のように、数字の末尾に「f」をつけます。doubleは「1.0」のように、通常の小数点の書き方で書きます(もしくは「1.0d」と書きます)。

ソースコード)floatとdouble
float f = 1.23f;
double d = 1.0;

表)使用するメモリ サイズ
サイズ扱う数字
float32bit±3.4028235E38~±1.4E-45
double64bit±1.7976931348623157E308~±4.9E-324

● E

 先ほどの表に出てきた「E」は「10の何乗か」を表しています。「E38」は「10の38乗」、「E-45」は「10の-45乗」を表しています。また、「E2」なら「100」、「E-2」なら「0.01」になります。

 これらは、大きな桁の数字、小さな桁の数字を扱うための書き方です。

説明)Eを使って数を表す例
1.23E3   →  1.23×10の3乗   →  1.23×1000  →  1230
1.23E-2  →  1.23×10の-2乗  →  1.23×0.01  →  0.0123

● 浮動小数点数

 Javaのプログラミングでは、floatやdoubleを利用することで小数点付きの数(実数)を扱えます。しかし、プログラムでは、0と1で値を表すので、少数は表現できません。

 そこでプログラムでは、小数を特殊な方法で近似して表現しています。こういった数を「浮動小数点数」と呼びます。

 この浮動小数点数には「誤差」が含まれます。なぜならば、浮動小数点数は、実数そのものではなく、その近似でしかないからです。

 そのため、たとえば「1.1+2.2」という計算をした場合には、「3.3」とはならずに「3.3000003」のような誤差が紛れ込みます。

 こういった事情があるために、浮動小数点数では「どちらが大きいか」という比較はできますが「2つの値が同じか」という確認はできません。計算の過程で誤差が紛れ込むために、きっちり同じ数字にはならないからです。

 浮動小数点数を使う際は、この誤差のことを思い出して下さい。

ソースコード)浮動小数点数の誤差
System.out.println(1.1 + 2.2);  // 「3.3000000000000003」と出力

この講座のマンガ部分は「箱人形マンガ(Box Comic) 」で作成しています。
作成:2013/05/20  更新:2015/08/08  [Permalink]