ゼロ除算

ゼロ除算とは、0で除す割り算のことである。このような除算は除される数をa}}とするならば、形式上は Mvarと書くことができるが、数学において、このような式を矛盾なく定義することはできない。コンピュータにゼロ除算をさせようとした場合、処理が停止してしまうなど深刻なことが起きることがある。

1. 概説
-----

現代数学の観点では、いかなるアプローチから定義を試みようとも必ず破綻に至る。結局、「値を定義し得ないため、計算は不可能である」と理解する他ない概念であり、それ以上の議論によって数学的に有用な結果が得られることは期待できない。しかし、概念自体は極めて初等的な知識で捉えることができるため、しばしば数学的原則を前提としていない議論や独自な解釈が展開されることがある。そのような議論や解釈はいずれも論理的破綻を含むか信頼性のある根拠を伴わない為、学術的な評価の余地をほとんど有しない。

ゼロ除算の定義可能性に関する誤った理解の典型としては、例えばのような極限が通常「+∞」という記号で表現されることから、「ゼロ除算の値を∞で定義することができる。」などと誤解し、これを起点として、ある種の集合においてはゼロ除算の定義可能性が排除されない、という旨の解釈を展開するケースである。すなわち、「 = +∞」のような、極限についての単なる「記号的な表現式」を「等式」として成立させるために定義を拡張しようと試みるものであるが、いずれも基礎的な観点において破綻を招いてしまい、結局、ゼロ除算の定義可能性を生み出すことには繋がらない。例えば、実数体に無限遠点を付加した集合におけるゼロ除算の定義可能性を議論する解釈については、無限遠点の付加によってそれらの集合の代数構造が破壊されることが直ちに確認できるため、除算はおろか加法や乗法という最低限の演算すら良く定義されない集合であるという事実に至る。結局、「1/0 = +∞」のような式は、極限計算の定義を表現するシンボルとして理解できるだけで、ある種の除算の値についての定義可能性を示唆するものではない。

コンピュータの整数演算処理速度やリアルタイム性が求められる制御装置、組み込みシステムなどではしばしば、動作を遅くさせがちな浮動小数点演算は避け、あえて整数演算をさせる。}}においては多くの場合、無限大に相当する値は定義されておらず《エラー》が発生し、またいくつかの除算アルゴリズムの単純な実装を採用しており《無限ループ》に陥りシステムが実質的に停止してしまう。浮動小数点数の国際標準規格のIEEE 754に浮動小数点の演算の結果 戻される値の定義がされているが、システムの挙動はその種類により異なる。 →#コンピュータにおけるゼロ除算

一般的な電卓では、ゼロ除算の場合、画面には「E 0.」のように表示される。

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

2. 算数的解釈
--------

日本の小学校における算数では、除算は何らかの物の集合をそれぞれ同数になるように分けることで説明される。例えば、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で割る結果は未定義であるとする説明がある。

3. 初期の試み
--------

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

830年、マハーヴィーラはブラフマグプタの間違いを著書『ガニタ・サーラ・サングラハ』で「数はゼロで割っても変化しない」と訂正しようとしたが、これも失敗に終わった。

バースカラ2世は //n// = ∞ と定義することで問題を解決しようとした。この定義は一見正しいようにも見えるが、この定義に従うとパラドックスに陥るため、結局これも失敗に終わった。このパラドックスは近年まで考察されなかった。

4. 代数学的解釈
---------

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

//b// = 0 のとき、方程式 //bx// = //a// は 0//x// = //a// または単に 0 = //a// と書き換えられる。つまりこの場合、方程式 //bx// = //a// は //a// が 0 でないときには解がなく、//a// が 0 であれば任意の //x// が解となりうる。いずれにしても解は一意に定まらず、//a// は未定義となる。逆に、体においては //a// は //b// がゼロでないとき常に一意に定まる。

4.1. ゼロ除算に基づく誤謬
---------------

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

以下を前提とする。

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

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

この誤謬は、暗黙のうちに 0=1 であるかのように扱っていることから生じる。

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

のとき …①また、xとｙに１を代入すると
のとき …②また、xとｙに１を代入すると①と②の各左辺より、両辺を //x// − //y// で割ると次のようになる。//x// = //y// = 1 であったからこれを代入すると、次のようになる。

5. 解析学的解釈
---------

5.1. ゼロ除算と極限
------------

直観的に //a// は //a// で 正数//b// を 0 に漸近させたときの極限を考えることで定義されるように見える。

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

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

したがって、//a// が正のとき //a// を +∞、//a// が負のとき −∞ と定義できるように思われる。しかし、この定義には以下の2つの問題点があるため、こういう定義はできない。

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

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

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

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

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

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

0 についても、極限

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

を考えても、これは任意の値に収束する可能性もあるし、収束しない可能性もある。したがって、この手法では 0 について意味のある定義は得られない。

5.2. リーマン球面
-----------

リーマン球面は、複素平面に無限遠点 ∞ の1点を付け加えて得られるもの C   ∪   {∞} である。上記実射影直線の複素数版とも考えられる。リーマン球面は複素解析において重要な概念であり、演算は例えば 1/0 = ∞、1/∞ = 0、などとなるが、∞+∞ や 0/0 は定義されない。

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

ゼロ除算をしたときのコンピュータの挙動は整数演算の場合と浮動小数点演算の場合で異なる。したがって、整数演算の場合と浮動小数点演算の場合で分けて説明する。

整数演算の場合コンピュータにおける整数のゼロ除算では結果を表す方法がなく、多くのプロセッサは整数のゼロ除算を実行しようとすると 《例外》 を発生させる。。この例外に対する対処がなされていない場合、ゼロ除算を実行しようとしたプログラムは強制終了されてしまう。これは、ゼロ除算が 《 エラー 》 と解釈されるためで、エラーメッセージが表示されることも多い。

浮動小数点演算の場合他方、浮動小数点演算の場合は、次のようなことが起きる。

《エラー》で処理を中断する
無限を意味するInfinityという特殊な数を返す。
非数を返す
NULLという特殊な値を返す