トピック
In Japan rajimaru

なんでだろう。

なぜ数を0でわるとエラーになるのですか?
3そうだね
プレイ済み
返信[1]
親投稿
Hanzo rzsense
1÷1=1 1÷0.1=10 1÷0.01=100 1÷0.001=1000 ・・・というように、割る数をどんどん小さくしていくと、計算結果はどんどん大きくなっていきます。 じゃあ、0で割ったらどうなるのか?は、上の計算の延長で考えると、とてつもなく大きな値になりそうなのはわかりますよね? つまり、計算結果が大きな値になり過ぎて、コンピューターで処理しきれないため、エラーになるのです。
3そうだね
プレイ済み
返信[2]
親投稿
こう subwars
6÷2=3 3×2=6 数字の順番が逆になっています では 9÷0=? ?×0=9 どんな数字でも0をかけると0になります しかし、0除算(0で割ること)はその理屈を ご丁寧に根底からひっくり返してくれます よって、数学では0除算はしてはいけません プチコンでなくとも、電卓だろうが PCだろうが基本的にはエラーのはずですよ
2そうだね
プレイ済み
返信[3]
親投稿
MIKI ifconfig
補足 プチコンや VB 以外の多くの処理系では、正の数 / 0 をエラーとせず、 inf という特別な値を返します。無限を表す特別な値です。 負の数 / 0 は -inf を返します。 0 / 0 というややこしい状況では、nan というこれまた特別な値を返します。nan は "Not A Number" の頭文字。数ではないことを表す特別な値です。
0そうだね
プレイ済み
返信[4]
親投稿
数学的には、0 以外の数値を 0 で除算すると∞(無限大)と成るそうです(高校数学教師に確認済)。有限のメモリで無限を扱う事が出来ない為、例外(DivideByZero Exception)と成ります。 因みに、Visual Basic 2010 や Visual C# 2010 では、下記は、∞と表示されます、為念。 Dim A As Single = 3.0F / 0.0F Me.Text = A.ToString() float a = 3f / 0f; this.Text = a.ToString();
0そうだね
プレイ済み
返信[5]
親投稿
GRS grs8001
最初に、算数のお約束事項を確認 ① A=B (=は AとBは同じって事) ② 数字に0を掛けると 0 になる 6÷2=3 式を変形するために両辺に2を掛けます 6÷2×2=3×2 6=6 ①なので問題ない 同様に 9÷0=? 式を変形するために両辺に0を掛けます 9÷0×0=?×0 9=?×0 ?×0は②の約束だと 0 になるので 9=0 これだと①に矛盾が生じるので…
0そうだね
プレイ済み
返信[6]
親投稿
InDoor TheInDoor12
0で割ることを利用したインチキ証明の例 x=yとする。 両辺にxを掛けて x^2=xy 両辺からy^2を引いて x^2-y^2=xy-y^2 両辺を因数分解して (x+y)(x-y)=y(x-y) 両辺を(x-y)で割って x+y=y 両辺をyで割って x/y+1=1 x=yより、x/y=1だから 1+1=1 ゆえに、1=2である。
0そうだね
プレイ済み
返信[7]
親投稿
れい rei-nntnd
無限大になるとか、矛盾が生じるとかは間違い。 「0で割ることが定義されてない」からってのが正しい。 「割り算」は「掛け算」の逆演算として定義されている。 例) 3x4=12 -> 12/4 = 3 掛ける数が0の場合、何をかけても答えが0になるので1対1に対応していない。なのでその逆演算、0で割る演算は「不能」や「任意の数」となる。 例) 3x0=0,4x0=0 答えが0でないのに掛ける数が0のケースは存在しないので定義されない。 「不定」や「解無し」、「定義されない」が正しい。 例) □x0=3 → そんな□は存在しない
3そうだね
プレイ済み
返信[8]
親投稿
皆さん難しいこと言ってますが、 小学生でもわかる言い方をすれば、 0は割れないからです。 0/X=0 って出れば便利なんですけどねぇ・・。
0そうだね
プレイ済み
返信[9]
親投稿
ツララ LongIceSword
コンピューターの仕組み的にも、れいさんの説明が一番しっくりくるかも。 逆に言うと、0で割った場合も定義した計算命令を作っちゃえば、0で割ることも可能ということですね。
0そうだね
プレイ済み
返信[10]
親投稿
マギー M191246
1÷0が無限大でないことは、 簡単に説明できます。 例えば 1÷5=0.2 1÷(-5)=-0.2 となって、答と割る数の符号は一致します。 0には、符号がないので 1÷0も符号がない何かになります。 無限大はプラスなので、 明らかに違いますね。
0そうだね
プレイ済み
返信[11]
親投稿
MIKI ifconfig
マギーさん マギーさんの論拠は「無限大に符合がある」という前提ですね。 ところが「リーマン球面」では正側の無限遠点と負側の無限遠点を一つにまとめてしまいます。 そこでは任意の複素数について z/0 = ∞ と定義することができます。 (どっちの方に向かっても、無限に遠い点はリーマン球の天頂点に相当するからですね)
1そうだね
プレイ済み
返信[12]
親投稿
MIKI ifconfig
いかせんせい、またでたらめを広めてる。 > 数学的には、0 以外の数値を 0 で除算すると∞(無限大)と成るそうです(高校数学教師に確認済) その教師が間違っているか、いかせんせいが誤解したかのどっちかです。 いかせんせいがここで想定した式は 1/0 = ∞ ですか? それとも lim{x→0} 1/x = ∞ ですか? どっちでもないですか? (タイプミスがあったので再投稿しました)
0そうだね
プレイ済み
返信[13]
親投稿
マギー M191246
「リーマン球面」 そういうものがあったのですか! 知りませんでした。 だとしたら、私の方法では 説明しきれないですね。 とりあえず 「リーマン球面のようなものではない場合。」 と前置きをつけておくことにします。
0そうだね
プレイ済み
返信[14]
親投稿
MIKI ifconfig
y = 1/x のグラフを見ると、 (x=-∞,y=0)の左彼方からやってきて、くるんと下向きに (x=0,y=-∞)へと向かう曲線と (x=0,y=∞)の上彼方からやってきて、くるんと右向きに (x=∞,y=0)へと向かう曲線 という二つの曲線から成りますよね。 xy 平面をショウロンポウの皮と考えて、原点に具を乗せ、xy平面で具をくるんと包むと、それがリーマン球面みたいな感じになります。そこでは、左彼方に伸びる曲線と右彼方に伸びる曲線が、ショウロンポウの結び目で繋がります。同様に、下に伸びる曲線と上に伸びる曲線がやはりショウロンポウの結び目で繋がります。二本に見えた曲線は、リーマン球では無限遠点で繋がっていたと言えます。 結論: 腹減った
0そうだね
プレイ済み
返信[15]
親投稿
Godot orz_127
難しいことは、よくわかりませんが 多くの処理系で0での除算は、エラー扱いとなっています。 コメントで難しいことが色々書かれていますが、多分そんなことは関係無く、多くの処理系に倣って単純に0で割り算したらエラーとなるような仕様でSmileBASICが作られているからだと思います。 公式じゃありませんがそういうものだと覚えてしまった方がはやいかとw
2そうだね
プレイ済み
返信[16]
親投稿
ツララ LongIceSword
もし0で割った結果を、プチコンの仕様で計算可能な最大の数に置き換える計算命令を作ったら何か不都合が出たりするんでしょうか? プチコンってルール作って遊ぶ的な面もありますし、厳密な数学的正しさは無視しちゃっても別にいいんじゃないかと思ったりするんですけど。ダメ? キャラクタの移動で範囲外の数値になる時はIF文で判定して丸め込むみたいに、無限が無い系の特徴を色々探してみると裏技的なテクニックが見つかるかも。
1そうだね
プレイ済み
返信[17]
親投稿
れい rei-nntnd
Godot氏 多くの処理系で0除算がエラーになってるってのは勘違いだな。エラーを選べる系はあるが。普通はNaNかinfが帰る。コンピューターは計算機だ。0除算で止まってたらあかつき金星に届かない。 みき氏 リーマン球面は特殊な体系でプチコンの処理系関係ない。せめて「余談」だとか注釈つけないと誤解生む。少なくともieeeの体系では無限大に正負はある。 ツララ氏 プチコンはエラー拾えないしNaNもInfもまともに使えないのでほぼ問題ないはず。 でもプログラミング一般の話ならダメ。レイキャス・レイトレなんかではNaNやInfを衝突判定に使うのとか普通だし、計算精度の保証って意味でもInfは別にないと困る。 いかせんせい氏 0でわったら無限大っつーのは世俗的にはまぁそんな理解だろうし、そう説明するのも手かも知れないが、間違いは間違いなんで「数学教師に確認」とかくだらない権威付けしないでくれ。
1そうだね
プレイ済み
返信[18]
親投稿
MIKI ifconfig
ツララさん 異常値をたとえば 999999 とかで表す方法はよくあります。 その結果、正常な値として 999999 が入力された場合に異常系の処理を始めて・・・というシナリオは実際に起きた問題です。 もしそういう命令作るなら、Inf を返すように設計した方がいいです。 れいさん マギーさんは数学の話してますよね。そこに乗ったのだから数学の話という前提は明らかでしょう。ただ、マギーさんは実数の範囲を想定してたのに、勝手に複素数に広げた私はヒドイヤツです。 質問者置いてけぼりなのはいつものこと・・・ 細かい話だけど、0除算以外にも、非整数から整数への丸めも「0方向に切捨て」「四捨五入」「偶数丸め」の組み合わせがありますよね。Excel はワークシート関数と vba 関数で同名なのに挙動が違う。
0そうだね
プレイ済み
返信[19]
親投稿
ツララ LongIceSword
あ、異常値が実際に入力されたときのシナリオって、もしかしたら2000年問題ですね?! OSや業務用ソフトが誤作動を起すかもしれないって結構な騒ぎになってた記憶が・・・ infやNaNって、数全体を論理的に考えた場合のTRUEやFALSEに相当するってことなんですかね?
0そうだね
プレイ済み
返信[20]
親投稿
MIKI ifconfig
2000年問題はオーバーフローなんでちょっと違うけどまあ似たようなものです。 浮動小数点数はスカラなんで扱いが楽なんですよね。 その扱いが楽なまま、異常値を表現できるのが nan のいいとこ。 整数だとこうはいきません。 ただし、表現できるのはたかだか一つの異常なので、異常が複数あれば nan 一個ではたりない。となるとやはりスカラじゃ無理ってことになります。 例えば気象観測ではデータには品質という属性があり、正常値を 100% できたら「完全」80%以上なら「準完全」・・・てなステータスがつきます。こうなるとスカラ一つでは表現できません。 vb系の object 型などは、スカラのようなものでありつつも、任意の属性を持てるのでこういうのには便利ですね。スプライトの spvar みたいな感じ。
0そうだね
プレイ済み
返信[21]
親投稿
れい rei-nntnd
じゃあ俺も質問者そっちのけで数学すると。 カントール先生の集合論によると正方形の中にある点の数と、直線の中にある点の数はおなじくらいらしい。 ベクトルとスカラーで一対一対応できるってこと。 変数ひとつでいくらでも情報いれられる。やったね! うそだけど。 つぎはほんと。 NaNは実はひとつじゃない。仮数部ビットが全部立ってたらNaNかInfで、infは正負の2個なので、倍精度で(2^52-2)個くらいある。 これ、もったいないよね。 エラーの数をこれだけ表現できるということだし。なので、一部の不動小数点処理系では演算エラーの種類によってきまった値いれたりして使ってるし、ここに情報いれたdoubleで関数のエラー返すとか高等(解りづらくてゴミって意味)テクニックもある。 覚えておくと得することあるかもね。 覚えておいて得するような状況はたぶん地獄だけどね!
0そうだね
プレイ済み
返信[22]
親投稿
In Japan rajimaru
少し見ぬ間にすごい…どうもありがとうございます! 理解までに少し時間がかかるかもしれません// 0って一体何者なんだ…
1そうだね
プレイ済み
返信[23]
親投稿
Godot orz_127
れいさん 言われてみればそうかも でもNaN、infも通常の値でないとの認識なのでエラーとして括っていましたw 2000年問題(Y2K)は、西暦は4桁なのだけど、昔のコンピュータは、メモリが少ないとか今のようにディスク容量もおおくないとかで19xxの19の分を切り捨てて下2桁でデータ化していたという話です。 昔のよく '80とか言う書き方を見たきがしますが最近 '15とかいう書き方を見たことがない。気のせい? 兎に角下2桁だったので2000年だと100になって桁溢れしたり、00になってしまったり、システムよっては00は、異常値として定義されている例もあるのでコンピュータが止まってしまうだとかなにが起こるか解らないというイベントでした。 多分ノストラダムスの予言が外れてしまったせいかとw おかげで0時に念の為でエレベータが停められ、1階から21階迄階段を登る羽目に orz
1そうだね
プレイ済み
返信[24]
親投稿
けい kei0baisoku
~0とは、インド人による史上最大の発明である~ なんか数字の歴史も、「0」が出来たのは1以上の数字が使われたよりもずっと後らしいですよ。 ゼロのお陰でコンピュータもbitで成り立ってるし、ルーレットでごっそり持っていかれます(T-T)
0そうだね
プレイ済み
返信[25]
親投稿
Hanzo rzsense
結局「極大」と「極小」はつながっており、「過去」と「未来」もつながっているという・・・手塚先生の「火の鳥」で見たような気が・・・ 「0」と言うのは、そのつなぎ目のことなのかも知れませんね。
1そうだね
プレイ済み
返信[26]
親投稿
In Japan rajimaru
……!?…??!? 思考を巡らせた結果「解がなく、正確な定義や証明ができないから取り合えずエラーにしておこう」となったのですが誤りですか……?
1そうだね
プレイ済み
返信[27]
親投稿
こう subwars
勝手にまとめる 今の仕様上、エラーを出したくなければ0で割らない
1そうだね
プレイ済み
返信[28]
親投稿
マギー M191246
ざっくりと言えばそんな感じです。 厳密にはinfでも-infでもnanでもない。 専用の表現を作れば できなくはなさそうですけど そこまではしなくて ただ旧来のBASICに合わせたただけという 感じがします。
0そうだね
プレイ済み
返信[29]
親投稿
マギー M191246
nanの一種になるのかな。 勝手に nan=不定値と思い込んでいて 上のように書いてしまいました。
0そうだね
プレイ済み
返信[30]
親投稿
MIKI ifconfig
Hanzo さん y = 1/x という写像を考えると、x!=0 で全単射だし lim{x→0} 1/x = ∞ lim{x→∞} 1/x = 0 なので、0 と ∞は一対一対応してるとも言えますね。 裏返した関係というか。 極とゼロ点は表裏一体というか。
1そうだね
プレイ済み
返信[31]
親投稿
マギー M191246
MIKIさんへ。 そうです。ヒドイヤツです。 世の中に、こんな… うそです。そんなことはないです。 In Jpapanさんが区別して考えてくれれば 矛盾はないと思うし 新しいことも覚えられたので 今回は許すことにします。
0そうだね
プレイ済み
返信[32]
親投稿
MIKI ifconfig
さ、さーせん!! リーマン球の構成方法は数直線に対しても成り立つと思うので(この場合「リーマン円」とでもなるのか)、ゆるしてください!! れいさん カントールの話は数直線も平面も濃度がアレフ1だって話ですね。 無限集合相手だと次のようなことが出来ます。 (1)地球上の全ての図書情報を文字コードとかJPEGとかwavとか使って十進数で符号化する。(10^1000000 とかの巨大な整数になります。) (2)符号化した巨大整数の前に "0." を付け加えます。これで巨大整数を 0 から 1 の間のある値(有理数(濃度=アレフ0))に変換できます。 (3)長さ1の数直線を用意し、(2)で変換した値に相当する位置にマークする。 (4)これで地球上の全図書を長さ 1 の数直線上の一点として符号化できました!!
1そうだね
プレイ済み
返信[33]
親投稿
In Japan rajimaru
Broke my brain in 0:1 意味;理解不能のため壊れました 数学は怖い。本当に。
2そうだね
プレイ済み
返信[34]
親投稿
Hanzo rzsense
うまい!座布団二枚!
2そうだね
プレイ済み
返信[35]
親投稿
ツララ LongIceSword
MIKIさんの無限集合の話は、RNDF()が1未満の数を返して来るのと何か関係あるのかな? 実は一回も使った事無いんですよね、RNDF()。
2そうだね
プレイ済み
返信[36]
親投稿
☆Tatsukin★ tatu_kin1192
逆算ができないためです。 2÷0=a とすると逆算は a×0=2 となります。 aに何を入れても2にならないので、 0除算はできません。
1そうだね
プレイ済み
返信[37]
親投稿
In Japan rajimaru
たくさんの教え、ありがとうございました! トピックを閉じます
2そうだね
プレイ済み