この記事は良質な記事に選ばれています

ゼロ除算

提供: miniwiki
2018/8/19/ (日) 17:21時点におけるAdmin (トーク | 投稿記録)による版 (1版 をインポートしました)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)
移動先:案内検索

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

コンピュータなど計算機においても、ゼロ除算に対するふるまいは様々である。たとえば浮動小数点数の扱いに関する標準であるIEEE 754では、数とは異なる無限大を表現するものが結果となる。[1] しかし、浮動小数点以外の数値型(整数型など)においては多くの場合無限大に相当する値は定義されておらず、またいくつかの除算アルゴリズムの単純な実装(取尽し法など)においては無限ループに陥りかねないなど演算処理の中でも特異なふるまいとなるため、演算前にゼロ除算例外を発生させることで計算そのものを行わせないか、便宜上型が表現できる最大の数値、あるいはゼロを返すなどの特殊な処理とされる場合が多い(後述)

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

算数的解釈

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

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

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

初期の試み

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

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

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

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

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

代数学的解釈

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

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

ゼロ除算に基づく誤謬

ゼロ除算を代数学的記述に用いて、例えば以下のように 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]

この誤謬は、暗黙のうちに 00 = 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 = 1/x のグラフ。x が 0 に近づくと、y絶対値は無限大に近づく。

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

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

[math]\lim_{b \to 0+} \frac{a}{b} =+\infty[/math]

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

[math]\lim_{b \to 0+} \frac{a}{b} =-\infty[/math]

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

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

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

[math]+\infty =\frac{1}{0} =\frac{1}{-0} =-\frac{1}{0} =-\infty[/math]

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

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

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

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

0/0 についても、極限

[math]\lim_{(a,b)\to (0,0)} \frac{a}{b} [/math]

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

[math]\lim_{x\to 0} \frac{f(x)}{g(x)}[/math]

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

リーマン球面

ファイル:Stereographic projection in 3D.png
リーマン球面は、複素平面立体射影により球面に射影したものとして視覚化できる。

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

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

ファイル: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時間半ほど漂流する事態となっている[3]

ポップカルチャー

脚注

  1. IEEE Computer Society (August 29, 2008). IEEE Standard for Floating-Point Arithmetic. IEEE. doi:10.1109/IEEESTD.2008.4610935. ISBN 978-0-7381-5753-5. IEEE Std 754-2008. http://ieeexplore.ieee.org/servlet/opac?punumber=4610933. 
  2. J J O'Connor and E F Robertson (2000年11月). “Zero”. . 2008閲覧.
  3. “Sunk by Windows NT”. (1998年7月24日). http://www.wired.com/science/discoveries/news/1998/07/13987 . 2008閲覧. 
  4. oh shi-”. Urban Dicthionary. . 2011閲覧.
  5. Chuck Norris can divide by zero”. Chuck Norris Facts. . 2011閲覧.

参考文献

関連項目

外部リンク