logo

クヌースの矢印表記法:プログラミングでべき乗を^で表す理由 📂プログラミング

クヌースの矢印表記法:プログラミングでべき乗を^で表す理由

定義

クヌースの上向き矢印記法Knuth’s up-arrow notationとは、大きな整数を表すために考案された記法である。

加算、乗算、べき乗

加算addition$x + n$は次のように定義される。

$$ x + n = x + \underbrace{1 + \cdots + 1}_{n \text{ times}} $$

乗算multiplication$xn$は次のように定義される。

$$ xn = \underbrace{x + \cdots + x}_{n \text{ times}} $$

べき乗exponentiation$x^{n}$は次のように定義される。

$$ \begin{align*} x^{n} =& x \uparrow n \\ =& \underbrace{x \cdots x}_{n \text{ times}} \end{align*} $$

テトレーションとペンテーション

テトレーションtetration$x \uparrow^{2} n$は次のように定義される。

$$ \begin{align*} x \uparrow^{2} n =& x \uparrow \uparrow n \\ =& \underbrace{x \uparrow \cdots \uparrow x}_{n \text{ times}} \end{align*} $$

ペンテーションpentation$x \uparrow^{3} n$は次のように定義される。

▶eq5◁

一般的な定義

$x \uparrow^{k} n$は次のように定義される1

$$ \begin{align*} x \uparrow^{k} n =& x \overbrace{\uparrow \cdots \uparrow}^{k \text{ arrows}} n \\ =& \underbrace{x \overbrace{\uparrow \cdots \uparrow}^{(k-1) \text{ arrows}} \cdots \overbrace{\uparrow \cdots \uparrow}^{(k-1) \text{ arrows}} x}_{n \text{ times}} \end{align*} $$

説明

その名前も有名なドナルド・クヌースDonald E. Knuthは、数学者であり、コンピューター科学者でもあり、特に人類の数式表現において絶対的で唯一の業績として残る、$\TeX$を開発したこともあった。彼はまた1976年の論文で上向き矢印記法を提案した。定義自体を見ただけでは非常に大きな数を扱うため、理解するのが難しい点があるかもしれない。しかし、その中で$k = 1$の時、つまり$\uparrow = \uparrow^{1}$は十分に普通の人間の認識に追随できる可能性があり、特に上向き矢印$\uparrow$を直接入力するのが困難なキーボード組版と関連して、$x^{n} = x \uparrow n$がキャレットcaret記号^を使ったx^nとぴったり一致し、このようなスタイルが広く普及することになった。

いくつかのプログラミング言語とそのタイムテーブルを見ると非常に興味深い:

  • 1957年、フォートランFortranが発表される。フォートランではべき乗は**を使用した。

  • 1972年、C言語が発表される。C言語ではべき乗の演算子がなく、math.hライブラリのpow関数で別途定義されていた。

  • 1976年、クヌースが論文で上向き矢印記法を発表する。

  • **1978年、クヌースが$\TeX$を開発する。**もちろん$\TeX$でのべき乗は^を使用した。

  • 1984年、MATLABがリリースされる。べき乗演算子は^を使用した。

  • 1991年、Pythonが発表される。べき乗演算子は**を使用した。

  • 1992年、R言語が発表される。べき乗演算子は^を使用した。

  • 1995年、Ruby が発表される。べき乗演算子は**を使用した。

  • 1995年、Javaが発表される。Mathライブラリのpowメソッドを使用する。

  • 2009年、Go言語が発表される。mathライブラリのpow関数を使用する。

  • 2012年、Juliaが発表される。べき乗演算子は^を使用した。

プログラミングでのべき乗演算子の歴史はクヌースの前後に分かれ、一般的な開発に関連する言語はフォートランのように**を使ったり、C言語のように別途の標準ライブラリから関数を提供し、科学技術計算や統計分析に関連する言語は^を選択した。例外的にPythonの場合は科学分野でも地位が大きいが、根本的には一般的な開発目的の言語である。


  1. Donald E. Knuth ,Mathematics and Computer Science: Coping with Finiteness.Science194,1235-1242(1976).DOI: https://doi.org/10.1126/science.194.4271.1235 ↩︎