ゼロ除算

数学においてゼロ除算（ゼロじょさん、ゼロじょざん、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 = +∞」のような式は、極限計算の定義を表現するシンボルとして理解できるだけで、ある種の除算の値についての定義可能性を示唆するものではない。 コンピュータの整数演算においては多くの場合、無限大に相当する値は定義されておらず《エラー》が発生し、またいくつかの除算アルゴリズムの単純な実装（取尽し法など）を採用しており《無限ループ》に陥りシステムが実質的に停止してしまう。浮動小数点数の国際標準規格のIEEE 754に浮動小数点の演算の結果 戻される値（戻されるべき値）の定義がされているが、システムの挙動はその種類により異なる。 →#コンピュータにおけるゼロ除算 一般的な電卓（普通電卓または事務用電卓）では、ゼロ除算の場合、画面には「E 0.」のように表示される。 計算尺では、対数尺には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⁄0 = ∞ と定義することで問題を解決しようとした。この定義は一見正しいようにも見えるが、この定義に従うとパラドックスに陥る（後述の「ゼロ除算と極限」も参照）ため、結局これも失敗に終わった。このパラドックスは近年まで考察されなかった。 ゼロ除算を数学的に扱う自然な方法は、まず除算を他の算術操作で定義することで得られる。整数、有理数、実数、複素数の一般的算術規則では、ゼロ除算は未定義である。体の公理体系に従う数学的体系では、ゼロ除算は未定義のままとされなければならない。その理由は、除法が乗法の逆演算として定義されているためである。つまり、a⁄b の値は、bx = a という方程式を x について解いたときに値が一意に定まる場合のみ存在する。さもなくば、値は未定義のままとされる。（ただし数学基礎論などでは全域的な関数を扱う議論が除法を含めても適用できるよう便宜的に a⁄0 = 0 と定義しておくことはある。あるいは a ÷ 0 = a と定義しておくこともある。） 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とｙに１を代入すると 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とｙに１を代入すると 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} 直観的に 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 は定義されない。 ゼロ除算をしたときのコンピュータの挙動は整数演算の場合と浮動小数点数演算の場合で異なる。したがって、整数演算の場合と浮動小数点数演算の場合で分けて説明する。 整数演算の場合 コンピュータにおける整数のゼロ除算では結果を表す方法がなく、多くのプロセッサは整数のゼロ除算を実行しようとすると 《例外》 を発生させる。(なおIntel 8086の場合、商がレジスタに格納できる数値を越えている場合にもゼロ除算した時と同様の例外が発生する)。この例外に対する対処がなされていない場合、ゼロ除算を実行しようとしたプログラムは強制終了（アボート）されてしまう。これは、ゼロ除算が 《 エラー 》 と解釈されるためで、エラーメッセージが表示されることも多い。 浮動小数点演算の場合 他方、浮動小数点演算の場合は、次のようなことが起きる。 《エラー》で処理を中断する 無限を意味するInfinity(無限大)という特殊な数を返す。 非数（NaN、Not a Number）を返す NULLという特殊な値を返す なおゼロ除算が生じた場合にそのマシンで表現可能な最大値に + /- の符号も考慮した上で置き換えて処理を続行することを推奨している本もある。 なお、浮動小数点数演算の規格であるIEEE 754では、全ての浮動小数点数演算が定義されており、ゼロ除算も例外ではなく、どういう値になるか（どういう値を返すべきか）が定義されている。IEEE 754の定義によれば、a/0 で a が正の数であれば、除算の結果は正の無限大となり、a が負の数であれば負の無限大となる。そして、a も 0 であった場合、除算結果は NaN（not a number、数でない）となる。IEEE 754 には −0 も定義されているため、0 の代わりに −0 で除算をした場合は、上述の符号が反転する。 IEEE 754は現在、ほとんどのコンピュータでサポートされている。 1997年、民生品の応用を研究していたアメリカ海軍は、タイコンデロガ級ミサイル巡洋艦「ヨークタウン」を改造して主機のガスタービンエンジンの制御にマイクロソフトのソフトウェアを採用したが、試験航行中にデータベースのゼロ除算が発生してソフトウェアが《例外》を返し、結果として主機が停止、回復するまでカリブ海を2時間半ほど漂流する事態となってしまった。 "OH SHI-"―ゼロ除算がコンピュータや電卓でエラーを引き起こす様を宇宙の終焉などに結びつけた英語の口語表現[要出典]。「Oh shit!」と最後まで言い切る前に宇宙は破壊されてしまう。 テッド・チャンの短篇に『ゼロで割る』（w:Division by Zero (short story)）という題名のものがある。 北米発祥のジョーク、チャック・ノリス・ファクトによれば、「チャック・ノリスはゼロ除算ができる」という真実（ファクト）がある。 マジック:ザ・ギャザリングのストリクスヘイヴン：魔法学院では、同名のカードが打ち消し呪文として登場する。 [脚注の使い方] ^ 処理速度やリアルタイム性が求められる制御装置、組み込みシステムなどではしばしば、動作を遅くさせがちな浮動小数点演算は避け、あえて整数演算をさせる。 ^ 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 ^ 解析マニュアル0 1983, p. 342-343. ^ 田辺 1983, p. 269. ^ 株式会社インプレス (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 ^ a b c 皆本 2002, p. 73-74. ^ 皆本 2002, p. 71. ^ “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日閲覧。 Jakub Czajko (July 2004) "On Cantorian spacetime over number systems with division by zero", Chaos, Solitons and Fractals, volume 21, number 2, pages 261—271. Ben Goldacre. “Maths Professor Divides By Zero, Says BBC”. 2008年5月8日閲覧。ゼロ除算の結果を nullity という新たな記号で表す方法が提唱された。 皆本, 晃弥「IEEE754と数値計算 : 浮動小数点演算の特徴とは？」『九州大学情報基盤センター広報 : 全国共同利用版』第2巻第1号、九州大学情報基盤センター、2002年3月、63-84頁、doi:10.15017/1470409、2021年3月19日閲覧。  川村 清『PC-9801解析マニュアル[第0巻]』秀和システムトレーディング株式会社、1983年6月30日。  田辺皓正編著『マイクロコンピュータシリーズ15 8086マイクロコンピュータ』丸善株式会社、1983年4月30日。  漸近線 0の0乗 輪 (数学) Weisstein, Eric W. "Division by Zero". mathworld.wolfram.com (英語). The Last Denominator - 「OH SHI-」を題材にしたショートフィルム。ゼロ除算をしようとした直後に地球が爆発する。