logologo
Pythonのべき乗を計算するには?使い方をコードを用いて解説
thumb_pythonexponentiation_01

Pythonのべき乗を計算するには?使い方をコードを用いて解説

アンドエンジニア編集部
2024.06.16
この記事でわかること
べき乗とは、ある数xをn回掛けた場合の計算を求める解法です
Pythonでは、言語仕様に基づいた演算子と関数それぞれを提供します
Pythonのコードは手軽に作成できるため、共通ライブラリ化が可能です

Pythonのべき乗を計算する

img_pythonexponentiation_01

データ量の増大や、ビジネス拡大などの予測する際には、データ分析が欠かせません。指数的にデータ量が増加する、あるいは処理能力が必要になるなどの場合は、べき乗の計算を行います。

ここでは、Pythonを用いたべき乗計算を、サンプルコードを使いながら解説します。

【参考】:Python: Python 言語リファレンス

【入門編】Pythonの基本構文まとめ!学習方法や年収も解説

べき乗とは

べき乗とは、ある数xをn回掛けた場合の計算を求める解法です。このxを底や基数と呼び、nを指数と呼びます。この計算は、10進数や2進数の桁の繰り上げや繰り下げにも用いることができるため、プログラミングでよく使用します。

そのため、それぞれのプログラミング言語では、言語仕様に基づいて計算方法を定めたり、関数を提供したりしています。Pythonも、言語仕様に基づく計算方法と関数の双方を提供しています。

プログラミングの関数とは?役に立たない?学び方と実務で役立つスキル

Pythonのべき乗の計算方法

img_pythonexponentiation_02

Pythonの言語は、仕様が定められておりその中にべき乗の扱いが記されています。合わせて組み込み関数や、外部関数なども定義されており、使い勝手の良いプログラミング言語です。ここでは、べき乗計算に関する手法を、サンプルコードを使いながら解説します。

【参考】:Python: Python 言語リファレンス

Pythonの関数:基本的な使い方と組み込み関数を解説!

演算子を用いた言語仕様に基づく計算方法

Pythonでは、四則演算の演算子(「+」、「-」、「*」、「/」)のほか、べき乗の演算子を定義しています。べき乗演算子は、「 ** 」で表し、べき乗の計算は、「基数」 ** 「指数」のように記述します。

次の例は、基数を2として、指数を-5〜5までfor文で繰り返す、サンプルコードです。

# coding: utf-8
base=2
for expo in range(-5,6,1):
   print(base,"(",expo,"):",base**expo)

実行結果は、次の通りです。

2 ( -5 ): 0.03125
2 ( -4 ): 0.0625
2 ( -3 ): 0.125
2 ( -2 ): 0.25
2 ( -1 ): 0.5
2 ( 0 ): 1
2 ( 1 ): 2
2 ( 2 ): 4
2 ( 3 ): 8
2 ( 4 ): 16
2 ( 5 ): 32

指数部がマイナス(負)の場合は、1/2、1/4のように減っていき、プラス(正)の場合は、2、4のように基数に指数回だけ乗算されていることがわかります。

次に、基数を示すbase変数を10に置き換えてみましょう。

# coding: utf-8
base=10
for expo in range(-5,6,1):
   print(base,"(",expo,"):",base**expo)

実行結果は、次の通りです。

10 ( -5 ): 1e-05
10 ( -4 ): 0.0001
10 ( -3 ): 0.001
10 ( -2 ): 0.01
10 ( -1 ): 0.1
10 ( 0 ): 1
10 ( 1 ): 10
10 ( 2 ): 100
10 ( 3 ): 1000
10 ( 4 ): 10000
10 ( 5 ): 100000

実行結果を見ると、基数である10を指数で示す回数の乗算がされていることがわかります。これらの処理は、Pythonにおいても2進数や10進数の桁の繰り上げや繰り下げに利用できます。2のべき乗判定のように、計算せずに2進判定できる方法もありますが、基本知識として覚えておくと良いでしょう。

【参考】:Python: Python 言語リファレンス 演算子 【参考】:Python: Python 言語リファレンス べき乗演算

べき乗演算子の計算順序

べき乗演算子は、数式の記述方法により右から左に計算されます。例えば「A**B**C」は、「A**(B**C)」のように計算されます。

他の演算子は、「*」や「/」のように優先順位が高い演算子もありますが、すべて左から右に計算されます。計算誤りを防ぐためには、カッコを活用すると良いでしょう。

【参考】:Python: Python 言語リファレンス べき乗演算

組み込み関数を用いた計算方法

Pythonでは、組み込み関数にべき乗計算のpow()を用意しています。使い方は、べき乗演算子に近いもので、基数と指数を引数に渡します。先ほど紹介したべき乗演算子のサンプルコードを1か所修正し、以下のように変更するだけでpow()関数が利用できます。

# coding: utf-8
base=2
for expo in range(-5,6,1):
   print(base,"(",expo,"):",pow(base,expo))

実行結果はべき乗演算子と変わらないため割愛します。

【参考】:Python: Python 言語リファレンス 関数 pow

組み込み関数をさらに使い込む

先に紹介したべき乗計算のpow()関数には、第3引数があります。第3引数がNoneでなければ、第3引数の余り(剰余)を返します。べき乗演算子で表すと、"base**expo%mod"と同義です。この余りの計算は、pow()関数の方がべき乗演算子よりも高速で、よく使われています。

先ほどのサンプルコードで、第3引数にmod=7を代入してみます。

# coding: utf-8
base=2
mod=7
for expo in range(-5,6,1):
   print(base,"(",expo,"):",pow(base,expo),pow(base,expo,mod))
 
base=10
for expo in range(-5,6,1):
   print(base,"(",expo,"):",pow(base,expo),pow(base,expo,mod))

実行結果は、次の通りです。

2 ( -5 ): 0.03125 2
2 ( -4 ): 0.0625 4
2 ( -3 ): 0.125 1
2 ( -2 ): 0.25 2
2 ( -1 ): 0.5 4
2 ( 0 ): 1 1
2 ( 1 ): 2 2
2 ( 2 ): 4 4
2 ( 3 ): 8 1
2 ( 4 ): 16 2
2 ( 5 ): 32 4
10 ( -5 ): 1e-05 3
10 ( -4 ): 0.0001 2
10 ( -3 ): 0.001 6
10 ( -2 ): 0.01 4
10 ( -1 ): 0.1 5
10 ( 0 ): 1 1
10 ( 1 ): 10 3
10 ( 2 ): 100 2
10 ( 3 ): 1000 6
10 ( 4 ): 10000 4
10 ( 5 ): 100000 5

指数部がマイナス(負)の場合は、余り(剰余)としてモジュラ逆数が戻ります。上記例を見ると、基数が10、指数が-2、7の余り(剰余)の場合は、4が戻っています。この場合は、”4*10**2%7==1”が成立するので4が返っているのがわかります。

【参考】:Python: Python 言語リファレンス 関数 pow

mathライブラリを使用する

Pythonのmathライブラリにも、べき乗関数math.pow()が用意されています。用法は、pow()と同じですが、例外処理がIEEE 754標準にしたがいます。先ほどのサンプルコードは、mathライブラリをimportし、pow()をmath.pow()に置き換えるだけです。

# coding: utf-8
import math
base=2
for expo in range(-5,6,1):
   print(base,"(",expo,"):",math.pow(base,expo))
 
base=10
for expo in range(-5,6,1):
   print(base,"(",expo,"):",math.pow(base,expo))

演算では、引数をfloat型に置き換えるため、オーバーフローや桁落ちが発生しやすいものです。通常はべき乗演算子あるいはpow()関数を使用します。試しに、基数7、指数77のべき乗の結果を見てみます。

# coding: utf-8
import math
base=7

expo=77
print("math.pow",base,"(",expo,"):",math.pow(base,expo))
print("pow 関数",base,"(",expo,"):",pow(base,expo))
print("べき乗演算子",base,"(",expo,"):",base**expo)

実行結果は、次の通りです。

math.pow 7 ( 77 ): 1.1818138658059589e+65
pow 関数 7 ( 77 ): 118181386580595879976868414312001964434038548836769923458287039207
べき乗演算子 7 ( 77 ): 118181386580595879976868414312001964434038548836769923458287039207

math.pow()は、”1.1818138658059589e+65”となっており、単精度のfloat型のため、有効桁が少ないことがわかります。ここで示す”e+65”は、10のべき乗表示を意味します。

第2引数の指数を77から777など大きい値を引数で渡すと、pow()関数やべき乗演算子は計算結果が得られますが、math.pow()関数ではオーバーフローが発生します。

【参考】:Python: Python 言語リファレンス math関数 math.pow 【参考】:Python: Python 言語リファレンス データモデル

Pythonライブラリを活用する

より専門的な計算を行うには、Numpyのべき乗関数を利用するなど、さらなる活用も可能です。また、作図などでべき乗表示をする場合は、matplotlibで行うこともできます。

Pythonは、豊富なライブラリ活用がメリットですので、自身の必要なライブラリを入手し、より使いやすい環境を整えましょう。

NumPyとは?効率的なPythonのデータ分析手法を解説!
NumPyのインストール手順!トラブル対応法も解説!
【図解】Matplotlibのインストール手順を徹底解説!

Pythonはべき乗計算も手軽にできる

img_pythonexponentiation_03

Pythonは人気の汎用プログラミング言語であり、データサイエンス向けによく利用されます。デバッグがしやすいため、演算子や関数の評価が手軽にできます。べき乗計算も演算子と関数それぞれが利用できますので、用途に応じて使い分けすることも可能です。

コードは手軽に作成できるため、共通ライブラリ化を進めるとより使い勝手が良くなるでしょう。

データサイエンスとは?注目されている理由と基礎スキルについて解説!
気になる人のXをフォローしよう!
公式LINE
公式YouTube
マイナビITエージェント

編集部オススメコンテンツ

thumb_gptowten_01
ChatGPTの面白い使い方15選!ビジネスや遊び相手になる事例
アンドエンジニア編集部
2024.02.19

アンドエンジニアへの取材依頼、情報提供などはこちらから

お問い合わせ・情報提供

カテゴリー

編集部おすすめコンテンツ

アンドエンジニアへの取材依頼、情報提供などはこちらから

logologo
Powered by マイナビ AGENT