除算と剰余の注意点

広告

四則演算を行う上で特に注意すべきなのが除算と剰余の演算についてです。ここではそれぞれの注意点を見ていきます。

除算

除算の際に注意全き点は0で割ってしまうこと(0除算)です。例えば次のサンプルを試してみて下さい。

JSample3_1.java

class JSample3_1{
  public static void main(String args[]){
    int n;

    n = 3 / 0;
    System.out.println(n);
  }
}

コンパイル後に実行すると次のように表示されます。

p3-1

コンパイルエラーにはなりませんが実行時に「java.lang.ArithmeticException: / by zero」と言うエラーとなります。これは整数を0で割った場合のエラーです。

例えばユーザーに入力してもらった数値で除算を行うようなプログラムなど、事前にどんな数値を使って除算が行われるか分からないようなプログラムを作成する場合は、0で割られないようにチェックするようにしなければなりません。

ただしこのエラーが発生するのは整数を0で除算した場合です。浮動小数点数を0で除算した場合や、整数を0.0で除算した場合には違った結果となります。次のサンプルを試してみて下さい。

JSample3_2.java

class JSample3_2{
  public static void main(String args[]){
    double d;

    d = 3.1 / 0;
    System.out.println(d);

    d = 3 / 0.0;
    System.out.println(d);

    d = -3.1 / 0;
    System.out.println(d);
  }
}

コンパイル後に実行すると次のように表示されます。

p3-2

今度はエラーとはなりません。計算した結果を出力すると「Infinity」となりました。「Infinity」はdouble型の無限大の値を文字列として出力させた時に表示されるものです。「-Infinity」は負の無限大です。このように整数の場合と浮動小数点数の場合とで結果が異なりますので注意が必要です。

剰余

剰余の場合も除算と同じように整数を0で割った余りを計算すると実行時エラーとなります。

JSample3_3.java

class JSample3_1{
  public static void main(String args[]){
    int n;

    n = 3 / 0;
    System.out.println(n);
  }
}

コンパイル後に実行すると次のように表示されます。

p3-3

コンパイルエラーにはなりませんが実行時に「java.lang.ArithmeticException: / by zero」と言うエラーとなります。

では次に浮動小数点数を0で除算した剰余や、整数を0.0で除算した剰余を計算してみます。次のサンプルを試してみて下さい。

JSample3_4.java

class JSample3_4{
  public static void main(String args[]){
    double d;

    d = 3.1 % 0;
    System.out.println(d);

    d = 3 % 0.0;
    System.out.println(d);

    d = -3.1 % 0;
    System.out.println(d);
  }
}

コンパイル後に実行すると次のように表示されます。

p3-4

今度はエラーとはなりません。計算した結果を出力すると「NaN」となりました。「NaN」は定義済みの定数で正常な数値ではないという意味になります(NaNはNot a Numberの意味で非数などと言われます)。ある値が「NaN」なのかどうかは単純な比較では調べられず専用のメソッドなどを使うなど扱いには注意が必要です。

除算と剰余についてはここまで記載したように0除算を行わないように注意してプログラムを記述するようにして下さい。

( Written by Tatsuo Ikura )