概要
数学 においてゼロ除算 (ゼロじょさん、ゼロじょざん、0除算、英語 : division by zero )とは、0 で除す割り算 のことである。このような除算は、除される数をa とすると、形式的に a / 0 と書くことができるが、このような式を矛盾なく定義することはできない。一方、コンピュータプログラムの計算においてゼロ除算が発生した場合、大抵はエラー となって計算処理が中断されてしまう為、一般的には0による除算が起こらないように設計される。
陥りやすい誤解
現代数学の観点では、いかなるアプローチから定義を試みようとも必ず破綻に至る。結局、「値を定義し得ないため、計算は不可能である 」と理解する他ない概念であり、それ以上の議論によって数学的に有用な結果が得られることは期待できない。しかし、概念自体は極めて初等的な知識で捉えることができるため、しばしば数学的原則を前提としていない議論や独自な解釈が展開されることがある。そのような議論や解釈はいずれも論理的破綻を含むか信頼性のある根拠を伴わない為、学術的な評価の余地をほとんど有しない。
ゼロ除算の定義可能性に関する誤った理解の典型としては、例えば
lim
x
→ → -->
+
0
1
x
{\displaystyle \lim _{x\to +0}{\frac {1}{x}}}
のような極限 が通常「+∞」という記号で表現されることから、「ゼロ除算の値を∞で定義することができる。」などと誤解し、これを起点として、ある種の集合においてはゼロ除算の定義可能性が排除されない、という旨の解釈を展開するケースである。すなわち、「
lim
x
→ → -->
+
0
1
x
{\displaystyle \lim _{x\to +0}{\frac {1}{x}}}
= +∞」のような、極限についての単なる「記号的な表現式」を「等式」(1/0 = +∞)として成立させるために定義を拡張しようと試みるものであるが、いずれも基礎的な観点において破綻を招いてしまい、結局、ゼロ除算の定義可能性を生み出すことには繋がらない。例えば、実数体(または複素数体)に無限遠点 を付加した集合におけるゼロ除算の定義可能性を議論する解釈については、無限遠点の付加によってそれらの集合の代数構造が破壊される(すなわち、既存の代数構造が維持できない)ことが直ちに確認できるため、除算はおろか加法や乗法という最低限の演算すら良く定義されない集合であるという事実に至る。結局、「1/0 = +∞」のような式は、極限計算の定義を表現するシンボルとして理解できるだけで、ある種の除算の値についての定義可能性を示唆するものではない。
身近な例
コンピュータ の整数演算[ 注釈 1] においては多くの場合、無限大に相当する値は定義されておらず《エラー》が発生し、またいくつかの除算アルゴリズムの単純な実装(取尽し法など)を採用しており《無限ループ》に陥りシステムが実質的に停止してしまう。浮動小数点数の国際標準規格のIEEE 754 に浮動小数点の演算の結果 戻される値(戻されるべき値)の定義がされている[ 1] が、システムの挙動はその種類により異なる。
→#コンピュータにおけるゼロ除算
一般的な電卓 (普通電卓または事務用電卓)では、ゼロ除算の場合、画面には「E 0.」のように表示される。
計算尺 では、対数尺には0に相当する位置が存在しない(無限の彼方である)ため計算不可能である。
算数的解釈
日本の小学校における算数 では、除算は何らかの物の集合 をそれぞれ同数になるように分けることで説明される[ 2] 。例えば、6個のリンゴを3人で分ける場合、各人は2個ずつのリンゴを受け取ることになる[ 3] 。これは 6 ÷ 3 = 2個の簡単な説明である。この考え方を使ってゼロ除算を説明できる。6個のリンゴを0人で分けるとする。これはすなわちリンゴを受け取る人がいないということを意味する。その場合、それぞれ何個ずつのリンゴを受け取るか?という問いは、そもそも問題の前提が破綻しており答えは定義できない。すなわち6 ÷ 0 を計算しようとしても、定義できないのである。以上のように算数レベルで考える場合、ゼロ除算は無意味または未定義となる[ 4] 。
ゼロ除算の未定義性を理解する別の方法として、減法 の繰り返し適用という考え方がある[ 5] 。すなわち、0になるまで被除数から除数を引き続けるのである。例えば96を8で割る場合、96-8-8-8-...=0となるまで8は12回引くことができるので、96÷8=12とする[ 6] 。ゼロ除算で同様の例を考える。例えば卵が6個入っている籠から定期的に一定個数の卵を取り出して籠を空にするとする。このとき毎回0個ずつ取り出す、すなわち籠に手を入れるけれども1個も取り出さないという操作を考えると、この取り出す操作をどれだけ繰り返しても籠を空にすることはできない。つまり0で割る結果は未定義であるとする説明がある[ 4] 。
初期の試み
ブラフマグプタ が著した『ブラーマ・スプタ・シッダーンタ 』は、0 を数として定義し、その演算結果も定義している著作としては最初期のものである[ 7] 。しかし、ブラフマグプタによるゼロ除算の定義に従うと、代数的不合理が生じることを簡単に証明できる。ブラフマグプタによれば、次の通りである。
正であろうと負であろうと、ゼロで割ると、分母がゼロの分数になる。ゼロを割ると、割る数が正だろうと負だろうと、ゼロが分子にある分数によって表せ、分母は有限の量である……ゼロをゼロで割ってもゼロである
—
ブラフマグプタ、『ブラーマ・スプタ・シッダーンタ』、ロバート・カプラン、松浦俊輔 (訳)『ゼロの博物誌』[ 8]
830年 、マハーヴィーラ はブラフマグプタの間違いを著書『ガニタ・サーラ・サングラハ』で「数はゼロで割っても変化しない」と訂正しようとしたが、これも失敗に終わった[ 7] 。
バースカラ2世 は n ⁄0 = ∞ と定義することで問題を解決しようとした。この定義は一見正しいようにも見えるが、この定義に従うとパラドックスに陥る(後述の「ゼロ除算と極限 」も参照)ため、結局これも失敗に終わった。このパラドックスは近年まで考察されなかった[ 9] 。
代数学的解釈
ゼロ除算を数学的に扱う自然な方法は、まず除算を他の算術操作で定義することで得られる。整数 、有理数 、実数 、複素数 の一般的算術規則では、ゼロ除算は未定義である。体 の公理体系に従う数学的体系では、ゼロ除算は未定義のままとされなければならない。その理由は、除法 が乗法 の逆演算として定義されているためである。つまり、a ⁄b の値は、bx = a という方程式を x について解いたときに値が一意に定まる場合のみ存在する。さもなくば、値は未定義のままとされる。(ただし数学基礎論 などでは全域的 な関数を扱う議論が除法を含めても適用できるよう便宜的に a ⁄0 = 0 と定義しておくことはある[ 10] 。あるいは a ÷ 0 = a と定義しておくこともある[ 11] 。)
b = 0 のとき、方程式 bx = a は 0x = a または単に 0 = a と書き換えられる。つまりこの場合、方程式 bx = a は a が 0 でないときには解がなく、a が 0 であれば任意の x が解となりうる。いずれにしても解は一意に定まらず、a ⁄b は未定義となる。逆に、体 においては a ⁄b は b がゼロでないとき常に一意に定まる。
ゼロ除算に基づく誤謬
ゼロ除算を代数学 的記述に用いて、例えば以下のように 1 = 2 のような誤った証明を導くことができる。
以下を前提とする。
0
× × -->
1
=
0
{\displaystyle 0\times 1=0\quad }
0
× × -->
2
=
0
{\displaystyle 0\times 2=0\quad }
このとき、次が成り立つ。
0
× × -->
1
=
0
× × -->
2
{\displaystyle 0\times 1=0\times 2}
両辺をゼロ除算すると、次のようになる。
1
=
2
{\displaystyle 1=2\quad }
この誤謬 は、暗黙のうちに 0 / 0 =1 であるかのように扱っていることから生じる。
上の証明が間違いであることは多くの人が気づくと思われるが、これをもっと巧妙に表現すると間違いを分かりにくくできる。例えば、1 を x と y に置き換え、ゼロを x − y 、2 を x + y で置き換える。すると上記の証明は次のようになる。
0
× × -->
1
=
0
{\displaystyle 0\times 1=0\quad }
のとき
(
0
)
× × -->
(
1
)
=
0
{\displaystyle (0)\qquad \times (1)=0}
(
x
− − -->
y
)
× × -->
(
x
)
=
(
x
− − -->
y
)
x
=
0
{\displaystyle (x-y)\times (x)=(x-y)x=0}
(
x
− − -->
y
)
x
=
x
2
− − -->
x
y
=
0
{\displaystyle (x-y)x=x^{2}-xy=0}
…①
また、xとyに1を代入すると
x
2
− − -->
x
y
=
(
1
)
2
− − -->
(
1
× × -->
1
)
=
1
− − -->
1
=
0
{\displaystyle x^{2}-xy=(1)^{2}-(1\times 1)=1-1=0}
0
× × -->
2
=
0
{\displaystyle 0\times 2=0\quad }
のとき
(
0
)
× × -->
(
2
)
=
0
{\displaystyle (0)\times (2)=0}
(
x
− − -->
y
)
× × -->
(
x
+
y
)
=
(
x
− − -->
y
)
(
x
+
y
)
=
0
{\displaystyle (x-y)\times (x+y)=(x-y)(x+y)=0}
(
x
− − -->
y
)
(
x
+
y
)
=
x
2
− − -->
y
2
=
0
{\displaystyle (x-y)(x+y)=x^{2}-y^{2}=0}
…②
また、xとyに1を代入すると
x
2
− − -->
y
2
=
(
1
)
2
− − -->
(
1
)
2
=
0
{\displaystyle x^{2}-y^{2}=(1)^{2}-(1)^{2}=0}
①と②の各左辺より、
(
x
− − -->
y
)
x
=
(
x
− − -->
y
)
(
x
+
y
)
{\displaystyle (x-y)x=(x-y)(x+y)}
両辺を x − y で割ると次のようになる。
x
=
x
+
y
{\displaystyle x=x+y}
x = y = 1 であったからこれを代入すると、次のようになる。
1
=
2
{\displaystyle 1=2}
解析学的解釈
ゼロ除算と極限
関数 y = 1 / x のグラフ。x が 0 に近づくと、y の絶対値 は無限大に近づく。
直観的に a / 0 は a / b で 正数b を 0 に漸近 させたときの極限 を考えることで定義されるように見える。
a が正の数の場合、次のようになる。
lim
b
→ → -->
0
+
a
b
=
+
∞ ∞ -->
{\displaystyle \lim _{b\to 0+}{\frac {a}{b}}=+\infty }
a が負の数の場合、次のようになる。
lim
b
→ → -->
0
+
a
b
=
− − -->
∞ ∞ -->
{\displaystyle \lim _{b\to 0+}{\frac {a}{b}}=-\infty }
したがって、a が正のとき a / 0 を +∞、a が負のとき −∞ と定義できるように思われる。しかし、この定義には以下の2つの問題点があるため、こういう定義はできない。
第一に、正と負の無限大 は実数 ではない。実数の範囲内で考えたい場合、この定義には意味がない。この定義を使いたければ、何らかの形で実数を拡張する必要がある。
第二に、右側から極限に漸近するのは恣意的である。左側から漸近して極限を求めた場合、a が正の場合に a ⁄0 が −∞ となり、a が負の場合に +∞ となる。これを等式で表すと次のようになる。
+
∞ ∞ -->
=
1
0
=
1
− − -->
0
=
− − -->
1
0
=
− − -->
∞ ∞ -->
{\displaystyle +\infty ={\frac {1}{0}}={\frac {1}{-0}}=-{\frac {1}{0}}=-\infty }
このように、+∞ と −∞ が等しいことになってしまい、これではあまり意味がない。これを意味のある拡張とするには、「符号のない無限大」という概念を導入するしかない。
実数に、正負の区別が有る、あるいは無い、無限大が含まれるように拡張したものが拡大実数 である。アフィン拡大実数では区別が有り、射影拡大実数では区別が無い(無限遠点 )。
物理学 においてはブラックホールや宇宙の始まりを考察する際に質量/体積(密度)の体積が 0 となる特異点 が発生するためゼロ除算による無限大発散の難問が生じている。この場合質量・体積は正であるため正の無限大への発散となる。
直接のゼロ除算以外では、三角関数 の tan 90° などの計算においても、同様の問題が生じてしまう。
0 / 0 についても、極限
lim
(
a
,
b
)
→ → -->
(
0
,
0
)
a
b
{\displaystyle \lim _{(a,b)\to (0,0)}{\frac {a}{b}}}
は存在しないため、うまく定義できない。さらに一般に、x が 0 に漸近すると共に f (x ) も g (x ) も 0 に漸近するとして、極限
lim
x
→ → -->
0
f
(
x
)
g
(
x
)
{\displaystyle \lim _{x\to 0}{\frac {f(x)}{g(x)}}}
を考えても、これは任意の値に収束する可能性もあるし、収束しない可能性もある。したがって、この手法では 0 ⁄0 について意味のある定義は得られない。
リーマン球面は、複素平面 を立体射影 により球面に射影したものとして視覚化できる。
リーマン球面
リーマン球面 は、複素平面に無限遠点 ∞ の1点を付け加えて得られるもの C ∪ {∞} である。上記実射影直線(射影拡大実数)の複素数版とも考えられる。リーマン球面は複素解析 において重要な概念であり、演算は例えば 1/0 = ∞、1/∞ = 0、などとなるが、∞+∞ や 0/0 は定義されない[ 12] 。
コンピュータにおけるゼロ除算
SpeedCrunchという電卓ソフトでゼロ除算を実行したときの様子。エラーが表示されている。
ゼロ除算をしたときのコンピュータの挙動は整数演算の場合と浮動小数点数 演算の場合で異なる[ 13] 。したがって、整数演算の場合と浮動小数点数演算の場合で分けて説明する。
整数演算の場合
コンピュータにおける整数のゼロ除算では結果を表す方法がなく、多くのプロセッサは整数のゼロ除算を実行しようとすると 《例外 》 を発生させる。(なおIntel 8086 の場合、商がレジスタに格納できる数値を越えている場合にもゼロ除算した時と同様の例外が発生する)。この例外に対する対処がなされていない場合、ゼロ除算を実行しようとしたプログラムは強制終了 (アボート )されてしまう 。これは、ゼロ除算が 《 エラー 》 と解釈されるためで、エラーメッセージが表示されることも多い[ 16] 。
浮動小数点演算の場合
他方、浮動小数点演算の場合は、次のようなことが起きる。
なおゼロ除算が生じた場合にそのマシンで表現可能な最大値に + /- の符号も考慮した上で置き換えて処理を続行することを推奨している本もある[ 24] 。
なお、浮動小数点数演算の規格であるIEEE 754 では、全ての浮動小数点数演算が定義されており、ゼロ除算も例外ではなく、どういう値になるか(どういう値を返すべきか)が定義されている。IEEE 754の定義によれば、a /0 で a が正の数であれば、除算の結果は正の無限大となり、a が負の数であれば負の無限大となる。そして、a も 0 であった場合、除算結果は NaN (not a number 、数でない)となる。IEEE 754 には −0 も定義されているため、0 の代わりに −0 で除算をした場合は、上述の符号が反転する。
IEEE 754は現在、ほとんどのコンピュータでサポートされている。
コンピュータのゼロ除算が原因で実際に現実世界で起きた事態
1997年 、民生品の応用を研究していたアメリカ海軍 は、タイコンデロガ級ミサイル巡洋艦 「ヨークタウン 」を改造して主機のガスタービンエンジンの制御 にマイクロソフト のソフトウェアを採用したが、試験航行中にデータベース のゼロ除算が発生してソフトウェアが《例外》を返し、結果として主機が停止、回復するまでカリブ海 を2時間半ほど漂流 する事態となってしまった[ 27] 。
ポップカルチャー
脚注
^ 処理速度やリアルタイム性が求められる制御 装置、組み込みシステム などではしばしば、動作を遅くさせがちな浮動小数点演算は避け、あえて整数演算をさせる。
出典
^ 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 .
^ “【算数編】小学校学習指導要領(平成29年告示)解説 ” (pdf). 文部科学省. p. 146. 2021年3月18日 閲覧。
^ Watson, Jane M. (1991). “Models to Show the Impossibility of Division by Zero” (英語). School Science and Mathematics 91 (8): 373–376. doi :10.1111/j.1949-8594.1991.tb12123.x . ISSN 1949-8594 . https://onlinelibrary.wiley.com/doi/abs/10.1111/j.1949-8594.1991.tb12123.x .
^ a b Duncan, Hilda F. (1971-10-01). “Division by zero” (英語). The Arithmetic Teacher 18 (6): 381–382. doi :10.5951/AT.18.6.0381 . https://pubs.nctm.org/view/journals/at/18/6/article-p381.xml .
^ Tsamir, Pessia; Sheffer, Ruth (2000-09-01). “Concrete and formal arguments: The case of division by zero” (英語). Mathematics Education Research Journal 12 (2): 92–106. doi :10.1007/BF03217078 . ISSN 2211-050X . https://doi.org/10.1007/BF03217078 .
^ 高橋 丈夫 (2017). “整数の除法の導入時における児童の「測定の考え」の様相に関する一考察”. 日本数学教育学会誌 99 (12): 2-11. doi :10.32296/jjsme.99.12_2 .
^ a b Kaplan, Robert (1999). The Nothing That Is: A Natural History of Zero (英語). New York: Oxford University Press. pp. 68–75 . ISBN 978-0-19-514237-2 。
^ ロバート・カプラン、松浦俊輔(訳)、2002、『ゼロの博物誌』、河出書房新社 ISBN 978-4-309-25157-8 p. 107
^ J J O'Connor and E F Robertson (November 2000). "Zero" . 2008年11月16日閲覧 。
^ 田中一之 『数学基礎論序説』(第二版)裳華房 、2021年、199頁。ISBN 978-4-7853-1575-7 。
^ 高橋正子『コンピュータと数学』朝倉書店 、2016年、iv, 19, 49頁。ISBN 978-4-254-11752-3 。
^ “How to Divide by Zero ” (英語). 1 divided by 0 . 2022年2月17日 閲覧。
^ 山田祥寛『独習C# 第5版』2022、p.93
^ 株式会社インプレス (2022年7月27日). “Androidの「電卓」アプリはゼロで割ると答えが「ん」になる(ことがある)/皆さんの端末ではどうですか?【やじうまの杜】 ”. 窓の杜 . 2022年7月27日 閲覧。
^ 沼田哲史『C言語 本格トレーニング: 基礎から応用までを徹底解説!』2020、p.13
^ 『現場ですぐに使える! Python プログラミング逆引き大全357の極意』秀和システム、2022、p.117
^ a b 山田 祥寛『独習C# 新版』翔泳社、2017、「3.1.4 除算とデータ型」の章。
^ 山田 祥寛『独習Ruby 新版』翔泳社、2021、p.84
^ 山田祥寛『独習Java 新版』翔泳社、2019、p.86
^ Joe Celko『プログラマのためのSQL 第4版』翔泳社、2013, p.214
^ 『SQL Hacks: データベースを自由自在に操るテクニック』オライリー・ジャパン、2007、p.108)
^ 日本規格協会『情報処理: ソフトウェア編』(JIS ハンドブック) 1990、p.622
^ “Sunk by Windows NT” . Wired News. (1998年7月24日). http://www.wired.com/science/discoveries/news/1998/07/13987 2008年11月16日 閲覧。
^ “oh shi- ”. Urban Dicthionary. 2011年10月11日 閲覧。
^ Chiang, Ted (2015). Stories of Your Life and Others (英語). Picador. ISBN 978-1-4472-8923-4 。
^ 邦題は https://iss.ndl.go.jp/books/R100000002-I000004238766-00 で確認できる。
^ “Chuck Norris can divide by zero ”. Chuck Norris Facts. 2011年10月11日 閲覧。
^ “ゼロ除算 ゼロ除算|カードギャラリー|マジック:ザ・ギャザリング 日本公式ウェブサイト ”. 2023年11月25日 閲覧。
参考文献
関連項目
外部リンク