Javaで平方根を求めるにはMathクラスのsqrtメソッドが便利です。今回はsqrtメソッドの使い方を紹介します。(メソッドを使わない方法も紹介しています。)
平方根とは数aがあるとき、2乗してaになるような数のことを指します。つまり「x2=a」を満たす数xがaの平方根になります。
sqrtメソッドの書式
sqrtメソッドは以下の様に記述します。
//sqrtメソッドの書式例 Math.sqrt(数字);
上記の数字を4とすると、4の平方根である2が戻り値として返されます。戻り値の型はdouble型になります。
数字が負である場合はNaN(Not a Number/非数)を返します。
メソッドの使用例【サンプルコード・出力結果】
メソッドの使用例をサンプルコードで示します。
サンプルコードを以下に示します。
public class SqrtTest { public static void main(String[] args) { // 4,9,10の平方根を求め出力する System.out.println(Math.sqrt(4)); System.out.println(Math.sqrt(9)); System.out.println(Math.sqrt(10)); // -1の平方根を求め出力する System.out.println(Math.sqrt(-1)); } }
サンプルコードの出力結果を以下に示します。
2.0 //4の平方根 3.0 //9の平方根 3.1622776601683795 //10の平方根 NaN //-1の平方根
それぞれの数字の平方根が、double型で出力されていることが分かります。
sqrtメソッドを使わずに平方根を計算する
sqrtメソッドを使わない方法として、数xの平方根を求めたい時、0からxまでの平均を近似していくことで平方根を求める方法があります。アルゴリズムの概要はこのようになります。
- num1とnum2の平均midを求める 初回はnum1にxを代入し、num2に0を代入する
- midの2乗(mid*mid)がxと一致したら処理を終了する (mid*mid)<xだったらnum2にmidを代入 (mid*mid)>xだったらmum1にmidを代入
- (mid*mid)がxと一致するか規定回数に達するまで1と2を繰り返す
例として、10の平方根を求めるサンプルコードを以下に示します。近似の回数は最大1000回にしています。
public class SqrtTest2 { public static void main(String[] args) { double number = 10; double num1 = number; double num2 = 0.0; double mid = 0.0; for (int i = 0; i < 1000; i++) { mid = (num2 + num1) / 2; if (mid * mid - number < 0) { num2 = mid; } else if (mid * mid == number) { num1 = mid; break; } else { num1 = mid; } } System.out.println(number + "の平方根:" + num1); } }
サンプルコードの出力結果を以下に示します。
10.0の平方根:3.1622776601683795
先ほどの出力結果と同じ物が出力されたことが分かります。平方根が無理数の場合、繰り返し処理は最大まで達して処理を終了します。
平方根が整数の場合だと1000回までいかずに処理を終了することがあります。試しに7の2乗である49をnumberに入れてみます。
処理回数:54 49.0の平方根:7.0
繰り返し処理は54回で抜けていますね。平方根が整数だと早めに計算が終わりますが、小数の場合だと繰り返し処理は多くなってしまいます。また無理数の場合だと無条件に最大まで繰り返します。
まあ色々書きましたが、この方法だとコードが長いので普通にsqrtメソッドを使った方が見やすいし便利です。
まとめ
今回やったことのまとめです。
- 平方根を求めるのにはsqrtメソッドを使うと便利
- 戻り値がdouble型で返るので注意
以上がsqrtメソッドについての紹介です。
似た機能を持つメソッドに立方根を計算するcbrtメソッドがあるので注意しましょう。