Javaで累乗を計算方法|Math.powメソッドとfor文での方法やpowなしも解説のカバー画像

Javaで累乗を計算方法|Math.powメソッドとfor文での方法やpowなしも解説

公開日:2025/05/12最終更新日:2025/05/12

四則演算をする際に、Javaでは記号や演算子を使うことがよくあります。しかし、特殊な計算をするときに、数学の記号をそのまま使えないことは、意外と知られていません。


特に累乗計算は、Javaにおいて特殊なケースに該当し、メソッド利用やfor文のような繰り返しの処理を書くことが求められます。そこで本記事は、Javaで累乗を計算するメソッドやfor文のコードを使った計算方法を紹介します。


1.Javaの累乗計算とは

Javaでは、数学で使われる累乗計算をプログラム内で実装することができます。しかし、Javaでは特別な方法でこの計算を再現する必要があるのです。まずは前提となる累乗の知識と、Javaで累乗の扱いが異なる理由について以下に説明します。

数学の累乗

数学には、2乗や3乗のように「ある数字を重ね掛けする」という計算があります。例えば、数字の2を2回だけ重ね掛けする場合は、「2の2乗(2*2)=4」です。2の3乗は2*2*2=8となります。


この計算結果を数学では「累乗(るいじょう)」としており、日常用語やプログラミングでは別名「冪乗(べき乗)」と呼びます。「累乗」は掛ける回数(指数)が自然数という点に重点があります。


累乗は、重ね掛ける数を増やすほど指数関数的に計算結果が莫大なものとなります。例えば、2の16乗は65536で、ただ掛けるだけの計算とは異なり、計算結果が6万を超えるのです。


累乗と冪乗(べき乗)

重ねがけの回数(指数)が自然数以外のケース(マイナスや小数点)では、「累乗」とは呼ばず「冪乗(べき乗)」と呼びます。


特に数学やプログラムの世界では、自然数以外のさまざまな数字を入れることがありえます。そのため、「冪乗(べき乗)」の呼び方が通例です。

Javaのプログラムで累乗計算が必要な理由

Javaで累乗計算が必要な理由は、プログラムを作成する際に、計算が必要となるためです。例えば、数学や工学向けのプログラミングや統計処理、音量調整のシステム計算など、累乗を必要とする場面です。

Javaでは数学の演算子をそのまま使えない

Javaで累乗計算をする場合に、数学とプログラムでは微妙な違いがあります。具体的には、計算の指示を出すとき、記号「^(キャレット)」の意味が異なるのです。


まず、数学では記号の「^」が演算子や指数で数式やその計算結果を示します。しかし、プログラムの世界では、「^」がそのまま「累乗」を意味せず、「論理排他的ORビット演算子」を指します。


Javaプログラミング初学者にはあまり聞き慣れない演算子で、ビット数を比較して、片方が1なら1となり,比較する両方が同じ1・1か0・0なら0を出力する演算子のことです。


そのため、数学の感覚で「^」の計算式を書いてそのまま実行しても、累乗計算ができず、おかしな結果が出力されます。後のエラーやバグの原因となるので注意が必要です。

2.Javaで累乗計算する2つの方法

「^」が使えないJavaプログラミングの世界では、別の方法が使われます。ここでは、累乗計算を表現する2つの方法を紹介します。

powメソッド「Math.pow(a,b)」

Javaには数学の累乗計算に使うMathクラスがjava.langパッケージに用意されています。それが累乗計算を簡単に行える「powメソッド」です。


Javaでは小数点のdoubleを前提に「Math.pow(a,b)」のメソッドを提供しています。aとbには整数も入れて計算することができるため、Mathクラス公式ライブラリにはint型やlong型のpowメソッドはありません。


powメソッドが便利な点として、インポート不要で使えることです。つまり、少ないコード記述で累乗計算を実現します。

繰り返しfor文

次に、累乗計算は「同じ数字を指定の回数だけ掛ける」という掛け算の繰り返しで計算方法をコードにより表現することができます。しかし、回数が多いと大変です。


そこで、繰り返しfor文です。何回掛けるか決まっていれば、その回数を指定してfor文「for ()」の条件記述で計算を繰り返させます。


関連記事

Java SE入門|最新バージョン、ダウンロード方法、Oracle製品ライセンスを解説

3.Javaにあるpowメソッドの使い方

ここでは、powメソッドを具体的に使用する基礎知識やコードの書き方、そのバリエーションなどを解説します。

powメソッドの引数やコードの書き方

powメソッドを使うときは、引数の意味を理解して、指定のメソッド通りに正しく記述することがコツです。


以下は、2の3乗を累乗計算するpowメソッドのコード例です。

public class Main {

    public static void main(String[] args) {

        double result = Math.pow(2, 3);

        System.out.println(result);

    }

}

上記を確認すると、「Math.pow(2, 3)」となっており、powメソッドが1つ目の引数に「基数」、2つ目の引数に「指数」を入れています。


基数は、掛け算するもとの数字のことです。2を3回掛けるので、基数は2です。指数は掛ける回数のことです。そのため、指数は3です。


先の例では、メソッドに直接数字を入力しましたが、変数を入力することもできます。

public class Main {

    public static void main(String[] args) {


        double a = 2;

        double b = 3;


        double result = Math.pow(a, b);

        System.out.println(result);

    }

}

上記の例では、先に基数と指数を定義し、a, bと入れています。これで同じ2の3乗を累乗計算して「8.0」の出力結果を出せます。小数点がつくのは、型がdoubleのためです。

Javaで2乗の計算をする方法

これらの例は3乗の計算方法ですが、2乗の計算をしたいときは、bの3を2に変えるだけで変更できます。powメソッドはdoubleの型を使うため、計算結果の誤差を受け入れることが必要ですが、それを除けば整数まで一括で対応可能です。

指数が正の整数(自然数)ではない

累乗では指数が自然数、つまり正の整数でしたが、数学の計算では指数がマイナスや分数・少数になる冪乗計算もあります。


以下は、第2引数にマイナスや小数点を入れて計算する場合のコードです。

public class Main {

    public static void main(String[] args) {

        double a = 2;   //底の値

        double b = -3;  //指数がマイナス

        double c = 0.5; //指数が小数点


        double resultB = Math.pow(a, b);

        double resultC = Math.pow(a, c);


        System.out.println(resultB);

        System.out.println(resultC);

    }

}

累乗計算と四則計算を含む複雑な計算

数学や統計、ゲームなどで計算が必要となる場合に、累乗だけを計算するのではなく、他の四則計算に累乗が含まれることが考えられます。その場合、以下のように演算子と組み合わせたpowメソッドの組み込みが可能です。

public class Main {

    public static void main(String[] args) {


        double result = (Math.pow(2, 3) + 2) * 3 - 1; 

        System.out.println(result);

    }

}

上記の例では、「((2*2*2)+2)*3)-1」をあらわす計算式です。2の3乗を「pow(2, 3)」として計算しています。他は計算の記号が演算子として有効なため、そのまま計算結果が出ます。


関連記事

Java標準ライブラリ&外部ライブラリ一覧ガイド|選び方・使い方・作成方法など解説

4.Javaの繰り返しfor文で処理する累乗計算

次に、Javaの繰り返しfor文で累乗の計算を処理する方法です。

繰り返しfor文のコードの書き方

繰り返しfor文で累乗を計算する場合、powメソッドを使わずに計算することができます。以下は、2の3乗をメソッドを使わずに改めてfor文にしたものです。

public class Main {

    public static void main(String[] args) {

        int a = 2; //底

        int b = 3; //指数


        int result = 1;

        for (int i = 0; i < b; i++) {

            result *= a;

        }

        System.out.println("aのb乗の計算結果: " + result);

    }

}

繰り返しfor文で累乗計算のコードを書くメリット

繰り返しfor文のメリットは、型にとらわれることなく、柔軟に指定してコードを書けることです。


まず、powメソッドは型にintを指定できないため、自然数(正の整数)の指数と決まっている場合は、繰り返しfor文でintにして高速処理かつ高い精度で計算ができます。


また、条件分岐で使うことにより、他の条件分岐を加えたり、計算範囲や内容をコントロールしたり、自由度の高い計算ができます。


以下は、繰り返しfor文としてシンプルな3つの分岐で構成したコード例です。

public class Main {

    public static void main(String[] args) {

        double a = 2;  //底

        int b = 3;    //指数

        double result = 1;


        if (b > 0) {

            for (int i = 0; i < b; i++) {

                result *= a;

            }

        } else if (b == 0) {

            result = 1;

        } else {

            for (int i = 0; i < -b; i++) {

                result *= a;

            }

            result = 1 / result; //マイナス乗は逆数

        }

        System.out.println("a^b = " + result);

    }

}

まず、「if (b > 0) 」では、b(=3)回掛けるこの数字が正の整数の指数ならという条件で、実行されます。


具体的には、「int i = 0」で0回目からスタートして、bより小さい数字まで繰り返します。「i++」は、「i = i + 1」を省略したコードの書き方で、1を足しながら処理を繰り返す記号です。for文ではこの書き方がよく使われます。


今回の「2の3乗」の場合は、i=0で1回目、i=1で2回目、i=2で3回目となり、3乗が達成されます。4回目は自動的に処理がストップする仕組みです。i=0でスタートする方法なら、処理の停止条件を余計に追加する必要がないため、簡潔にコードも書くことができます。


そして、0や負の数を入れない累乗の場合は基本的にこの条件だけで計算ができます。ただし、プログラムの中には指数が0や負の数になることもあるため、予測できないエラーを起こさないためにも、最低限3つの条件分岐は書きます。


まず、指数が0の場合です。累乗計算では、指数が0だと、計算結果が1になる規則があります。これは、累乗の計算が「1*2*2*2」の1を省略したものとみなし、2が0回掛けた、つまり2を掛けないときに残る数字は、計算のルール上「1」が残るというものです。この理屈を成立させるために、指数が0のときは1が計算結果となります。


最後の3つ目は、正の数でも0でもない負の数が指数のときです。マイナスは基本的に「1 / |b|」で表します。指数がマイナスの場合、数学では逆数となる累乗を意味するのです。


したがって、2のマイナス2乗は「4」ではなく逆数の「1/4」です。それをコードで機械的に表現するために、分母を絶対値にし、それを逆数にする手順をコード内の「result = 1 / result;」として入れているのです。


関連記事

【Java】for文の使い方|拡張for文やforEach・配列/リスト操作・省略形を解説

5.Javaでmathクラスのpowを使わない累乗計算

Javaで累乗計算する場合はmathクラスのpowメソッドを使用するのが通例です。しかし、他の方法で累乗計算を処理するケースもあります。


特に、繰り返しfor文に代替しただけでは難しい計算や、型を指定しないと計算精度が低い場合に「BigDecimal」や「独自メソッド」を使うのが代表的です。

BigDecimal(高精度な計算)を使った計算

まずは、powメソッド指定のdoubleよりも高精度な計算を可能とするBigDecimalを使用した方法です。


BigDecimalとは、標準ライブラリにあるjava.math.BigDecimalのパッケージに属するクラスです。丸め処理によるコントロールが可能で、通常なら誤差のある場面で四捨五入の小数点指定ができます。


以下の例は、整数の2に小数点をつけて、2.5とした場合に、計算を効率化できる方法です。小数点以下2桁に丸め処理も入れています。

import java.math.BigDecimal;

import java.math.RoundingMode;


public class BigDecimalExample {

    public static BigDecimal exponentialMultiply(BigDecimal a, int b) {

        BigDecimal result = BigDecimal.ONE;

        while (b != 0) {

            if (b % 2 != 0) {

                result = result.multiply(a);

            }

            a = a.multiply(a);

            b /= 2;

        } 

        result = result.setScale(2, RoundingMode.HALF_UP);//四捨五入(小数点2桁)

        return result;

    }

    public static void main(String[] args) {

        BigDecimal a = new BigDecimal("2.5");

        int b = 3;


        System.out.println(exponentialMultiply(a, b));

    }

}

上記の通り、最初にBigDecimalクラスをインポートして使っています。「setScale(2, RoundingMode.HALF_UP)」で四捨五入には「2桁」を指定し、文字列のStringで基底の小数を初期化して渡す手順です。


BigDecimalでは文字列でその数字とし、数字が大きくなりにくい指数はint型で定義します。後は、2.5*2.5*2.5 = 15.625の計算結果から最終的に小数点2桁で四捨五入した「15.63」が出力されます。

独自メソッドの作成

次に、独自クラスを作成する方法です。intではpowメソッドを扱えないため、独自クラスでintPowerのメソッドを用意します。


以下の例は、for文で累乗のロジックを設計し、それをメインメソッドの計算「intPower(a, b)」で使う形です。

public class IntPowerCalculator {


    public static int intPower(int a, int b) {

        int result = 1;

        for (int i = 0; i < b; i++) {

            result *= a;

        }

        return result;

    }


    public static void main(String[] args) {

        int a = 2;

        int b = 5;


        int result = intPower(a, b);

        System.out.println(a + "^" + b + " = " + result);

    }

}

2の5乗を計算するために、a,bにそれぞれ2,5を入れて累乗の計算をさせます。intPowerメソッドは呼び出して使うことができるため、他の累乗計算をしたいときにメソッドの再利用が可能です。


また、クラスのパッケージ化やモジュール化などで再利用性を高めることから、コーディング作業の効率を高めます。


関連記事

Javaでファイルを出力!CSV出力や文字コード指定、ファイル書き込みとレポート作成のテクニック

6.Javaで累乗計算するときの注意点

累乗計算のさまざまな方法のバリエーションを紹介しましたが、使う際には同時に注意点にも気をつけることです。

オーバーフローのエラー

1つ目は、オーバーフローを起こしてエラーや異常な値が出ることです。オーバーフローとは、その型で扱える数値を超えてしまうことです。


例えば、独自メソッドの作成では、intを指定した累乗計算を紹介しましたが、2の31乗の時点でintはオーバーフローを起こします。


つまり、オーバーフローしない前提で小さい数字を入れる専用メソッドとするか、事前にオーバーフロー対策を入れて、計算前に問題ないかチェックするコードを加えることが必要です。


チェック機構に例外のスロー(throw)を入れた場合のコード例は以下です。

public class IntPowerCalculator {


    public static int intPower(int a, int b) throws ArithmeticException {

        int result = 1;

        for (int i = 0; i < b; i++) {

            if (a != 0 && Math.abs(result) > Integer.MAX_VALUE / Math.abs(a)) {

                throw new ArithmeticException("計算結果がintの範囲を超えます");

            }

            result *= a;

        }

        return result;

    }

    public static void main(String[] args) {

        int a = 2;

        int b = 35;


        try {

            int result = intPower(a, b);

            System.out.println(a + "^" + b + " = " + result);

        } catch (ArithmeticException e) {

            System.out.println(e.getMessage()); 

        }

    }

}

指数は累乗時の増加幅が大きく、見ただけではオーバーフローするか想定しにくいでしょう。そのため、プログラムに絶対値による比較条件を入れて、範囲を超える場合は停止やエラー出力するようにします。

型の変換

powメソッドで累乗計算した場合に問題となるのが型の変換(キャスト)です。powメソッドは扱える型がdoubleとなります。


doubleは「倍精度浮動小数点数型」とも呼ばれており、小数点が値によって動くのが特徴です。そのため、他の型に変換する場合に問題が起きやすいといえます。


例えば、doubleの計算結果の値「15.625」を保持した場合、intやlongに変換する場合は小数点が扱えず、切り捨てる必要があるのです。また、扱える範囲もintやlongは型など型の種類によって範囲が変わります。


特に、doubleのように莫大な数字(1.7976931348623157*(10の308乗))を扱える型から範囲の狭いint型へ変換した場合では、累乗計算を変換するとオーバーフローしやすくなります。


また、floatは小数点を扱えますが、精度が低いため、丸め誤差が生じて正確ではなくなることも型変換時は考慮する必要があります。ただし、文字列に変換してデータを保持する場合は、精度を損なわずに変換することが可能です。

public class Main {

    public static void main(String[] args) {

        double d = Math.pow(2.5, 3);

        String str = Double.toString(d);

        System.out.println("String型に変換:" + str);

    }

}


関連記事

JavaとJavaScriptの違いは?文法の特徴から関係性・学習方法まで徹底解説!

7.Javaの累乗計算でよくある質問

ここでは、Javaの累乗計算でよくある質問に回答します。

累乗(「^」)を計算しようとコードにしたら計算結果が合わないのはなぜ?

Javaの累乗計算でエラーや間違った計算が発生する理由は、正しく累乗の計算コードを書けていないためです。特に、パソコン画面入力時の表記法の1つでは、数学の累乗表記に「^」を使うことがあるため、見慣れたこの演算子をJavaでも使ってしまいます。


しかし、Javaではビット数の比較演算子を意味するのです。「^」を累乗と同じ意味で使えるプログラミング言語は少なく、HaskellやMATLAB、Rなどに限られます。

Javaには累乗の記号や演算子を別に用意していない?

Javaでは、累乗や冪乗(べき乗)を意味して使える記号や演算子はありません。累乗計算の際に、メソッドが第一の選択肢となるのはそのためです。

「^」を使っていないのに、計算結果が合わないときは?

掛け合わせる数字によっては、結果に誤差が生じます。例えば、0.05の2乗の計算時に、基底が「0.05」は2進数で無限小数となって、10進数の変換前に丸め処理をするため、計算に誤差が出るのです。


このような計算結果の不一致を回避するときは、先のBigDecimalなどで10進数として内部処理することが不可欠です。もしBigDecimalや何か他の回避方法を使わない場合は、誤差を許容する必要が出てきます。

8.まとめ

今回は、Javaの累乗計算でよく使われるpowメソッドや繰り返しfor文、それ以外の累乗する方法、注意点などなどを解説しました。累乗計算は、powメソッドで行う場合に素早くできる反面、doubleからの型変換に気をつける必要があります。


また、intやlongは累乗計算では扱いにくく、独自メソッドを作成した場合もオーバーフローを意識した利用が欠かせません。


それから、メソッドを利用せずにfor文を使うことは、多少コード量が増えても計算内容を状況に応じて変えられる柔軟さにメリットがあります。以上を踏まえて、Javaの累乗計算ができるコードを組んで実践的に使いましょう。


本記事が皆様にとって少しでもお役に立てますと幸いです。


フリーランスボード」は、数多くのフリーランスエージェントが掲載するITフリーランスエンジニア・ITフリーランス向けの案件・求人を一括検索できるサイトです。


開発環境、職種、単価、稼働形態、稼働日数など様々な条件から、あなたに最適なフリーランス案件・求人を簡単に見つけることができます。

単価アップを目指す方や、自分の得意なスキルを活かせる案件に参画したい方は、ぜひ「フリーランスボード」をご利用ください。


自身に最適なフリーランスエージェントを探したい方はこちらよりご確認いただけます。

無料で登録したらスカウトを待つだけ フリーランスの新しい仕事探しを始めよう

フルリモート案件を 無料登録した方限定で配信中

目次

1.Javaの累乗計算とは

数学の累乗

Javaのプログラムで累乗計算が必要な理由

Javaでは数学の演算子をそのまま使えない

2.Javaで累乗計算する2つの方法

powメソッド「Math.pow(a,b)」

繰り返しfor文

3.Javaにあるpowメソッドの使い方

powメソッドの引数やコードの書き方

Javaで2乗の計算をする方法

指数が正の整数(自然数)ではない

累乗計算と四則計算を含む複雑な計算

4.Javaの繰り返しfor文で処理する累乗計算

繰り返しfor文のコードの書き方

繰り返しfor文で累乗計算のコードを書くメリット

5.Javaでmathクラスのpowを使わない累乗計算

BigDecimal(高精度な計算)を使った計算

独自メソッドの作成

6.Javaで累乗計算するときの注意点

オーバーフローのエラー

型の変換

7.Javaの累乗計算でよくある質問

累乗(「^」)を計算しようとコードにしたら計算結果が合わないのはなぜ?

Javaには累乗の記号や演算子を別に用意していない?

「^」を使っていないのに、計算結果が合わないときは?

8.まとめ