ゼロ‐じょざん【ゼロ除算】
ゼロ除算
別名:0除算,ゼロディバイド
【英】division by zero, divide by zero
ゼロ(0)、もしくは、ゼロ(0)に極めて近い値で除算を行った場合、コンピュータ内部での数値表現がゼロもしくは表現不能な値になる。そのため、その後の処理が続行不能に陥り、プログラムの異常終了などの意図しない振る舞いを引き起こすことがある。
一般的に、プログラム上でゼロ除算が行われると、例外、もしくは、バグと認識される。ゼロで除算を行わないようにチェックを行えば簡単に防ぐことができるが、意外に見落としやすい。
ゼロ除算
(0除算 から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/12/31 01:44 UTC 版)
![]() |
この記事は検証可能な参考文献や出典が全く示されていないか、不十分です。(2017年2月)
|
数学においてゼロ除算(ゼロじょさん、ゼロじょざん、0除算、英語: division by zero)とは、0で除す割り算のことである。このような除算は、除される数をaとすると、形式的に a/0と書くことができるが、このような式を矛盾なく定義することはできない。一方、コンピュータプログラムの計算においてゼロ除算が発生した場合、大抵はエラーとなって計算処理が中断されてしまう為、一般的には0による除算が起こらないように設計される。
概要
陥りやすい誤解
現代数学の観点では、いかなるアプローチから定義を試みようとも必ず破綻に至る。結局、「値を定義し得ないため、計算は不可能である」と理解する他ない概念であり、それ以上の議論によって数学的に有用な結果が得られることは期待できない。しかし、概念自体は極めて初等的な知識で捉えることができるため、しばしば数学的原則を前提としていない議論や独自な解釈が展開されることがある。そのような議論や解釈はいずれも論理的破綻を含むか信頼性のある根拠を伴わない為、学術的な評価の余地をほとんど有しない。
ゼロ除算の定義可能性に関する誤った理解の典型としては、例えば
直観的に a/0 は a/b で 正数b を 0 に漸近させたときの極限を考えることで定義されるように見える。
a が正の数の場合、次のようになる。
-
リーマン球面は、複素平面を立体射影により球面に射影したものとして視覚化できる。 リーマン球面
リーマン球面は、複素平面に無限遠点 ∞ の1点を付け加えて得られるもの C ∪ {∞} である。上記実射影直線(射影拡大実数)の複素数版とも考えられる。リーマン球面は複素解析において重要な概念であり、演算は例えば 1/0 = ∞、1/∞ = 0、などとなるが、∞+∞ や 0/0 は定義されない[12]。
→「リーマン球面」も参照コンピュータにおけるゼロ除算
SpeedCrunchという電卓ソフトでゼロ除算を実行したときの様子。エラーが表示されている。 ゼロ除算をしたときのコンピュータの挙動は整数演算の場合と浮動小数点数演算の場合で異なる[13]。したがって、整数演算の場合と浮動小数点数演算の場合で分けて説明する。
- 整数演算の場合
コンピュータにおける整数のゼロ除算では結果を表す方法がなく、多くのプロセッサは整数のゼロ除算を実行しようとすると 《例外》 を発生させる。(なおIntel 8086の場合、商がレジスタに格納できる数値を越えている場合にもゼロ除算した時と同様の例外が発生する[14][15])。この例外に対する対処がなされていない場合、ゼロ除算を実行しようとしたプログラムは強制終了(アボート)されてしまう。これは、ゼロ除算が 《 エラー 》 と解釈されるためで、エラーメッセージが表示されることも多い[16]。
- 浮動小数点演算の場合
他方、浮動小数点演算の場合は、次のようなことが起きる。
- 《エラー》で処理を中断する[17][18]
- 無限を意味するInfinity(無限大)という特殊な数を返す[19][20]。
- 非数(NaN、Not a Number)を返す[19][21]
- NULLという特殊な値を返す[22][23]
なおゼロ除算が生じた場合にそのマシンで表現可能な最大値に + /- の符号も考慮した上で置き換えて処理を続行することを推奨している本もある[24]。
なお、浮動小数点数演算の規格であるIEEE 754では、全ての浮動小数点数演算が定義されており、ゼロ除算も例外ではなく、どういう値になるか(どういう値を返すべきか)が定義されている。IEEE 754の定義によれば、a/0 で a が正の数であれば、除算の結果は正の無限大となり、a が負の数であれば負の無限大となる[25]。そして、a も 0 であった場合、除算結果は NaN(not a number、数でない)となる[26]。IEEE 754 には −0 も定義されているため、0 の代わりに −0 で除算をした場合は、上述の符号が反転する[25]。 IEEE 754は現在、ほとんどのコンピュータでサポートされている[25]。
コンピュータのゼロ除算が原因で実際に現実世界で起きた事態
1997年、民生品の応用を研究していたアメリカ海軍は、タイコンデロガ級ミサイル巡洋艦「ヨークタウン」を改造して主機のガスタービンエンジンの制御にマイクロソフトのソフトウェアを採用したが、試験航行中にデータベースのゼロ除算が発生してソフトウェアが《例外》を返し、結果として主機が停止、回復するまでカリブ海を2時間半ほど漂流する事態となってしまった[27]。
ポップカルチャー
- "OH SHI-"―ゼロ除算がコンピュータや電卓でエラーを引き起こす様を宇宙の終焉などに結びつけた英語の口語表現[要出典]。「Oh shit!」と最後まで言い切る前に宇宙は破壊されてしまう[28]。
- テッド・チャンの短篇に『ゼロで割る』(w:Division by Zero (short story))という題名のものがある[29][30]。
- 北米発祥のジョーク、チャック・ノリス・ファクトによれば、「チャック・ノリスはゼロ除算ができる」という真実(ファクト)がある[31]。
- マジック:ザ・ギャザリングのストリクスヘイヴン:魔法学院では、同名のカードが打ち消し呪文として登場する[32]。
脚注
出典
- ^ 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 .
- ^ “【算数編】小学校学習指導要領(平成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 .
- ^ 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 .
- ^ 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 .
- ^ 高橋 丈夫 (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日) 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日。
関連項目
外部リンク
- Weisstein, Eric W. "Division by Zero". mathworld.wolfram.com (英語).
- The Last Denominator - 「OH SHI-」を題材にしたショートフィルム。ゼロ除算をしようとした直後に地球が爆発する。
- 0除算のページへのリンク