Javaの絶対値(abs)の計算方法と注意点

プログラミング

値が0からどれだけ離れているかの距離を表す絶対値は、JavaではMathクラスのabsメソッドで求めることができます。

絶対値は数学では複素数における計算等に使われますが、Javaにおいても計算は出来るものの少し注意が必要な点もあります。

本記事では、Javaにおける絶対値の求め方と注意点について解説します。

記事内に記載しているプログラムは、Java11を使って動作確認をしています。

Javaの絶対値(abs)の計算方法と注意点

Javaにおける絶対値の求め方と注意点について、以下の内容を解説します。

  • 絶対値とは
  • int型の計算方法と注意点
  • float型の計算方法と注意点
  • double型の計算方法と注意点
  • long型の計算方法と注意点

絶対値とは

絶対値とは、値の符号を無視して得られる正の値で、0から距離を表します。

数学では、|2| や |-2| という形で表現し、両者の結果はどちらも2です。

Javaではこの絶対値の計算を、java.lang.Mathクラスのabsメソッドで行うことができます。

java.langパッケージなので、インポートは不要で、staticメソッドになっています。

Javaで数学の計算をするときに利用することも出来ますし、2つの値のどちらがある地点から離れているかなどのゲームや画像処理などの場面でも使われることがあります。

absメソッドは、引数の型の違いで4つのメソッドが用意されていますので、それぞれ注意点も含めて解説していきます。

int型の計算方法と注意点

int型の数値を引数に渡すと、int型の絶対値を返します。

引数が正の数値である場合は、引数そのものを返します。
引数が負の数値である場合は、正負を逆にした値を返します。

int i1 = 2;
int i2 = -2;
System.out.println(Math.abs(i1)); // -> 2
System.out.println(Math.abs(i2)); // -> 2

引数に0や-0を指定しても、結果は0です。

int i3 = 0;
int i4 = -0;
System.out.println(Math.abs(i3)); // -> 0
System.out.println(Math.abs(i4)); // -> 0

int型の最大値である2147483647を指定するとそのままの数値が返されますが、最小値である-2147483648を指定すると絶対値となる2147483648をint型で表現できない(桁が足りない)ため、マイナス値がそのまま返されることに注意が必要です。

int i5 = Integer.MAX_VALUE;
int i6 = Integer.MIN_VALUE;
System.out.println(Math.abs(i5)); // -> 2147483647
System.out.println(Math.abs(i6)); // -> -2147483648

float型の計算方法と注意点

float型の数値を引数に渡すと、float型の絶対値を返します。

引数が正の数値である場合は、引数そのものを返します。
引数が負の数値である場合は、正負を逆にした値を返します。

float f1 = 1.23f;
float f2 = -1.23f;
System.out.println(Math.abs(f1)); // -> 1.23
System.out.println(Math.abs(f2)); // -> 1.23

引数に正のゼロや負のゼロを指定すると、結果は正のゼロとなります。

float f3 = 0.0f;
float f4 = -0.0f;
System.out.println(Math.abs(f3)); // -> 0.0
System.out.println(Math.abs(f4)); // -> 0.0

float型の最大値と最小値を指定した場合は、int型と同じくマイナス値がそのまま返されます。

float f5 = Float.MAX_VALUE;
float f6 = Float.MIN_VALUE;
System.out.println(Math.abs(f5)); // -> 3.4028235E38
System.out.println(Math.abs(f6)); // -> 1.4E-45

無限大を指定すると正の無限大が返されます。
NaNを指定するとNaNが返されます。

float f7 = Float.POSITIVE_INFINITY;
float f8 = Float.NEGATIVE_INFINITY;
float f9 = Float.NaN;
System.out.println(Math.abs(f7)); // -> Infinity
System.out.println(Math.abs(f8)); // -> Infinity
System.out.println(Math.abs(f9)); // -> NaN

double型の計算方法と注意点

double型の数値を引数に渡すと、double型の絶対値を返します。

引数が正の数値である場合は、引数そのものを返します。
引数が負の数値である場合は、正負を逆にした値を返します。

double d1 = 1.23;
double d2 = -1.23;
System.out.println(Math.abs(d1)); // -> 1.23
System.out.println(Math.abs(d2)); // -> 1.23

引数に正のゼロや負のゼロを指定すると、結果は正のゼロとなります。

double d3 = 0.0;
double d4 = -0.0;
System.out.println(Math.abs(d3)); // -> 0.0
System.out.println(Math.abs(d4)); // -> 0.0

double型の最大値と最小値を指定した場合は、int型と同じくマイナス値がそのまま返されます。

double d5 = Double.MAX_VALUE;
double d6 = Double.MIN_VALUE;
System.out.println(Math.abs(d5)); // -> 1.7976931348623157E308
System.out.println(Math.abs(d6)); // -> 4.9E-324

無限大を指定すると正の無限大が返されます。
NaNを指定するとNaNが返されます。

double d7 = Double.POSITIVE_INFINITY;
double d8 = Double.NEGATIVE_INFINITY;
double d9 = Double.NaN;
System.out.println(Math.abs(d7)); // -> Infinity
System.out.println(Math.abs(d8)); // -> Infinity
System.out.println(Math.abs(d9)); // -> NaN

long型の計算方法と注意点

long型の数値を引数に渡すと、long型の絶対値を返します。

引数が正の数値である場合は、引数そのものを返します。
引数が負の数値である場合は、正負を逆にした値を返します。

long l1 = 2L;
long l2 = -2L;
System.out.println(Math.abs(l1)); // -> 2
System.out.println(Math.abs(l2)); // -> 2

引数に正のゼロや負のゼロを指定すると、結果は正のゼロとなります。

long l3 = 0L;
long l4 = -0L;
System.out.println(Math.abs(l3)); // -> 0
System.out.println(Math.abs(l4)); // -> 0

long型の最大値と最小値を指定した場合は、int型と同じくマイナス値がそのまま返されます。

long l5 = Long.MAX_VALUE;
long l6 = Long.MIN_VALUE;
System.out.println(Math.abs(l5)); // -> 9223372036854775807
System.out.println(Math.abs(l6)); // -> -9223372036854775808

まとめ

Javaにおける絶対値の求め方と注意点についてまとめると、以下となります。

  • Javaでは絶対値の計算を、java.lang.Mathクラスのabsメソッドで行う。
  • Math.absメソッドは、int型、float型、double型、long型のそれぞれを引数にとるメソッドが用意されている。
  • 最小値や無限大の値を指定すると、絶対値として返されないのでプログラム内での計算には事前にチェックするなどの注意が必要。

あまり使う機会多くないメソッドではありますが、いつでも使えるように注意点を知っておくことが重要かと思います。

 

今回は、Javaにおける絶対値の求め方と注意点について解説しました。

以上、参考になれば幸いです。

コメント

タイトルとURLをコピーしました