「割り算」を足し算のみで計算してみます そして なぜ整数値同士の割り算の計算結果が整数になるのかについて考察してみます

ソーラー「13+3=・・・


13=5+5+5です。


こ、これは・・・」


マックス 「はい、はい、


13=5+5+5=15ででっぱちゃったい。


みんなすぐにもどりましょうね~


13=4+4+4


はい、おさまってますね~。


よろしくおねがいいたします。」


ソーラー「そんなに5は誌上デビューしたかったんですか?」


マックス 「はい、はい、みんなすぐにもどりましょうね~


13を三つの部分にわけるのに5を使うと


13=5+5+5(3つの5の部分)=15となりました。


5では大きかったようです。


そこで


13=4+4+4にまでもどり


今度は4に0.1を加えた


4.1をたしあわせていきましょう。」


ソーラー「??・・・」


マックス 「


13=4.1+4.1+4.1=12.3


これではまだ13になりません。


4.1に0.1をたした4.2では・・・


13=4.2+4.2+4.2=12.6


これではまだ13になりません。


さらに0.1を加えた


4.3を足し合わせていくと


13=4.3+4.3+4.3=12.9


これではまだ13になりません。


さらに0.1を加えた


4.4を足し合わせていくと


13=4.4+4.4+4.4=13.2


やっぱり、でっぱりました~~~\(^^)/


ソーラーさん?」


ソーラー 「やっぱり、春がきたんですね。マックス」


マックス


「そこでひとつ前の


13=4.3+4.3+4.3=12.9までもどり


今度は4.3に0.01をたしていきましょうね~。


13=4.31+4.31+4.31=12.93


これでも13になりません。


そこで


今度は4.31に0.01をたしていくんじゃ


13=4.32+4.32+4.32=12.96


これでも13になりませんのじゃ。


じゃよ~~~(^^)/


そこで


今度は4.32に0.01をたしていくんじゃ


4.33にするんじゃ


13=4.33+4.33+4.33=12.99


おしいィィィ・・・


そこで


今度は4.33に0.01をたしていくんじゃ


13=4.34+4.34+4.34=13.02


またでっぱっちやったの・・」


ソーラー「またでっぱっちやったの・・・・・」


マックス 「あたしは、あたしはうれしい、」


ソーラー 「うれしいんんですか!」


アレサ 「嬉しいんですか?」


マックス 「そこで


13=4.33+4.33+4.33=12.99にもどり


今度は


4.33に0.001をたしていきます。


13=4.331+4.331+4.331=12.993


これでも


13にならないな・・・」


ソーラー「どうやら


このまま足し算のみで割り算を実行すると


13÷3の答えは4.33333・・・・


と無限小数になりそうです。」


マックス


「もっと計算しようとおもったが


先にいわれてしまったか・・・


やるな、ソーラー 


パソ電卓で計算しても


13÷3の答えは4.33333・・・・


になる。


まあ、いろいろあったが


つまり


足し算のみの組み合わせで割り算の結果も


4.33333・・・・と


あらわすことができたのだ。


ふふふ


そしてさらに俺には必殺技があるのだ。


ソーラー「必殺技・・・?」


マックス 「13÷3=


13と3はint型におさめられているよなあっ


ふわあはははははははははは・・・」


ソーラー 「そ、それは・・・まさかあー」


マックス 「int型同士で割り算をした場合は


13÷3=4.33333・・・と小数点以下がでた場合は


小数点以下の値はきりとられ


13÷3=4となるのだったなあ・・・はははは


つまり


整数の型、int型同士の割り算


ではきれいに割り切れず小数点以下の余りが出た時点で


コンピュータは計算終了している。


だから俺たちが


割り算を足し算のみであらわしたい場合でも


コンピュータにならって


答えは整数部分4がでたところでやめればいいのだあ。


ふはははあっ


めちゃくちゃ計算簡単に終わるじゃないか。


無限に割り算を足し算であらわして計算していくと


時間もかかるし、もしこの計算をおこなったあとに別の命令文があったら


なおさら、その別の命令文にとりかかるのに時間がかかるからな


コンピューターも無限計算は大変だからなあ。


あっあう」


アレサ 「00001111111?????」


マックス


「あっああっ 


きた、きたァ


 まさか それで



『int型(整数)同士で割り算をした場合は


13÷3=4(通常の計算結果では4.33333・・・)


5÷2=2(通常の計算結果では2.5)


7÷4=1(通常の計算結果では1.75)


と小数点以下がでた場合は


なんでもかんでも小数点以下の値はきりすてられる』



のは、


コンピュータにえんえんと無限に計算をさせないために


int型同士で割り算をした場合は


小数点以下の値はきりとられ、


整数値のみがのこる仕様にしたのか?


とくに初期型のコンピュータではこの方式は有効だったんじゃないか?


その名残がまだ今のコンピューターに残っている・・・?」


ソーラー 「む、むう、ふざけて遊んでいるうちに・・・


なんか意外な考察がえられました・・・


確かにそれも1理ある考え方です・・・


まあ、


intの型4バイト内に割り算の計算結果をおさめるというシステムも


絡んでいるのかもしれないですが・・・


(天国にいけるC言語入門 自然の妙 すばらしい自然のシステム


のエピソードで語られていることも多少からんでいます。)


でも、いろんな状況がからみあって今のコンピュータが


つくられてきたと思うので


その考え方もint型同士で割り算をした結果が整数になるのに


影響をあたえたのかもしれませんね。」


マックス 「まあ、いまの


int型同士の割り算


13割る3の場合だけでなく


13.0割る3.0とdouble型同士の割り算の場合でも


いいアイデアあるう~んだよ ソーラーよ」


ソーラー 「ほ、ほう?」



















  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます