Javaの浮動小数点型 (float, double)
浮動小数点型とは?
浮動小数点型は、小数を含む数値を扱うためのデータ型です。Javaでは、float
とdouble
という2つの浮動小数点型があります。浮動小数点型は、科学的な計算やグラフィックス処理などで頻繁に使用されます。
浮動小数点数は、数値を指数表記で表します。例えば、12345.67
は1.234567 x 10^4
と表せます。この形式により、非常に大きな数や非常に小さな数を効率よく表現できます。
float型について
float
型は、32ビットのIEEE 754単精度浮動小数点数を表します。Javaでfloat
型の値を指定するには、末尾にf
またはF
を付けます。
浮動小数点数の範囲はおおよそ -3.4028235E38
から 3.4028235E38
です。
float型の宣言例
float pi = 3.14f;
float smallValue = 1.2E-4f;
float型の使用例
public class FloatExample {
public static void main(String[] args) {
float num1 = 1.23f;
float num2 = 4.56f;
float sum = num1 + num2;
System.out.println("Sum: " + sum);
}
}
出力結果:
Sum: 5.79
double型について
double
型は、64ビットのIEEE 754倍精度浮動小数点数を表します。Javaでdouble
型の値を指定するには、通常は末尾に何も付けませんが、明示的にd
やD
を付けることもできます。
浮動小数点数の範囲はおおよそ -1.7976931348623157E308
から 1.7976931348623157E308
です。
double型の宣言例
double pi = 3.141592653589793;
double largeValue = 1.7E308;
double型の使用例
public class DoubleExample {
public static void main(String[] args) {
double num1 = 123.456;
double num2 = 789.123;
double product = num1 * num2;
System.out.println("Product: " + product);
}
}
出力結果:
Product: 97410.698088
精度と誤差について
浮動小数点型は、有限のビット数で表現されるため、正確にすべての小数を表現できるわけではありません。特に、float
は単精度のため、精度の限界が低く、double
は倍精度のため、より高い精度を持ちます。
誤差の例
public class PrecisionExample {
public static void main(String[] args) {
double num = 0.1;
double sum = 0.0;
for (int i = 0; i < 10; i++) {
sum += num;
}
System.out.println("Sum: " + sum);
}
}
出力結果:
Sum: 0.9999999999999999
本来は1.0
になるはずですが、浮動小数点演算の誤差により、正確に1.0
にはなりません。
浮動小数点数の演算
Javaでは、浮動小数点型で加算、減算、乗算、除算、剰余演算が可能です。
浮動小数点演算の例
public class FloatingPointOperations {
public static void main(String[] args) {
double a = 5.5;
double b = 2.0;
System.out.println("a + b = " + (a + b));
System.out.println("a - b = " + (a - b));
System.out.println("a * b = " + (a * b));
System.out.println("a / b = " + (a / b));
System.out.println("a % b = " + (a % b));
}
}
出力結果:
a + b = 7.5
a - b = 3.5
a * b = 11.0
a / b = 2.75
a % b = 1.5
浮動小数点型の限界
浮動小数点型にはいくつかの限界があります:
- 丸め誤差: 正確に表現できない小数が存在します。
- オーバーフロー/アンダーフロー: 非常に大きな値や小さな値を扱うと限界を超えることがあります。
- 比較の誤差: 浮動小数点数同士の比較は注意が必要です。
浮動小数点型の使用例
科学計算、グラフィックス、物理シミュレーションなどで浮動小数点型が使われます。
物理シミュレーションの例
public class PhysicsSimulation { public static void main(String[] args) { double time = 0.0; double velocity = 9.8; // 重力加速度 (m/s^2) double distance;
for (int i = 0; i <= 5; i++) {
distance = 0.5 * velocity * time * time;
System.out.println("Time: " + time + "s, Distance: " + distance + "m");
time += 1.0;
}
}
}
出力結果:
Time: 0.0s, Distance: 0.0m Time: 1.0s, Distance: 4.9m Time: 2.0s, Distance: 19.6m Time: 3.0s, Distance: 44.1m Time: 4.0s, Distance: 78.4m Time: 5.0s, Distance: 122.5m