JavaRush /Java Blog /Random-JA /Java Math クラスとそのメソッド

Java Math クラスとそのメソッド

Random-JA グループに公開済み
この記事では、Java の Math クラスの概要を説明します。このクラスのメソッドとその使用方法について説明します。Math クラスは java.lang パッケージに存在し、さまざまな数学的計算を実行するための静的メソッドのセットを提供します。以下は、Math クラスが役立つ計算の例です。
  • 絶対値(モジュロ値)の計算
  • 三角関数の値の計算(サイン、コサインなど)
  • さまざまな程度の標高
  • さまざまな程度の根を抽出する
  • 乱数の生成
  • 丸め
  • 等。
以下では、Java Math クラスが上記の問題の解決にどのように役立つかを見ていきます。Java Math クラスとそのメソッド - 1値の剰余を計算できるメソッドを使用してクラスの分析を開始しましょう。これを担うのがabsメソッドです。このメソッドはオーバーロードされており、Math クラスには次のような違いがあります。
  • 静的ダブルabs(ダブルa)
  • 静的 float abs(float a)
  • 静的 int abs(int a)
  • 静的長い腹筋(長いa)
使用例:
public static void main(String[] args) {
        System.out.println(Math.abs(-1));      // 1
        System.out.println(Math.abs(-21.8d));  // 21.8
        System.out.println(Math.abs(4532L));   // 4532
        System.out.println(Math.abs(5.341f));  // 5.341
    }

三角関数の値を計算する

Math クラスを使用すると、サイン、コサイン、タンジェントなど、さまざまな三角関数を計算できます。メソッドの完全なリストは、公式ドキュメント Web サイトで見つけることができます。以下にこれらのメソッドのリストを示します。
  • 静的二重罪(ダブルa)
  • 静的 double cos(double a)
  • スタティックダブルタン(ダブルエー)
  • 静的ダブル asin(ダブル a)
  • 静的ダブル acos(ダブル a)
  • 静的ダブルアタン(ダブルa)
メソッドは、サイン、コサイン、タンジェント、アークサイン、アークコサイン、アークタンジェントを計算します。各メソッドは角度「a」の値を計算します。このパラメータは各メソッドに渡され、いずれの場合もラジアンで測定されます (私たちが慣れ親しんでいる度ではありません)。ここで良いニュースと悪いニュースが 2 つあります。良いものから始めましょう。Math クラスには、ラジアンを度に変換し、度をラジアンに変換するメソッドがあります。
  • 静的 double toDegrees(double angrad)
  • 静的 double toRadians(double angdeg)
ここで、toDegrees メソッドは、ラジアンで測定された角度 angrad を度に変換します。逆に、toRadians メソッドは、度単位で測定された角度 angdeg をラジアンに変換します。悪いニュースは、これは何らかのエラーで発生するということです。サインとコサインを計算する例を次に示します。
public static void main(String[] args) {
        System.out.println(Math.sin(Math.toRadians(0)));
        System.out.println(Math.sin(Math.toRadians(30)));
        System.out.println(Math.sin(Math.toRadians(90)));

        System.out.println(Math.cos(Math.toRadians(0)));
        System.out.println(Math.cos(Math.toRadians(30)));
        System.out.println(Math.cos(Math.toRadians(90)));
    }
プログラムは次のように出力します。

0.0
0.49999999999999994
1.0

1.0
0.8660254037844387
6.123233995736766E-17
これは、度からラジアンへの変換におけるエラーの一部が原因で、サインとコサインの表に完全に対応していません。

べき乗

数値をべき乗するために、Math クラスは次のシグネチャを持つ pow メソッドを提供します。
static double pow(double a, double b)
このメソッドは、パラメータ 'a' を 'b' 乗します。例:
public static void main(String[] args) {
        System.out.println(Math.pow(1,2)); // 1.0
        System.out.println(Math.pow(2,2)); // 4.0
        System.out.println(Math.pow(3,2)); // 9.0
        System.out.println(Math.pow(4,2)); // 16.0
        System.out.println(Math.pow(5,2)); // 25.0

        System.out.println(Math.pow(1,3)); // 1.0
        System.out.println(Math.pow(2,3)); // 8.0
        System.out.println(Math.pow(3,3)); // 27.0
        System.out.println(Math.pow(4,3)); // 64.0
        System.out.println(Math.pow(5,3)); // 125.0
    }

根の抽出

Math クラスは、平方根と立方根を求めるメソッドを提供します。この手順は次のメソッドが担当します。
  • 静的 double sqrt(double a)
  • 静的ダブル cbrt(ダブル a)
sqrt メソッドは平方根を取得し、cbrt メソッドは立方根を取得します。例:
public static void main(String[] args) {
        System.out.println(Math.sqrt(4));   // 2.0
        System.out.println(Math.sqrt(9));   // 3.0
        System.out.println(Math.sqrt(16));  // 4.0

        System.out.println(Math.cbrt(8));   // 2.0
        System.out.println(Math.cbrt(27));  // 3.0
        System.out.println(Math.cbrt(125)); // 5.0
    }

乱数の生成

乱数を生成するために、Math クラスは Random メソッドを提供します。このメソッドは、0.0 ~ 1.0 の範囲のランダムな正の実数 (倍精度) を生成します。メソッドのシグネチャは次のようになります。
public static double random()
例を見てみましょう:
public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
        System.out.println(Math.random());
    }
}
main メソッドを実行すると、コンソールに次のように表示されました。

0.37057465028778513
0.2516253742011597
0.9315649439611121
0.6346725713527239
0.7442959932755443
少し操作するだけで、Math クラスの Random メソッドを使用して、特定の範囲にある整数の乱数を取得できます。以下は、2 つの引数 min と max を受け取り、min (両端を含む) から max (両端を含む) までの範囲にあるランダムな整数を返す関数の例です。
static int randomInARange(int min, int max) {
    return  (int) (Math.random() * ((max - min) + 1)) + min;
}
randomInARange メソッドをテストする Main メソッドを作成しましょう。
public class MathExample {


    public static void main(String[] args) {
        // Карта, в которой мы будем хранить количество выпадений Howого-то числа
        Map<Integer, Integer> map = new TreeMap<>();

        // За 10000 операций
        for (int i = 0; i < 10000; i++) {

            // Сгенерируем рандомное число от -10 включительно до 10 включительно
            final Integer randomNumber = randomInARange(-10, 10);


            if (!map.containsKey(randomNumber)) {
                // Если карта еще не содержит "выпавшего случайного числа"
                // Положим его в карту с кол-вом выпадений = 1
                map.put(randomNumber, 1);
            } else {
                // Иначе, увеличим количество выпадений данного числа на 1
                map.put(randomNumber, map.get(randomNumber) + 1);
            }
        }

        // Выведем на экран содержимое карты в формате ключ=[meaning]
        for (Map.Entry<Integer, Integer> entry : map.entrySet()){
            System.out.println(String.format("%d=[%d]", entry.getKey(), entry.getValue()));
        }
    }

    static int randomInARange(int min, int max) {
        return  (int) (Math.random() * ((max - min) + 1)) + min;
    }
}
main メソッドを実行すると、出力は次のようになります。

-10=[482]
-9=[495]
-8=[472]
-7=[514]
-6=[457]
-5=[465]
-4=[486]
-3=[500]
-2=[490]
-1=[466]
0=[458]
1=[488]
2=[461]
3=[470]
4=[464]
5=[463]
6=[484]
7=[479]
8=[459]
9=[503]
10=[444]

Process finished with exit code 0

丸め

Java で数値を丸める場合、ツールの 1 つは Math クラスのメソッドです。より正確には、ラウンド、天井、床の方法:
  • 静的ロングラウンド(ダブルa)
  • 静的 int ラウンド (float a)
  • 静的二重床(ダブルa)
  • 静的二重天井(ダブルa)
Round メソッド - 通常どおり、平均的な人に丸めます。数値の小数部が 0.5 以上の場合、数値は切り上げられ、それ以外の場合は切り捨てられます。Floor メソッドは、小数部分の値に関係なく、常に数値を切り捨てます (負の無限大に向かって)。逆に、ceil メソッドは、小数部の値に関係なく、数値を (正の無限大に向かって) 切り上げます。例を見てみましょう:
public static void main(String[] args) {
    System.out.println(Math.round(1.3)); // 1
    System.out.println(Math.round(1.4)); // 1
    System.out.println(Math.round(1.5)); // 2
    System.out.println(Math.round(1.6)); // 2

    System.out.println(Math.floor(1.3)); // 1.0
    System.out.println(Math.floor(1.4)); // 1.0
    System.out.println(Math.floor(1.5)); // 1.0
    System.out.println(Math.floor(1.6)); // 1.0

    System.out.println(Math.ceil(1.3)); // 2.0
    System.out.println(Math.ceil(1.4)); // 2.0
    System.out.println(Math.ceil(1.5)); // 2.0
    System.out.println(Math.ceil(1.6)); // 2.0
}

結論

この記事では、数学の授業について表面的に考察しました。このクラスを使用して次のことができることを確認しました。
  • モジュロ値を計算します。
  • 三角関数の値を計算します。
  • 数値を累乗します。
  • 平方根と立方根を抽出します。
  • 乱数を生成します。
  • 概数。
このクラスには他にも興味深いメソッドがたくさんあります。これは、公式ドキュメント Web サイトで見つけることができます。まあ、初めて知り合う場合は、上に挙げた方法で十分です。
コメント
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION