【Excel】べき乗 (累乗)・べき根 (累乗根) と指数法則
実数 (あるいは複素数) $a$ を $n$ 回掛ける演算を $a^n$ と表記し、$a$ を底、$n$ を指数とよびます。また、$a^n$ の形で表される数を $a$ のべき乗とよびます。たとえば、$2$ を $5$ 回掛ける演算を $2^5$ で表します。累乗とよぶこともありますが、累乗は指数 $n$ を整数に限定した演算です。後述するように、一般にべき乗の指数は有理数や実数、さらには複素数まで拡張できます。
Excel では「^」の記号を使ってべき乗・累乗を計算できます。「^」はキャレット (caret) とよばれる記号で、元々は校正で脱字挿入に使われていました。「^」の前に底 $a$、後ろに指数 $n$ を記述します。たとえば、$2^5$ を計算したいときはセルに
=2^5
と入力します (32 が返ります)。
指数 $n$ が $0$ のときは、$0$ 以外の実数 $a$ に対して $a^0=1$ と定義されています。$100^0$ を Excel に計算させてみましょう。セルに
=100^0
と入力すると 1 が返ります。$0^0$ は分野によって定義が異なりますが、Excel では「=0^0」は #NUM! エラーを返すようになっています。
指数 $n$ が負の値のとき、$a^n$ は $1$ を $a$ で $n$ 回除算した演算として定義されます (ただし、$a\neq 0$)。すなわち、
\[\begin{align*}a^{-1}=&\frac{1}{a}\\[6pt]a^{-2}=&\frac{1}{a^2}\\[6pt]a^{-3}=&\frac{1}{a^3}\\[6pt]&\vdots\\[6pt]a^{-n}=&\frac{1}{a^n}\end{align*}\]
のように定義されています。たとえば、$4^{-3}$ は $1$ を $4$ で $3$ 回割る ($1/4$ を $3$ 回掛ける) 演算です。Excel で計算してみましょう。
=4^(-3)
と入力すると 0.01563 を得ます。
$n$ を有理数まで拡張してみましょう。$a^{1/n}$ は $a$ の $n$ 乗根、すなわち $x^n=a$ の解 $x$ として定義されます。たとえば、$a^{1/2}$ は $a$ の平方根、$a^{1/3}$ は $a$ の立方根です。一般に $a^{1/n}$ を $a$ の 累乗根 とよびます。Excel で $27^{1/3}$ を計算してみましょう。
=27^(1/3)
と入力すると 3 を得ます。$a$ が負数の場合、$n$ 乗根が定義できない場合があります。$x^3=-27$ の解は $-3$ なので、$(-27)^{1/3}$ は $-3$ です。しかし、$x^2=-25$ の解は実数範囲に存在しないので、$(-25)^{1/2}$ は定義できません。実際、キャレットを用いて
(-729)^(1/2)
を計算させると #NUM! を返します。
ただし、扱う範囲を複素数まで拡張すると、$x^2=-25$ の解 $5i$が存在するので、$(-729)^{1/2}$ を定義できます。複素数まで拡張されたべき演算は後述する IMPOWER関数を使って実行できます (詳細は記事の後半を参照してください)。
指数 $n$ を無理数まで拡張すれば、$n$ はすべての実数で定義されたことになります。このとき、一般に指数を $x$ で表します。$10^\sqrt{2}$ を計算してみましょう。
=10^(2^0.5)
戻り値は 25.95 です。この値は $10^1=10$ と $10^2=100$ の間にあります。有理指数を使って、もう少し範囲を狭めると、$10^{1.3}=19.95$ と $10^{1.5}=31.62$ の間にあります。とはいえ、実際にはコンピュータで無理数は扱えません。「=2^0.5」のような演算は、無理数 $\sqrt{2}$ の近似値である有理数を返していて、「=10^(2^0.5)」は $a^n$ で $n$ が有理数である場合のべき乗演算です。厳密な意味では、数値計算においては指数 $n$ を無理数に拡張できないばかりでなく、扱える桁数に制限がつくので、すべての有理数が扱えるわけでもありません。
指数法則
べき乗・累乗演算では以下の 指数法則 が成り立ちます。
\[\begin{align*}&a^x a^y=a^{x+y}\tag{1}\\[6pt]&(a^x)^y=a^{xy}\tag{2}\\[6pt]&(ab)^x=a^xb^x\tag{3}\end{align*}\]
$x,\ y$ が整数のとき、上の公式はほとんど自明です。たとえば、
\[10^2\cdot 10^3=(10 \times 10)\times (10\times 10\times 10)=10^5=10^{2+3}\]
が成り立つことはすぐにわかります。しかし、上の公式は任意の実数 $x,\ y$ について成立します。直感的には理解しにくいですが、指数に無理数を含んだ
\[10^2 \cdot 10^{\sqrt{3}}=10^{2+\sqrt{3}}\]
のような式も成り立っています。Excel で左辺と右辺を別々に計算して、計算結果が等しくなることを確認しておきましょう。入力数式を見やすくするために、平方根は SQRT関数を使って求めます。左辺を計算するために
=10^2*10^SQRT(3)
と入力すると、5395.74 が表示されます。また、右辺を計算するために
=10^(2+SQRT(3))
と入力しても、5395.74 が返ります。
POWER関数
キャレット演算子の代わりに POWER関数を用いてべき乗を計算することもできます。POWER関数は
=POWER(底, 指数)
のように記述します。たとえば $3^2$ を計算したいときは
=POWER(3,2)
と入力します (9 が返ります)。11 の 3 乗根を計算するには
=POWER(11,1/3)
と入力します (戻り値は 2.223)。POWER関数を使う利点は計算式を見やすくするということです。たとえば演算子だけで
=A1^2*5^(0.2)*cos(A1)
のように複雑な数式を書くと非常に見づらいですが、
=POWER(A1,2)*POWER(5,0.2)*cos(A1)
とすれば、入力式の意味をすぐに読み取ることができます。
EXP関数
自然対数の底 $e=2.718…$ (ネイピア数) のべき乗を計算するときは EXP関数を使って
=EXP(指数)
と入力します。$e$ を底、指数に 1 を指定して
=EXP(1)
と記述すると $e$ の値 (2.718 …) が得られます。
=EXP(1/2)
とすると $e$ の平方根 1.648 … が返ってきます。
IMPOWER関数
キャレット演算子やPOWER関数では、底や戻り値が複素数であるようなべき乗を扱うことはできません。複素数まで拡張されたべき乗演算は IMPOWER関数を用いて実行します:
=IMPOWER(底, 指数)
底には数値または文字列形式で表された複素数を指定できます (複素数を指定する場合は引数をダブルクォーテーションで括ってください)。たとえば、$(1+i)^3$ を計算したい場合は
=IMPOWER("1+i",3)
と入力します (戻り値は “-2+2i”)。底、指数ともに実数であっても、戻り値が虚数や複素数となることもあります。たとえば、$-25$ の平方根は $5i$ です。Excel で確かめてみましょう。
=IMPOWER(-25,0.5)
戻り値は “3.06287113727155E-16+5i” となって、実数部に僅かな誤差が生じます (“E-16” は $10^{-16}$ を表しています)。
【VBA】べき乗・累乗計算
一般的にVBAでは、累乗・べき乗を「^」(キャレット)を使って計算します。たとえば、$10^2$ は「10^2」で計算できます。
Sub PowerSample1() 'キャレットでべき乗を計算 Debug.Print 10 ^ 2 End Sub '100
ワークシート関数の Power を呼び出してべき乗を計算することもできます。
Sub PowerSample2() Dim x As Double 'ワークシート関数で13の1.5乗を計算 x = WorksheetFunction.Power(13, 1.5) Debug.Print x End Sub '46.8721665810319
底が複素数であるときは、ワークシート関数の ImPower を呼び出してください。たとえば、$(1+2i)^3$ を計算するときは、以下のようなコードを書きます。
Sub PowerSample3() Dim a As Variant, b As Variant '複素数1+2i a = WorksheetFunction.Complex(1, 2) 'ワークシート関数で(1+2i)^3を計算 b = WorksheetFunction.ImPower(a, 3) Debug.Print b End Sub '-11-2i
戻り値が複素数となるようなべき乗計算においても、WorksheetFunction.ImPowerメソッドは有用です。たとえば、$-9$ の平方根は以下のように計算できます。
Sub PowerSample4() Dim c As Variant 'ImPower関数で-9の平方根を計算 c = WorksheetFunction.ImPower(-9, 0.5) Debug.Print c End Sub '1.83772268236293E-16+3i
エクセルや数学に関するコメントをお寄せください