Javaの浮動小数点型 (float, double)

Javaの浮動小数点型 (float, double)

浮動小数点型とは?

浮動小数点型は、小数を含む数値を扱うためのデータ型です。Javaでは、floatdoubleという2つの浮動小数点型があります。浮動小数点型は、科学的な計算やグラフィックス処理などで頻繁に使用されます。

浮動小数点数は、数値を指数表記で表します。例えば、12345.671.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型の値を指定するには、通常は末尾に何も付けませんが、明示的にdDを付けることもできます。

浮動小数点数の範囲はおおよそ -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 

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です