ゼロ除算とは、0による割り算である。分母が0の分数の事も指す。
「いいか~?割り算をする時に、割る側は絶対に0にしちゃ駄目だぞ~!」
「わかった!」 そんな純粋な君は今後、何も問題なく算数・数学を勉強していく事だろう。
だが「なんで?」と思ってしまった諸君。
概要
ゼロ除算は前述の通り「数を0で割る事」であるが、数学の世界ではタブーである。
電卓に打てばERRORを吐きだすし、C言語の整数型では動作が停止する。
過去に米海軍がマイクロソフト社のソフトを採用し試運転した所、入力ミスによりゼロ除算が発生してしまい推進システムが麻痺、主機が2時間半も海上で停止しまった例もある。恐るべしゼロ除算。
そもそも0自体が特殊な数であり、他の1や2等の自然数、実数等の様にホイホイ扱えるものではないのだ。
(0自体については記事「0」を参照のこと。)
タブーの理由
りんごで考える
割られる数をA、割る数をB、商をC、余りをDとすると次の様に表記できる。(ただし全て自然数である。)
A÷B=C…D
ではこれを文章問題にするとどうなるのか?
先生「りんごがA個あり、これをB人で分けようと思います。1人に何個行き渡り、何個余りますか?」
生徒「1人C個もらえ、D個余ります。」
では、この文章問題に「10÷0」を当てはめるとどうなるのか?
先生「りんごが10個あり、これを0人で分けようと思います。1人に何個行き渡り、何個余りますか?」
生徒「なにいってだこいつ」
これは困りましたね。冷静に考えると0人で分けるってのが意味深です。
しかし、生徒君は以下の考えからある答えを導き出しました。
例えば10÷3を計算する時、10からは3が3回引けて1余るから、10÷3=3…1
つまり、10からは0がいっぱい(無限回)引けて、でも減る事はないから10余るから…
確かに生徒君の考え方は悪くありません、余りがある割り算では有効な考え方です。
ところで、分数にはA/B = D/B+C(/は括線)という書き換えがあります。これを生徒君の答えに当てはめるとどうなるでしょう。
なんと、両辺から10/0を引くと0=∞が導き出されてしまいました。これは有り得ないですね。
これで少なからず「ゼロ除算って何かおかしいぞ…」というのを感じてもらえたでしょうか。
この説明では意味ワカメ。という方は当記事の掲示板で他の説明をしてる方が居るのでそちらも参考に。
ちなみに今回は説明の為∞を数の様に扱っているが、本来∞(無限大記号)は数の様に扱ってはいけない。
(無限大記号については記事「∞」を参照のこと。 と言いたかったが曖昧さ回避記事の為内容がないよう…)
代数で考える
a=b 両辺にaを足す
2a=a+b 両辺から2b引く
2a-2b=a-b 左辺をa-bで括る
2(a-b)=a-b 両辺をa-bで割る
2=1
この計算式は数学的直感やセンスがないと一瞬「あれ!?」となってしまう。(人によっては考えても分からない。)
しかし、この尤もらしい計算式には勿論ゼロ除算が含まれている。(a=b なので a-b=0である。)
この計算を利用する事で「全ての数は等しい」事を証明する事が可能である。 ⇒アンサイクロペディア「1=2」
(偽(ゼロ除算)から導き出した偽(全ての数が同値)なので問題ないのだが。)
三行で教えろ
(x+x)(x-x)=x2-x2=(x-x)x 左辺と右辺をx-x(=0)で割る
x+x=x 両辺をxで割る
2=1 ありえん(笑)
「0かもしれないもの」で割るのもNG
数学の問題を解く時に、次のような式に辿り着いたとしよう。
ab = ac
なんとも両辺をaで割りたくなる。そうすればb=cという非常にわかりやすい答えが得られるのだ。
しかし、ここは、踏みとどまってほしい。そのaは0かもしれませんよ?
このような時にどうすればいいのかを考えてみよう。
まず、予備知識として以下の式を考えよう。
xy = 0
整数の場合、この式は「xが0 または yが0」を意味している。もちろん両方が0という可能性もありえる。
「xが0」とは限らないし、「yが0」とも限らないのが注意点だ。
それでは、最初の式に戻り、移項して因数分解してみよう。
ab = ac
ab - ac = 0
a(b-c) = 0
xy = 0 と似た形になったので、同じように扱うことができる。
この式は「aが0 または b-cが0 」を意味している。もちろん両方という可能性もありえる。
「aが0」とは限らないし、「b-cが0」とも限らないのが注意点だ。
しかし、最初の式の両辺をaで割ると、「b-cが0」を意味する式が得られる。「b-cが0」とは限らないのに…
もともと「aが0 または b-cが0 」という意味だった式は、「両辺をaで割る」ことによって、「aが0の可能性を奪われてしまう」のだ。
「式の両辺をaで割る」とは、「式からaが0の可能性を勝手に奪い取る」ことを意味する。
その結果、本来「b-c が0」とは限らないのに、「b-c は確実に 0」という誤った結論に至ることになる。
これは1=2という誤った結論を導くのによく使われるトリックである。
纏めると、
「0かもしれない値 a で両辺を勝手に割る」のはNGであり、得られた式は必ずしも正しいとは限らない。
ただ、「0かもしれない値 a で両辺を割って得られた式」と「a = 0」のうち少なくとも片方は正しい。
n/0=∞説
昔、バースカラ2世という偉人は「n/0=∞(n≠0)」と定義しゼロ除算の問題を解決しようと試みた。
確かにlim[n→0+]1/nは∞である(反比例グラフy=1/xを想像してもらえると理解しやすい)。
1/10 = 0.1
1/1 =1
1/0.1 = 10
1/0.01 = 100
1/0.001 = 10001/0.0000…1 = 10000…0
1/0 = ∞
しかし、lim[n→0-]1/n(マイナス方面から0に近づいていく)はどうだろうか。こちらは反比例グラフが下に向かって伸びていくので-∞となってしまう。しかし本質的には∞も‐∞もn/0のはずである。つまりこの定義だけでは∞=-∞となってしまうのである。
「不定」と「不能」
ゼロ除算自体が「定義されてないから」「タブーだ」「してはいけない(戒め)」と扱われているが、実はゼロ除算の結果は「不定」と「不能」の2つに分けられる。
不定
不定は読んで字の如く、「数が定まらない」という事を指す。0÷0を想像してもらいたい。果たして答は何になるのだろうか?
仮に0÷0の商をXだとする。A÷B=CはC×B=Aに書き換えられるのは周知である。
0÷0=X ⇒ X×0=0
ゼロ乗算の積は0である。つまりXには何を入れても式は成立するのである。
0÷0の商は「全ての数」となってしまうのである。まさに数が定まっていない状態である。
不能
不能はいわゆる「解なし」である。N÷0を想像してもらいたい(Nは0以外の適当な数でいい)。こちらはどうなるだろうか?
ここでは例としてN=5とし、5÷0の商をXだとする。
5÷0=X ⇒ X×0=5
ゼロ乗算の積は0である。しかし、書き換えた式の右辺には0以外の数字が来てしまっている。
つまりXにはどんな数を入れても式は成立しないのである。N÷0の商は「解なし」となってしまう。
ところでWindowsに付属の電卓でゼロ除算を行うと数による返事は帰ってこないのだが、不定と不能によって返事が違うのはご存じだろうか。
不定計算を行うと「結果が定義されていません」。不能計算を行うと「0で割る事は出来ません」とそれぞれちゃんとした返事が返ってくる。
ただERRORを吐きだされるより思いやりの気持ちを感じますね。感じない?あぁ、そう。
実数の定義から考える
実数は有理数のコーシー完備化、つまり、「有理数のコーシー列の列の同値類のあつまり」で定義されている。数列anがコーシー列であるとは、任意の正の数εに対して十分大きなNが存在し、n,m>Nならば |an-am|<ε を満たすことをいう。
例えば、任意の正の実数εに対して十分大きなNが存在して、n>Nであるならば常に |an-A|<ε を満たす、という有理数の数列全てを同一視してAという実数を構成する。
簡単に言うと、anがコーシー列であるならば、どのようにA近づいて行っても、必ずAに収束する。コーシー列にはありとあらゆる収束の仕方があるが、どのように収束していっても同じ値に収束するので、そのような軽微な違いを無視して、数列の極限であるAを代表して実数Aとするのである。軽微な違いを無視して代表元を一つ取る操作を同値類を取るという。
このようにして考えると、実数とは、その実数に収束する仕方に関係せず収束する数列が存在する物であると言える。0という実数は、0に収束するコーシー列すべてから作ったあつまりの同値類であり、1という実数は1に収束するコーシー列すべてから作ったあつまりの同値類なのである。
極限の取り方によらないことが実数の条件であるため、コーシー列に対する四則演算と極限を取る操作は交換できる。たとえば割り算は、limn→∞an=A、limn→∞bn=Bとしたとき、limn→∞(an/bn) =(limn→∞an)/(limn→∞bn) = A/B である(ここでは常にbn≠0と仮定する)。
- 分母が0でない場合
さて、A≠0に対してゼロ除算 A/0 が実数であるとする。これは、上記のコーシー列がlimn→∞an=A、limn→∞bn=0である状況である。A/0が実数であれば極限の近づき方には関係ないので、an=A、bn=1/nとする。すると、an/bn=A×nとなり、どのようなεに対しても十分大きなnを持ってくれば、|A×n|>εとすることができる。これはan/bnがコーシー列ではないことを示している。したがって、A/0はどのような実数にもなり得ない。
- 0/0の場合
Aを任意の数、an=(A+1/n)2-A2=2A/n+1/n2、bn=(A+1/n)-A=1/nとする。
an/bn=n×(2A/n+1/n2)=2A+1/n であるので、limn→∞an/bn=2A
従って、0/0は任意の実数2Aとすることができる。しかし、0/0が実数であればどのようなAを持ってきても同じ数に収束しなければならないはずである。Aの取り方によってどのような実数にでもすることができる、という事実は、0/0が特定の実数とはなりえないということを示しているのだ。
実は、上記の計算はy=x2の点Aにおける微分の定義である。0/0が特定の数Kであるならば、関数の微分は常に定数関数Kとなってしまい微分という演算が全く無意味なものとなってしまう。また、A/0がどのような実数にもなり得ない(不能)ことと違い、0/0がどのような実数にもなり得る(不定)という性質のおかげで微分の値に意味が生まれるのだ。
不定と不能は意味が違うというのはこういうことであり、0/0自体は特定の実数でなく不定であるということが数学にとって重要な概念であると言える。
数値計算で微分をする場合は直接除算をすることはなく、分子と分母がともに0に近づいていくこと(もしくはそれに相当すること)を確認するだけで終わらせる。ほぼ0の数値同士の割り算は丸め誤差の影響ででたらめな結果になるためだ。それでもゼロ除算になりうる関数を経由しなければならないことがあるため、不能の場合はNaNもしくはinfinity、不定の場合はNaNを出す決まりになっている言語が多い。
整数型には言語に依存しない形でNaNに対応する値が定義されていない。そのため、言語によっては整数型でゼロ除算をするとエラーやNaNではなくでたらめな整数値を平然と出してしまうこともあるので注意。
まとめ
商と剰余に関するゼロ除算
割り算には除算の他に剰余演算がある。5÷2=2余り1とするあれである。剰余にもゼロ除算を考える事ができる。ここではゼロ剰余演算と呼ぶ。
実数の剰余を考える。a÷b=p あまり qは、aとbに対してa=pb+qとなる、0以上の整数p、0≦q<bの実数qを求める演算であるとする。例えば、3.14÷3=1 あまり 0.14、2.71÷4=0 あまり 2.71、9.23÷0.45=20 あまり 0.23、などとなる。
こちらもコーシー列の極限の考え方を流用する。実数Aによる剰余を求める作業とは、Aに収束する有理数列全ての剰余を求める作業の同値類であると考える。
- A÷0のとき
ここでは実際に]A=πとしてπ÷1/10nの式を書き下してみる。
π÷1=3 あまり 0.1415…
π÷0.1=31 あまり 0.0415
π÷0.01=314 あまり 0.0015…
…
ここから、a≠0、b→0のとき、a÷b=∞ あまり 0となることがわかる。∞と書いた部分はどのような実数値にも収束しないことを表しているため、除算の結果から類推すればこれは不能となる。Aの0による剰余を求めることはできない。
- 0÷0のとき
これは0に収束する任意の数列anを、0に収束する数列bnで剰余演算をし、その極限を0÷0の商と剰余とする、ということである。
an=3.14/10n、bn=1/10nとして書き下してみる。
3.14÷1=3 あまり 0.14
0.314÷0.1=3 あまり 0.014
0.0314÷0.01=3 あまり 0.0014
… → 0÷0=3あまり0
an=4.14/10n、bn=1/10nとする。
4.14÷1=4 あまり 0.14
0.414÷0.1=4あまり0.014
0.0414÷0.01=4あまり0.0014
… → 0÷0=4あまり0
ここから、商としてはどのような数字を持ってきてもよく、剰余は0に収束することがわかる。どのような収束の仕方をしても同じ値に収束することが実数の条件であった。しかし、0÷0は商にどのような値を持ってきてもよく、剰余は常に0になる。ゼロ除算の結果から類推すれば、これは不定といえる。
整数は実数に埋め込むことができるので、整数の剰余演算も同じ結果となる。
1÷0の商は不能、あまりは0。0÷0の商は不定、あまりは0。
まとめ
ゼロ除算に纏わる計算
0の逆数
逆数とは、元の数と掛け合わせると積が1になる数の事である。2の逆数は1/2であり、a/bの逆数はb/aである。
0は何を掛けても積は0となるので逆数が存在しない。0は唯一逆数を持たない数である。
極限ゼロと極限無限同士の積は計算方法によって解が違うので当てにならない。
何故答えが不定になってしまうのか?それは同じ極限ゼロにも極限無限にも大小関係があるからだ。
lim[x→0]xもlim[x→0]2xも、両方計算してしまえば同じ0になってしまう。しかし前者を分子にし、後者を分母にすれば答えは1/2となる。同じ極限値でも式によって大きさが違うので、それを比較して「答えは如何程か?」と定める事はできないのである。
負の整数の階乗
0の階乗は、以下の方法で定義できる。
(n-1)!×n=n! を利用する。
0!×1=1!=1 ゆえに 0!=1
ところが、これを(-1)!に適用しようとすると、ゼロ除算が登場するので不能となる。
(-1)!×0=0!=1 ゆえに(-1)!=1/0
(-2)!は、定義不能の(-1)!を含むので、やはり定義不能である。
00(0の0乗)
一般的に「1」の方が都合が良いとされているが、「定義されてない」「0」という説もある。
0説
lim[x→+0]0x=0 つまり、0は何乗でも0なんだから0乗でも0に決まってるだろ。という説である。
1説
lim[x→0]x0=1 つまり、0乗すれば元が何だろうが1になるんだから0でも1になるに決まってるだろ。という説である。
これだけ聞くと0説とレベルが同じに感じる。
実はxxのグラフ(想像しにくいと思われるのでGoogle先生「x^xで検索」を参考)は一見x=0の時1を通っている様に見えるが、実はその点に限り定義されてない。つまりxxはx=0に不連続点を持っているグラフである。
ちなみに、lim[x→0]xx=1である事も計算されている。
00=1と定義してるプログラムも少なくなく、ドナルド・クヌースは「0xは数学的意義があまり無いが、x0は様々な場面で使用できるので形式的に便利」と語っている。
定義されてない説
n1=n
nk+1=nk×n
指数計算のルールより、指数が1ずつ増えていくというのは、nを1つずつ掛けるのに等しい。
つまり、逆に言えば指数が1ずつ減っていくというのはnを1つずつ割るのに等しい。
k=0の時、 n0+1=n0×n=n なので、n0=n/n=1 は明らかである。
しかし、n=0の時は0/0となりゼロ除算となってしまうので不定となってしまう。よって00も定義できない。
ゼロ乗算しても0にならない数は存在するか?
ここまで筆者は「0を掛けたら0である」を当然の様に言い回してたが、果たしてこれは事実なのだろうか?
昔の偉人は「2乗してマイナスになる数なんてある訳ない」と考えたが、なんだかんだで虚数iを作ってしまった。
「角度θが90度超えてるのに直角三角形はねーよ」と思ったら、色々頑張って単位円を使って角度の拡張に成功した。(拡張というよりも三角比の定義自体を大幅に変えてしまったのだが… 三角関数を参考せよ。)
もしかしたら0を掛けても0にならない数は存在するのでは?計算してみる事にする。
計算
0の定義… 0は足しても何も変化しない。X+0=Xである。
0はRを除き乗算すると0にする。X×0=0であるが、R×0の場合はその限りではない。
ここでは0を掛けても0にならない数Rを考えていく。
0=0+0 両辺にRを掛ける
R×0=R×(0+0) 分配法則を使う
0×R=0×R+0×R 0×R=Mとする
M=M+M
さて、Mは0×Rの積なのでM≠0のはずである。しかしM=2Mという式が発生してしまった。
これを解けばM=0となってしまい前提条件と矛盾としてしまう。
結果、0を掛けても0にならない数Rは存在しない。そう、数学者は「機能としての拡張」は出来ても今まで使用してきた物が使えなくなってしまう物を作る事は出来ないのだ。悲しきかな。
一元体
0÷0の計算が可能だとすると、割り算の定義から0÷0=1となる。一方で、0÷0=Xにどのような値を入れてもよいので0÷0=0としてもよい。すると二つの式から0=1となってしまう。0を0で割ることを認めると、0=1とならざるを得ず、したがって、全ての数が0と一致してしまう。割り算ができる代数系(体という)は0≠1であることが条件であるので、0=1という不合理な結果となってしまうのだ。
実は0÷0の計算が可能であるとした系を0のみからなる体ということで一元体、あるいは絶対数学と呼び、数論幾何学の深淵に迫り得る数学的対象として研究されている。
当然だが、普通の整数や実数は一元体ではないので0を0で割ることは禁止されている。
関連動画
関連コミュニティ
関連項目
- 38
- 0pt