0の0乗はなぜ1?中学生でもわかる指数法則からの証明

広告

プログラミングで Math.Pow(0, 0) や 0 ** 0 を計算すると、なぜか1が返ってきます。数学的には「不定形」とも呼ばれる0の0乗が、なぜプログラムの世界では堂々と1として扱われるのか。今回は中学生でも追える指数法則から、その理由を掘り下げてみます。

指数法則をおさらいしよう

指数のルールに、こんなものがあります。

x^a \div x^b = x^{a-b}

たとえば a=3, b=3 のときを考えてみましょう。

x^3 \div x^3 = x^{3-3} = x^0

同じ数を同じ数で割ったら?

x^3 という数を、x^3自身で割っています。同じ数を同じ数で割ったら、答えは必ず1になりますよね。つまり x^3 \div x^3 = 1 です。

上の2つの式を見比べると、こうなります。

x^0 = 1

これで、xが0でない数のとき、x^0 = 1 がスッキリ証明できました。

身近な例:2進数の位取りとの関係

実はこの x^0=1 は、2進数を10進数に変換するときにも顔を出しています。2進数を右から読むとき、位の重みは 2^0=1, 2^1=2, 2^2=4, 2^3=8, 2^4=16 … となりますよね。

16, 8, 4, 2, 1 という並びをよく見ると、隣同士は「2で割る」という関係になっています。16÷2=8、8÷2=4、4÷2=2、2÷2=1。一番右の「1の位」は、この「÷2」を繰り返した先にある 2^0 そのものです。

無意識に使っている2進数の位取りは、実は x=2 のとき x^0=1 が成り立つことを体感的に裏付けている例なのです。

ただし、これはあくまで x=2 という「0でない数」での話です。0の0乗(0^0)は x=0 という特殊なケースなので、この「÷2」のような割り算がそもそも使えません。2進数の位取りは x^0=1 の自然さを実感させてくれますが、0^0特有の「0÷0になってしまう」問題を直接解決するわけではない、という点には注意が必要です。

では0の0乗はどうなる?

ここで正直に触れておきたい弱点があります。上の証明は「x^3 ÷ x^3」という割り算を使っていますが、これはxが0でないことが前提のルールです。x=0を代入すると、0^3 ÷ 0^3、つまり0÷0という、そもそも計算できない式になってしまいます。

なので厳密には、次の2段階に分けて考える必要があります。

  • x≠0のとき: x^0=1 ← 上の証明でスッキリ示せる
  • x=0のとき: 0^0=? ← 上と同じ形にしたいので、人間が「1にしよう」と決めた(定義)

プログラミングでは「決め」が採用されている

数学の解析学(極限を扱う分野)では0^0は不定形として扱われることもあります。しかしプログラミングの世界では、離散的な計算(具体的な値同士の演算)として扱うため、多くの言語が0^0=1を採用しています。

実際にC#で確認してみましょう。

Console.WriteLine(Math.Pow(0, 0)); // 1
Console.WriteLine(Math.Pow(2, 0)); // 1
Console.WriteLine(Math.Pow(0, 2)); // 0

確かに0^0では、0の2乗(=0)ではなく0の0乗だけが1を返しています。これは「たまたま1になった」のではなく、人間が便利だからと意図的に決めた値だからです。

まとめ

  • x^a ÷ x^b = x^(a-b) という指数法則から、x≠0のときx^0=1がスッキリ導ける
  • しかしこの式変形自体が0のときは使えないので、0^0は証明ではなく定義
  • 多くのプログラミング言語では、離散的な演算として0^0=1を採用している
訪問数 3 回, 今日の訪問数 3回

広告

C#

Posted by hidepon