ゼロ除算
ゼロ除算(ゼロじょさん、0除算、division by zero)とは、0で除す割り算のことである。このような除算は除される数をaとするならば、形式上は aと書くことができるが、数学において、このような式を矛盾なく定義することはできない。コンピュータの数値計算においてゼロ除算が発生した場合、無限大やゼロ除算を意味するシンボルで置き換える、例外として処理するなどの対応が取られるか、発生した時点で処理が破綻する(システムエラーとなる)。
現代数学の観点では、いかなるアプローチから定義を試みようとも必ず破綻に至る。結局、「値を定義し得ないため、計算は不可能である」と理解する他ない概念であり、それ以上の議論によって数学的に有用な結果が得られることは期待できない。しかし、概念自体は極めて初等的な知識で捉えることができるため、しばしば数学的原則を前提としていない議論や独自な解釈が展開されることがある。そのような議論や解釈はいずれも論理的破綻を含むか信頼性のある根拠を伴わない為、学術的な評価の余地をほとんど有しない。
ゼロ除算の定義可能性に関する誤った理解の典型としては、例えば\lim_{x \to +0}\frac{1}{x}のような極限が通常「+∞」という記号で表現されることから、「ゼロ除算の値を∞で定義することができる。」などと誤解し、これを起点として、ある種の集合においてはゼロ除算の定義可能性が排除されない、という旨の解釈を展開するケースである。すなわち、「\lim_{x \to +0}\frac{1}{x} = +∞」のような、極限についての単なる「記号的な表現式」を「等式」(1/0 = +∞)として成立させるために定義を拡張しようと試みるものであるが、いずれも基礎的な観点において破綻を招いてしまい、結局、ゼロ除算の定義可能性を生み出すことには繋がらない。例えば、実数体(または複素数体)に無限遠点を付加した集合におけるゼロ除算の定義可能性を議論する解釈については、無限遠点の付加によってそれらの集合の代数構造が破壊される(すなわち、既存の代数構造が維持できない)ことが直ちに確認できるため、除算はおろか加法や乗法という最低限の演算すら良く定義されない集合であるという事実に至る。結局、「1/0 = +∞」のような式は、極限計算の定義を表現するシンボルとして理解できるだけで、ある種の除算の値についての定義可能性を示唆するものではない。
コンピュータなど計算機において、ゼロ除算は、浮動小数点数の扱いに関する標準であるIEEE 754では、数とは異なる無限大を表現するものが結果となる。 しかし、浮動小数点以外の数値型(整数型など)においては多くの場合無限大に相当する値は定義されておらず、またいくつかの除算アルゴリズムの単純な実装(取尽し法など)においては無限ループに陥りかねないなど演算処理の中でも特異なふるまいとなるため、演算前にゼロ除算例外を発生させることで計算そのものを行わせないか、便宜上型が表現できる最大の数値、あるいはゼロを返すなどの特殊な処理とされる場合が多い(後述)。
計算尺では、対数尺には0に相当する位置が存在しない(無限の彼方である)ため計算不可能である。
一般的な電卓(普通電卓または事務用電卓)では、ゼロ除算の場合、画面には「E 0.」のように表示される。
日本の小学校における算数では、除算は何らかの物の集合をそれぞれ同数になるように分けることで説明される。例えば、6個のリンゴを3人で分ける場合、各人は2個ずつのリンゴを受け取ることになる。これは 6 ÷ 3 = 2個の簡単な説明である。この考え方を使ってゼロ除算を説明できる。6個のリンゴを0人で分けるとする。これはすなわちリンゴを受け取る人がいないということを意味する。その場合、それぞれ何個ずつのリンゴを受け取るか?という問いは、そもそも問題の前提が破綻しており答えは定義できない。すなわち6 ÷ 0 を計算しようとしても、定義できないのである。以上のように算数レベルで考える場合、ゼロ除算は無意味または未定義となる。
ゼロ除算の未定義性を理解する別の方法として、減法の繰り返し適用という考え方がある。すなわち、0になるまで被除数から除数を引き続けるのである。例えば96を8で割る場合、96-8-8-8-...=0となるまで8は12回引くことができるので、96÷8=12とする。ゼロ除算で同様の例を考える。例えば卵が6個入っている籠から定期的に一定個数の卵を取り出して籠を空にするとする。このとき毎回0個ずつ取り出す、すなわち籠に手を入れるけれども1個も取り出さないという操作を考えると、この取り出す操作をどれだけ繰り返しても籠を空にすることはできない。つまり0で割る結果は未定義であるとする説明がある。
ブラフマグプタが著した『ブラーマ・スプタ・シッダーンタ』は、0を数として定義し、その演算結果も定義している著作としては最初期のものである。しかし、ブラフマグプタによるゼロ除算の定義に従うと、代数的不合理が生じることを簡単に証明できる。ブラフマグプタによれば、次の通りである。
830年、マハーヴィーラはブラフマグプタの間違いを著書『ガニタ・サーラ・サングラハ』で「数はゼロで割っても変化しない」と訂正しようとしたが、これも失敗に終わった。
バースカラ2世は n = ∞ と定義することで問題を解決しようとした。この定義は一見正しいようにも見えるが、この定義に従うとパラドックスに陥る(後述の「ゼロ除算と極限」も参照)ため、結局これも失敗に終わった。このパラドックスは近年まで考察されなかった。
ゼロ除算を数学的に扱う自然な方法は、まず除算を他の算術操作で定義することで得られる。整数、有理数、実数、複素数の一般的算術規則では、ゼロ除算は未定義である。体の公理体系に従う数学的体系では、ゼロ除算は未定義のままとされなければならない。その理由は、除法が乗法の逆演算として定義されているためである。つまり、a の値は、bx = a という方程式を x について解いたときに値が一意に定まる場合のみ存在する。さもなくば、値は未定義のままとされる。
b = 0 のとき、方程式 bx = a は 0x = a または単に 0 = a と書き換えられる。つまりこの場合、方程式 bx = a は a が 0 でないときには解がなく、a が 0 であれば任意の x が解となりうる。いずれにしても解は一意に定まらず、a は未定義となる。逆に、体においては a は b がゼロでないとき常に一意に定まる。
ゼロ除算を代数学的記述に用いて、例えば以下のように 1 = 2 のような誤った証明を導くことができる。
以下を前提とする。
0 \times 1 = 0\quad
0 \times 2 = 0\quad
このとき、次が成り立つ。
0 \times 1 = 0 \times 2
両辺をゼロ除算すると、次のようになる。
1 = 2\quad
この誤謬は、暗黙のうちに 0=1 であるかのように扱っていることから生じる。
上の証明が間違いであることは多くの人が気づくと思われるが、これをもっと巧妙に表現すると間違いを分かりにくくできる。例えば、1 を x と y に置き換え、ゼロを x − y、2 を x + y で置き換える。すると上記の証明は次のようになる。
0 \times 1 = 0\quadのとき
(0) \qquad \times(1) =0
(x-y)\times(x)= (x-y)x=0
(x-y)x= x^2-xy =0 …①
また、xとyに1を代入すると
x^2-xy =(1)^2-(1\times1)=1-1=0
0 \times 2 = 0\quadのとき
(0) \times(2) =0
(x-y)\times (x+y) =(x-y)(x+y) = 0
(x-y)(x+y) = x^2-y^2 = 0 …②
また、xとyに1を代入すると
x^2-y^2= (1)^2-(1)^2 = 0
①と②の各左辺より、
(x-y)x = (x-y)(x+y)
両辺を x − y で割ると次のようになる。
x = x+y
x = y = 1 であったからこれを代入すると、次のようになる。
1 = 2
直観的に a は a で 正数b を 0 に漸近させたときの極限を考えることで定義されるように見える。
a が正の数の場合、次のようになる。
\lim_{b \to 0+} \frac{a}{b} =+\infty
a が負の数の場合、次のようになる。
\lim_{b \to 0+} \frac{a}{b} =-\infty
したがって、a が正のとき a を +∞、a が負のとき −∞ と定義できるように思われる。しかし、この定義には以下の2つの問題点があるため、こういう定義はできない。
第一に、正と負の無限大は実数ではない。実数の範囲内で考えたい場合、この定義には意味がない。この定義を使いたければ、何らかの形で実数を拡張する必要がある。
第二に、右側から極限に漸近するのは恣意的である。左側から漸近して極限を求めた場合、a が正の場合に a が −∞ となり、a が負の場合に +∞ となる。これを等式で表すと次のようになる。
+\infty =\frac{1}{0} =\frac{1}{-0} =-\frac{1}{0} =-\infty
このように、+∞ と −∞ が等しいことになってしまい、これではあまり意味がない。これを意味のある拡張とするには、「符号のない無限大」という概念を導入するしかない。
実数に、正負の区別が有る、あるいは無い、無限大が含まれるように拡張したものが拡大実数である。アフィン拡大実数では区別が有り、射影拡大実数では区別が無い(無限遠点)。
物理学においてはブラックホールや宇宙の始まりを考察する際に質量/体積(密度)の体積が 0 となる特異点が発生するためゼロ除算による無限大発散の難問が生じている。この場合質量･体積は正であるため正の無限大への発散となる。
直接のゼロ除算以外では、三角関数の tan 90° などの計算においても、同様の問題が生じてしまう。
0 についても、極限
\lim_{(a,b)\to (0,0)} \frac{a}{b}
は存在しないため、うまく定義できない。さらに一般に、x が 0 に漸近すると共に f(x) も g(x) も 0 に漸近するとして、極限
\lim_{x\to 0} \frac{f(x)}{g(x)}
を考えても、これは任意の値に収束する可能性もあるし、収束しない可能性もある。したがって、この手法では 0 について意味のある定義は得られない。
リーマン球面は、複素平面に無限遠点 ∞ の1点を付け加えて得られるもの C ∪ {∞} である。上記実射影直線(射影拡大実数)の複素数版とも考えられる。リーマン球面は複素解析において重要な概念であり、演算は例えば 1/0 = ∞、1/∞ = 0、などとなるが、∞+∞ や 0/0 は定義されない。
現在のほとんどのコンピュータでサポートされているIEEE 754 浮動小数点に関する標準規格では、全ての浮動小数点演算を定義している。ゼロ除算も例外ではなく、どういう値になるかが定義されている。IEEE 754の定義によれば、a/0 で a が正の数であれば、除算の結果は正の無限大となり、a が負の数であれば負の無限大となる。そして、a も 0 であった場合、除算結果は NaN(not a number、数でない)となる。IEEE 754 には −0 も定義されているため、0 の代わりに −0 で除算をした場合は、上述の符号が反転する。ただしこれらは数学的に正確なものではなく、あくまで便宜的なものである。
整数のゼロ除算は通常、浮動小数点とは別に処理される。というのは整数ではゼロ除算の結果を表す方法がないためである。多くのプロセッサは整数のゼロ除算を実行しようとすると例外を発生させる(Intel_8086の場合、商がレジスタに格納できる数値を越えている場合にもゼロ除算した時と同様の例外が発生する)。この例外に対する対処がなされていない場合、ゼロ除算を実行しようとしたプログラムは強制終了(アボート)される。これは、ゼロ除算がエラーと解釈されるためで、エラーメッセージが表示されることも多い。
1997年、民生品の応用を研究していたアメリカ海軍は、タイコンデロガ級ミサイル巡洋艦「ヨークタウン」を改造して主機のガスタービンエンジンの制御にマイクロソフトのソフトウェアを採用したが、試験航行中にデータベースのゼロ除算が発生してソフトウェアが例外を返し、結果として主機が停止、回復するまでカリブ海を2時間半ほど漂流する事態となっている。
"OH SHI-"―ゼロ除算がコンピュータや電卓でエラーを引き起こす様を宇宙の終焉などに結びつけた英語の口語表現。「Oh shit!」と最後まで言い切る前に宇宙は破壊されてしまう。
テッド・チャンの短篇に『ゼロで割る (テッド・チャン)』(Division by Zero)という題名のものがある。
北米発祥のジョーク、チャック・ノリス・ファクトによれば、「チャック・ノリスはゼロ除算ができる」という真実(ファクト)がある。