0÷0=1 余り 0という計算は間違っていますか?
0×1+0=0で検算してもあっています。
ゼロで割るという計算自体が許されていないので間違いです。
>0÷0=1 余り 0という計算は間違っていますか?
>0×1+0=0で検算してもあっています。
それでは
0÷0=2 余り 0
0÷0=3 余り 0
0÷0=4 余り 0
0÷0=5 余り 0
0÷0=6 余り 0
なども検算して合っているのでこれらも正解になってしまいます。
http://ja.wikipedia.org/wiki/%E3%82%BC%E3%83%AD%E9%99%A4%E7%AE%9...
割り算できないということなので足し算と引き算のみで割り算を処理してみました。
以下Rubyコードです。
#!/usr/bin/ruby -Ks
def 割り算(a, b)
c = 0
d = nil
x = a
loop do
if x < b
d = x
break;
end
x = x - b
c = c + 1
if x == 0
d = 0
break
end
end
puts "%d 割る %d = 商 %d 余り %d" % [a,b,c,d]
end
割り算( 5, 3 ) # => 5 割る 3 = 商 1 余り 2
割り算( 0, 0 ) # => 0 割る 0 = 商 1 余り 0
http://oshiete.goo.ne.jp/qa/5052323.html
間違っています。
0で割る場合、答えはいくつでも成立してしまいます。
0×1+0 = 0
0×2+0 = 0
0×3+0 = 0
0×4+0 = 0
0×∞(無限) = 0
なので、「(ある数字)÷0」は0とも1とも無限とも取れてしまいます。
また、0で割れると、等式の両側を同じ数で割った場合同じになるはずなので、
1×0 = 2×0
両辺を0で割り、
1 = 2
となって矛盾が生じます。
なので、現在は「0で割り算を行うことはできない」、「0で割る計算は存在しない」とされています。
コンピューターや電卓で計算を行ってもエラーになって処理されません。
A >= BならCは1以上の数値になります。0にはなりません。
A - B = 0 ならCは1以外の数値をとりえなくないですか?
A = B なら余りも0以外の数値をとりません。
ゼロ除算は意味が無いというのが他の回答にもあるとおりです。
ちょっとwikipediaを見ただけですが、0÷0=1にならない証明。
0/0=1
の両辺に2をかけます
(0/0)×2=1×2
分数は次のように変形できます。
(0×2)/0=2
0/0=2
これは0/0=1に反します。
(0/0)*2=1*2を式変形するときに計算する順序を破壊していませんか?
((0/0)*2)/2=(1*2)/2
((1)*2)/2=(2)/2
(1*2)/2=2/2
(2)/2=1
2/2=1
1=1
>0×1+0=0で検算してもあっています。
0×2+0=0、0×3+0=0、……どれも正解となってしまうという矛盾が生じてしまいます
>A=BならC=1 D=0になるはずですよね?
矛盾解消のためには「AとBがいずれもゼロ以外であること」という条件をつける必要があります
ゼロ除算については下記参照
http://ja.wikipedia.org/wiki/%E3%82%BC%E3%83%AD%E9%99%A4%E7%AE%9...
単に、0で割ってはいけないことになっているというだけでは、釈然と市内店も残ると思いますので、『なぜか』、というところに焦点を当てた以下のpdfを紹介いたします。
なぜ、0で割ってはいけないか
中村文則
>割り算できないということなので足し算と引き算のみで割り算を処理してみました。
そのRubyコードは間違っています。
なぜならb=0になる場合の例外処理を忘れているからです。
http://www2.biglobe.ne.jp/~oni_page/other/etc/pr03.html
プログラムは思った通りに動かない。書いた通りに動く。
b=0のときの例外処理を入れました。
#!/usr/bin/ruby -Ks
def 割り算(a, b)
c = 0
d = nil
x = a
loop do
if x < b
d = x
break;
end
x = x - b
c = c + 1
if x == 0
d = 0
break
end
if b == 0
puts "%d 割る %d = 計算不能" % [a,b]
return
end
end
puts "%d 割る %d = 商 %d 余り %d" % [a,b,c,d]
end
割り算( 5, 3 ) # => 5 割る 3 = 商 1 余り 2
割り算( 0, 0 ) # => 0 割る 0 = 商 1 余り 0
割り算( 1, 0 ) # => 1 割る 0 = 計算不能
ゼロを乗除しない ~ 加減乗除(+-×÷)のルール ~
── ゼロは、数学の概念として存在するだけで、実在しな
い。しかし、ゼロの概念を認めなければ、数学が成立しない。
http://d.hatena.ne.jp/adlib/19391127
存在すれど実在せず ~ esse vs exsistere ~
── ナベアツ氏は、100まで数える中に、何回アホになるでしょうか?
http://q.hatena.ne.jp/1276059504#c182989
3の倍数≠3の群(ぐん、group)……?
── (上掲コメントのつづき)1を3で割れば、商は0で残りは1で
あるから、番号1の者は当然Bの組仁はいるわけなのであるが、これは
すでに学校教育をおえてしまった他の先生方から見れば、すこぶる形式
的な不自然な考え方のように思われるらしい。(P22)
http://booklog.jp/users/awalibrary/archives/4004000130
── 吉田 洋一《零の発見 ~ 数学の生い立ち 19391127 岩波新書》
私たちは「割り算」を段階的に習ってきました。
正の正数同士の割り算に始まり、商と剰余を出す割り算、小数の割り算、分数の割り算、負数や無理数を含む割り算……と進みます。
商と剰余を出す割り算以外は、乗算の逆演算もしくは乗算における逆元の乗算として定義されます。
その定義からすると、0÷0は明確に「不定」と言えます(その理由はすでに回答にあるURLで解るでしょう)。
しかし、商と剰余を出す割り算は単純に乗算の逆演算としては定義ができません。
ただ一般的に、商と剰余は以下の性質を満たすべき、と考えられます。
A÷B=C 余り D ⇔ B×C+D=A
そして、あなたもその性質から0÷0=1 余り 0でいいんじゃないか? なにが間違っているのか? と考えているのだと思います。
問題なのは、上記の性質を定義として採用するだけでは足りない、ということです。
5÷2=2.1 余り 0.8
5÷2=2.2 余り 0.6
これらは正しいのでしょうか?
あるいは、
4.2÷2=2.1 余り 0
4.2÷2=2 余り 0.2
あなたが知りたかった答えはどっちですか?
あるいは、
-5÷2=-2 余り -1
-5÷2=-3 余り 1
さて、どちらが正しいのでしょう???
あるいは、
5÷2=-2 余り 9
これも答えになりますか?
つまり私が言いたいのは、これは正しい/正しくない、という議論の外だということです。
A÷B=C 余り D という演算を考える。このとき与えられた A と B に対して、解 C と D は B×C+D=A を満たす数とする。
こういう形式で商と剰余を求める演算を考えた時、この演算で扱うそれぞれの数の種類として、この演算が「有用」になるのはいったいどの範囲なのか?(自然数? 0以上の整数? 整数? 有理数? 実数? 複素数?)というのが焦点だと思います。
これらと同じレベルで、
というのが私の感覚です。
0÷0=1 余り 0は正しい! 0×1+0=0 だから! という主張は、5÷2=-2 余り 9 は正しい! 2×-2+9=5 だから! と主張することと同じではないですか?
それはまぁ、商と剰余の関係を満たすかもしれませんが、その結果(1 余り 0 とか -2 余り 9 とか)に何の意味があるんですか?
5/2を計算するなら5>=2なのだから商が1より小さい値になってはいけないんではないですか?
余り9>2ですから間違っています。
私は 5÷2=-2 余り 9 という式が正しいとは主張していません。
「5÷2で5>=2なのだから商が1より小さい値になってはいけない」とあなたは主張します。
剰余計算にはそのような満たすべき条件が存在していて、「その条件を満たしていない」から「間違い」だと言っています。
5÷2=-2 余り 9 という式を見て、おかしい! と思ったはずです。この式は剰余計算が満たしているべき解の条件を満たしていない、と感じたはずです。
その感覚がどこからくるのか、一体どういう条件を満たしていれば意味がある解といえるのか、ということを注意深く考えて欲しかったのです。
0÷0=1 余り 0という式は、剰余計算として、私から見ると「そのような商と剰余の組み合わせを解として提示することに意味がない」と映るのです。
5÷2=-2 余り 9 という式を見て「おかしい!」と感覚する程度に、0÷0=1 余り 0 という式は「おかしい!」と映るのです(その理由は既出の答えの繰り返しになるので書きませんでした)。
だから「0÷0=1 余り 0は正しい! 0×1+0=0 だから! という主張は、5÷2=-2 余り 9 は正しい! 2×-2+9=5 だから! と主張することと同じではないですか?」と書いたのです。
剰余計算の解が見満たすべき条件について、あなたがしっかりと捉え切れていないことを説明してみようと思います。
あなたは「足し算と引き算のみで割り算を処理してみました」と自説を展開しています。
また、
5/2を計算するなら5>=2なのだから商が1より小さい値になってはいけないんではないですか?
余り9>2ですから間違っています。
とも書きました。
あなたの主張に歩調を合わせて、同じく足し算と引き算のみで話をしてみましょう。
「余り9>2ですから間違っています」というのはちょっと具体的です。まずは一般化を試みてみましょう。
5÷2=1 余り 3
4÷2=1 余り 2
この式を見てどう思いますか?
上の式に対しては「余り3>2ですから間違っています」。よろしい。
余り3から2を引いて、商を1増やさなければなりません。
下の式に対しては?
「余り2>2ですから間違っています」ではおかしいですね。「余り2≧2ですから間違っています」とするべきでしょう。
A÷B=C 余り D での剰余 D が B 以上だったら変ですね。D ≧ B ならもっと割れるはずなので、C を大きくすることができます。
ということは、あなたは 5÷2=-2 余り 9 という式に対して「余り9≧2ですから間違っています」と書くべきでした。
D ≧ B であったらその式は間違い。
あるいは、D < B でなければならない、とも言えます(同じことです)。
なによりあなた自身が、Rubyコードの中に、
if x < b d = x break; end
という条件を書いています。x は b より小さくなった時に剰余 d に代入されます。
xは計算途中の剰余だということですから。
okですか? okですね。
ではあなたが示した式、
0÷0=1 余り 0
を見てみましょう。
剰余D が 0、除数 B が 0。
これはおかしいです。さきほど「D ≧ B であったらその式は間違い」「D < B でなければならない」ということを確認しました。
さらに、あなた自身が0÷0=1 であると主張しています。
4÷2=1 余り 2 が間違いで、余り2はさらに2で割れることから、商を1増やして4÷2=2 余り 0 とするのと同じ手順が適用できます。いや、適用しなければなりません。
あなたはあなた自身の主張(すなわち 0÷0=1)を根拠として、0÷0=2 余り 0 の方がより正しいと認めなければなりません。
しかしこれもまだおかしいです。
なぜなら剰余D が 0、除数 B が 0となり、「D ≧ B であったらその式は間違い」となるからです。
ならば、0÷0=3 余り 0 の方がより正しいとなります。
……あとはこの繰り返しです。
これではっきりしました。
0÷0=1 余り 0 を正しいと主張するならば、その主張を根拠として 0÷0=1 余り 0 は間違いとなる。
なぜなら、剰余 0 を除数 0 で割ると商1が立つのだから。
よって 0÷0=2 余り 0 とすることができる。しかし、これは 0÷0=1 余り 0 を正しいとする主張に矛盾する。
となるのです。
あなたが2.で示したRubyコードの間違いも指摘しておきましょう。
if x == 0 d = 0 break end
と入れたことです。
余りが0なら計算終わり、とするこの部分が「0÷0は1で停止するべきだ」というあなたの意図を反映したコードなのです。
上で計算の仕方を足し算引き算で考えたとき「余りが0か」なんてことは考えてませんでしたね? 剰余が除数よりも小さくなったかどうか? という条件だけを考えたはずです。
実際、この部分を抜いたとしても、0割以外の正数の割り算はちゃんと動作します。
#!/usr/bin/ruby -Ks def 割り算(a, b) c = 0 d = nil x = a loop do if x < b d = x break; end x = x - b c = c + 1 end puts "%f 割る %f = 商 %d 余り %f" % [a,b,c,d] #除数 被除数は整数じゃなくてもokになったので%f指定 end 割り算( 5, 3 ) # => 5.000000 割る 3.000000 = 商 1 余り 2.000000 割り算( 6.4, 2.2 ) # => 6.400000 割る 2.200000 = 商 1 余り 2.000000
このコードでは上で示した、0÷0=1 余り 0 から導き出される矛盾がそのまま計算としてあらわれ、割り算(0, 0)は c が増える一方で停止しないメソッドになります。
0÷0が1という商を出して停止する、という恣意的な条件がない分、こちらの方が自然でしょう。
もっとも、被除数に負数を与えたり、除数に0を与えたりすると無限ループになる以上、プログラムとしては当然失格ですが。
すみません。数学はわかりません。
#!/usr/bin/ruby -Ks
def 割り算(a, b)
c = 0
d = nil
x = a
loop do
if (x < b)
d = x
break
end
c = c + 1
y = x - b
if (x - y).abs <= Float::EPSILON
d = y
break
end
x = y
end
puts "%f 割る %f = 商 %d 余り %f" % [a,b,c,d]
end
割り算( 5, 3 )
割り算( 6.4, 2.2 )
割り算( 0, 0 )
割り算( 0, 1 )
割り算( 1, 0 )
割り算( 1, 1 )
割り算( 2, 0 )
割り算( Float::EPSILON, Float::EPSILON )
割り算( Float::EPSILON, 1 )
割り算( 1, Float::EPSILON )
# 5.000000 割る 3.000000 = 商 1 余り 2.000000
# 6.400000 割る 2.200000 = 商 2 余り 2.000000
# 0.000000 割る 0.000000 = 商 1 余り 0.000000
# 0.000000 割る 1.000000 = 商 0 余り 0.000000
# 1.000000 割る 0.000000 = 商 1 余り 1.000000
# 1.000000 割る 1.000000 = 商 1 余り 0.000000
# 2.000000 割る 0.000000 = 商 1 余り 2.000000
# 0.000000 割る 0.000000 = 商 1 余り 0.000000
# 0.000000 割る 1.000000 = 商 0 余り 0.000000
# 1.000000 割る 0.000000 = 商 1 余り 1.000000
数学的にゼロで割ってはいけない、
という話が通じないようですので、
もっと単純な説明をいたしますが、
①0に対しては何を掛けても0になる
という認識は大丈夫でしょうか。
0 ÷ 0
というのは乗算になおせば
0 × (1/0)
であり、
0 ÷ 0
が、
1 余り 0
になることは絶対にありえません。
この前提を崩せば、「何もない」「何を掛けても0になる」ことが絶対的特徴である
「0」自体の意味が完全に破壊され、計算ができなくなります。
えっと、コメントをきちんと読んでください。
a/0は1と余りaになります。
余りとしてaの情報が保存されています。
1だけを見てはいけません。
>a/0は1と余りaになります。
それはそういう風になるようにプログラムを組んでいるからです。
自分でそうなるように仕組んだプログラムと、絶対的な数学を混同してはいけません。
絶対的な数学とか、そんなの興味ないのでいいです。
コメントが開いてないのでここで質問しますね。
a÷0=1 余り a
なんですよね?
この余ったaはまだ0で割ることができて商1が立つ(とあなたは言っている)のに、なぜそのままにしておくんですか?
そこはそのままにしておくことを許せるというのが不思議なんですが、説明してもらえませんか?
なぜa/0が1余りaになるか。
割り算(A,B)の結果は実部に商である C、虚部に剰余 Dを持った複素数になります。
なぜ商が1になるか。
最初にA < 0を比較します。 #現時点では負の数に対応していません。
A>=0の場合はループを抜けないためCをインクリメントします。
この時点で商は1となります。
つぎにA-Bを計算します。B=0なので結果はAと同じ値となります。
Aと計算結果の差の絶対値を比較します。
(A - A)は0となり、イプシロン以下のため、現時点での商である1と
剰余であるAが確定したと判断し、ループを抜けます。
この時点でループを抜けなかった場合、A - 0を無限に繰り返し、停止しません。
結果 商=1 剰余=A となります。
嘘枕 ~ ルールを曲げれば、公理が引っこむ ~
── なぜ間違いなの? 1+2×3=9
http://q.hatena.ne.jp/1159005571
中学生の質問に、ひとこと(約31字)づつ答えてください。
── 中学になると、こうした約束事がたくさん出てくるので、柔軟な
思考をたいせつにするとともに、約束事そのものと上手につきあうこと
が数学と仲よくするための第一歩になります。(坂田 注)
http://d.hatena.ne.jp/adlib/19850101 中学生諸君! Basic 5
── コンピューターは、すでにチェス名人を追放し、いよいよ将棋名
人の座を狙っている。みんなが羽生に意見をもとめた。
通算勝率7割を超える唯一人の棋士は、顔色も変えず、こう答えた。
「ルールの一部を改定すれば、過去の定跡はすべて役に立たなくなる。
たとえば“桂馬が横に動く”というような程度で十分でしょうね」
http://oshiete.goo.ne.jp/qa/4442842.html (No.2)
強者の条件 ~ 容赦しない、投げない、負けない ~
Google 電卓機能による四則演算
0 + 0 = 0
0 - 0 = 0
0 * 0 = 0
0 / 0 = 約 1,250,000,000 件 (0.18 秒)
── 0の0乗(0の0じょう)とは何か、ということはしばしば初学者の
議論となるところであるが、これはただ数学用語を組み合わせただけの
言葉であって、特別な意味は持たない。すなわち、標準的な教科書にお
いては0の0乗は定義されない。── (Wikipedia)
では。πを3で割ることが出来ますか?
小数点で表現することは許されません。処理系に依存しますし、計算することは出来ません。
aをbで割れますか? 変数a、bに任意の数を取ることは出来ません。
式を展開することは出来ますか? 出来ません。
a = bをa+1=b+1に書き換えられますか? 書きかれられません。
2の99999999999999999999999999999乗を処理することは出来ますか? できません。
無限って破綻せずに扱うことは出来ますか?
関数って評価できますか?
微分積分って本当に計算していいんですか? 近似することも許されません。
1 = 1.0は等しいですか? いいえ、比較することは出来ません。
1 = 1 ですか? 左右の1の表現が1進数なのかの情報が無いので比較できません。評価者依存です。
すべての情報について損失が無い形で扱えなければいけません。
私も「0」で割ったり掛けたりして、しかも「0」に必ずしもなっては困るプログラムを書く必要があった時がありました。
当然、「0」で計算させるとエラーになりますので、プログラミングのプロに聞いて、次のようにしました。
eは、ご存じのように「イプシロン」です。
e = 0.00000001 とかいう、限りなく「0」に近い値を定義しておいて
変数が「0」になったら、この「e」にするという処置をしてました。
なぜ、「0」で割ったらいけないか、を考える時に、この最も小さい数字の桁を操作することで、もし計算機がどれだけの桁数を扱えるのかを考えることで納得した覚えがあります。
ちなみにプログラミングや数学の専門家ではありません。
> A=BならC=1 D=0になる
> 0÷0=1 余り 0という計算は間違っていますか?
それはプログラムにバグ(仕様に矛盾)があるとしか思えないですね。2パターン提示されていますのでややこしいのですが、
[A]05-04 15:43:34版~
割り算( 0, 0 ) # => 0 割る 0 = 商 1 余り 0
割り算( 1, 0 ) # => 1 割る 0 = 計算不能
割り算( 0, 1 ) # => 0 割る 1 = 商 0 余り 0
↑3通りの異なる動作をしていますが、
1) 0以外を "0で割る"時は 「計算不能」
2) "0を" 0以外で割る時は 「商 0 余り 0」
よって、"0を0で割る"時をさらに違う動作にするのではなく、
1) or 2) に統一しないとプログラム的にはダメ仕様ですよね?
[B]05-05 06:22:56版~
# 0.000000 割る 0.000000 = 商 1 余り 0.000000
# 0.000000 割る 1.000000 = 商 0 余り 0.000000
# 1.000000 割る 0.000000 = 商 1 余り 1.000000
↑「0割る0=商1余り0」としたいロジック(仕様)のために、「0以外を "0で割る"時」がつられて破綻してますよね?
いずれにしろ何が何でも『0÷0=1余り0』で処理したい(そういう仕様にしたい)のなら、別ですが。
0÷0=計算不能 とするのが無難な仕様でしょう。
※個人的には『0÷0=0余り0』にする仕様ならまだ許容できますが...
A÷B=C 余り Dという計算をするときに、A=2BならC=2 D=0になるはずですね.
2×0÷0=2 余り 0という計算が成り立つと言ってもいいように思えます.
0×2+0=0で検算してもあっていることだし。
A÷B=C 余り Dという計算をするときに、A=3BならC=3 D=0になるんですね.
3×0÷0=3 余り 0という計算が成り立つと言えちゃうように思えます.
0×3+0=0で検算してもあってるし。
そもそも 0 にいくつをかけても 0 だから
割られる数(被除数)が 0 の時だけは 0 で割ることが成立すると認定してもいいのでは
という主張ができそうでもあり、
その場合、質問者が示したように、商を「1」としたらおさまりがいいようですが、
果たして、「2」ではいけないか? 「3」では不都合か? ということににもなる……。
そもそも、0 にいくつをかけても 0 なのだから。
だから、間違いか? ではなくてて、なんだろ まさに 想定外。
被除数が 0 であろうと 0 で割ることは 想定外なんです。
0と0を比較することが出来るので商は1以外の数値になりません。
余りは0より大きい数値や0より小さい数値にはなりません。よって0です。