ゼロ除算

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動先: 案内検索

ゼロ除算(ゼロじょざん、division by zero)は、0 で除す割り算のことである。このような除算は除される数を a とするならば、形式上は テンプレート:分数 と書くことができるが、数学において、この式と何らかの意味のある値とが結び付けられるかどうかは、数学的な設定にまったく依存している話である。少なくとも通常の実数の体系とその算術においては、意味のある式ではない。

コンピュータなど計算機においても、ゼロ除算に対するふるまいは様々である。たとえば浮動小数点数の扱いに関する標準であるIEEE 754では、数とは異なる無限大を表現するものが結果となる。他には、例外が起きてプログラムの中断を引き起こすかもしれないし、例えばナイーブに取尽し法を実行しようとしたなら無限ループに陥るか、なんらかの最大値のようなものが結果となるかもしれない。

計算尺では、対数尺には0に相当する位置が存在しない(無限の彼方である)ため不可能である。

算数的解釈

算数レベルでは、除算は何らかの物の集合をそれぞれ同数になるように分けることで説明される。例えば、10個のリンゴを5人で分ける場合、各人は テンプレート:分数 = 2個のリンゴを受け取ることになる。同様に、10個のリンゴを1人で分ける場合、各人は テンプレート:分数 = 10個のリンゴを受け取る。

この考え方を使ってゼロ除算を説明できる。10個のリンゴを0人で分けるとする。各人は何個のリンゴを受け取るだろうか? テンプレート:分数 を計算しようとしても、元の設問自体が無意味なので無意味となる。この場合、各人が受け取る個数は、0個でも、10個でも、無限個でもない。なぜなら、元々受け取るべき人はいないからである。以上のように算数レベルで考える場合、ゼロ除算は無意味または未定義となる。

ゼロ除算の未定義性を理解する別の方法として、減法の繰り返し適用という考え方がある。すなわち、余りが除数より少なくなるまで除数を繰り返し引くのである。たとえば 13 割る 5 を考えると、13 から 5 は 2 回引くことができ、余りは 3 となる。結果は テンプレート:分数 = 2 あまり 3 などと記される。ゼロ除算の場合、ゼロを何度引いても余りがゼロより小さくなることはないため、無限に減法を繰り返すだけとなる。

初期の試み

628年ブラーマグプタが著した『ブラーマ・スプタ・シッダーンタ』では、0 を数として定義し、その演算結果も定義している。しかし、ゼロ除算の説明は間違っていた。彼の定義に従うと代数的不合理が生じることを簡単に証明できる。ブラーマグプタによれば、次の通りである。

「正または負の数をゼロで割ると、分母がゼロの分数となる。ゼロを正または負の数で割ると、ゼロになるか、またはゼロを分子とし有限数を分母とする分数になる。ゼロをゼロで割るとゼロになる」

830年マハーヴィーラはブラーマグプタの間違いを著書 『ガニタ・サーラ・サングラハ』で以下のように訂正しようとして失敗した。

「数はゼロで割っても変化しない」

バースカラ2世テンプレート:分数 = ∞ と定義することで問題を解決しようとした。この定義はある意味では正しいが、後述の「ゼロ除算と極限」に示す問題もあり、注意深く扱わないとパラドックスに陥る。このパラドックスは近年まで考察されなかった[1]

代数学的解釈

ゼロ除算を数学的に扱う自然な方法は、まず除算を他の算術操作で定義することで得られる。整数有理数実数複素数の一般的算術規則では、ゼロ除算は未定義である。の公理体系に従う数学的体系では、ゼロ除算は未定義のままとされなければならない。その理由は、除法乗法の逆演算として定義されているためである。つまり、テンプレート:分数 の値は、bx = a という等式を x について解いたときに値が一意に定まる場合のみ存在する。さもなくば、値は未定義のままとされる。

b = 0 のとき、等式 bx = a は 0x = a または単に 0 = a と書き換えられる。つまりこの場合、等式 bx = aa が 0 でないときには解がなく、a が 0 であれば任意の x が解となりうる。いずれにしても解は一意に定まらず、テンプレート:分数 は未定義となる。逆に、においては テンプレート:分数b がゼロでないとき常に一意に定まる。

ゼロ除算に基づく誤謬

ゼロ除算を代数学的記述に用いて、例えば以下のように 1 = 2 のような誤った証明を導くことができる。

以下を前提とする。

<math>0 \times 1 = 0\quad</math>
<math>0 \times 2 = 0\quad</math>

このとき、次が成り立つ。

<math>0 \times 1 = 0 \times 2</math>

両辺をゼロ除算すると、次のようになる。

<math>\textstyle \frac{0}{0}\times 1 = \frac{0}{0}\times 2</math>

これを簡約化すると次のようになる。

<math>1 = 2\quad</math>

この誤謬は、暗黙のうちに テンプレート:分数 = 1 であるかのように扱っていることから生じる。

上の証明が間違いであることは多くの人が気づくと思われるが、これをもっと巧妙に表現すると間違いを分かりにくくできる。例えば、1 を xy に置き換え、ゼロを xy、2 を x + y で置き換える。すると上記の証明は次のようになる。

<math>(x-y)x = x^2-xy = 0</math>
<math>(x-y)(x+y) = x^2-y^2 = 0</math>

したがって、

<math>(x-y)x = (x-y)(x+y)</math>

両辺を xy で割ると次のようになる。

<math>x = x+y</math>

x = y = 1 を代入すると、次のようになる。

<math>1 = 2</math>

ゼロ除算と極限

ファイル:Hyperbola one over x.svg
関数 y = <math>\textstyle\frac{1}{x}</math> のグラフ。x が 0 に近づくと、y は無限大に近づく。

直観的に テンプレート:分数テンプレート:分数b を 0 に漸近させたときの極限を考えることで定義されるように見える。

a が正の数の場合、次のようになる。

<math>\lim_{b \to 0^{+}} {a \over b} = {+}\infty</math>

a が負の数の場合、次のようになる。

<math>\lim_{b \to 0^{+}} {a \over b} = {-}\infty</math>

したがって、a が正のとき テンプレート:分数 を +∞、a が負のとき −∞ と定義できるように思われる。しかし、この定義には2つの問題点がある。

第一に、正と負の無限大実数ではない。実数の範囲内で考えたい場合、この定義には意味がない。この定義を使いたければ、何らかの形で実数を拡張する必要がある。

第二に、右側から極限に漸近するのは恣意的である。左側から漸近して極限を求めた場合、a が正の場合に テンプレート:分数 が −∞ となり、a が負の場合に +∞ となる。これを等式で表すと次のようになる。

<math>+\infty = \frac{1}{0} = \frac{1}{-0} = -\frac{1}{0} = -\infty</math>

このように、+∞ と −∞ が等しいことになってしまい、これではあまり意味がない。これを意味のある拡張とするには、「符号のない無限大」という概念を導入するしかない。

実数に、正負の区別が有る、あるいは無い、無限大が含まれるように拡張したものが拡大実数である。アフィン拡大実数では区別が有り、射影拡大実数では区別が無い(無限遠点)。

物理学においてはブラックホールや宇宙の始まりを考察するさいに質量/体積(密度)の体積が0となる特異点が発生するためゼロ除算による無限大発散の難問が生じている。この場合質量・体積は正であるため正の無限大への発散となる。

直接のゼロ除算以外では、三角関数のtan90°などの計算においても、同様の問題が生じてしまう。

テンプレート:分数 についても、極限

<math> \lim_{(a,b) \to (0,0)} {a \over b} </math>

は存在しないため、うまく定義できない。さらに一般に、x が 0 に漸近すると共に f(x) も g(x) も 0 に漸近するとして、極限

<math> \lim_{x \to 0} {f(x) \over g(x)} </math>

を考えても、これは任意の値に収束する可能性もあるし、収束しない可能性もある。したがって、この手法では テンプレート:分数 について意味のある定義は得られない。

コンピュータにおけるゼロ除算

ファイル:SpeedCrunch divide by zero.png
SpeedCrunchという電卓ソフトでゼロ除算を実行したときの様子。エラーが表示されている。

現在のほとんどのコンピュータでサポートされているIEEE 754 浮動小数点に関する標準規格では、全ての浮動小数点演算を定義している。ゼロ除算も例外ではなく、どういう値になるかが定義されている。IEEE 754の定義によれば、a/0 で a が正の数であれば、除算の結果は正の無限大となり、a が負の数であれば負の無限大となる。そして、a も 0 であった場合、除算結果は NaNnot a number、数でない)となる。IEEE 754 には −0 も定義されているため、0 の代わりに −0 で除算をした場合は、上述の符号が反転する。

整数のゼロ除算は通常、浮動小数点とは別に処理される。というのは整数ではゼロ除算の結果を表す方法がないためである。 多くのプロセッサは整数のゼロ除算を実行しようとすると例外を発生させる。この例外に対する対処がなされていない場合、ゼロ除算を実行しようとしたプログラムは強制終了(アボート)される。これは、ゼロ除算がエラーと解釈されるためで、エラーメッセージが表示されることも多い。

1997年、民生品の応用を研究していたアメリカ海軍タイコンデロガ級ミサイル巡洋艦ヨークタウンを改造して主機のガスタービンエンジンの制御にマイクロソフト社ソフトウェアを採用したが、試験航行中にデータベースのゼロ除算が発生してソフトウェアが例外を返し、結果として主機が停止、回復するまでカリブ海を2時間半ほど漂流する事態となっている[2]

ポップカルチャー

脚注

テンプレート:Reflist

参考文献

関連項目

外部リンク

  • The Last Denominator - 「OH SHI-」を題材にしたショートフィルム。ゼロ除算をしようとした直後に地球が爆発する。
テンプレート:Good articlede:Null#Division
  1. テンプレート:Cite web
  2. テンプレート:Cite news
  3. テンプレート:Cite web
  4. テンプレート:Cite web