☆コンピュータに扱える数値には範囲があります。 その5 コンピュータ内における整数値同士の割り算の計算順序について考察してみます。 

☆コンピュータに扱える数値には範囲があります。 その5 コンピュータ内における整数値同士の割り算の計算順序について考察してみます。 



ソーラー 「マックス 


いま


計算式


(10000 + 888100-555) * 100000/ 55


(10000 + 888100-555) * 100000/ 55の中から


100000/55 "だけ"を引き抜いて計算しましたね。


この計算式


(10000 + 888100-555) * 100000/ 55



コンピューター内💖💖💖💖💖💖💖💖では


まず


(10000 + 888100-555)=897545が計算され


次に


その897545と100000がかけあわされた


89754500000を


最後に55で割るという順序で


計算されています


つまり


100000/55を先に引き抜いて


計算しても(100000/55を計算すると小数点以下の部分が出てくるのでその部分を切り捨てて整数値だけをのこしても)


そのような


計算順序でコンピュータは計算を行っていないので


意味ないかもしれない・・・?」


ぶーにゃん 「うちも そうおもうにゃん。」


マックス 「ぬわにぃ」


ソーラー 「マックス これを見てください。


 4×1

________ =2  

  2


マックス 「? これは?」


ソーラー 「いま私たちが


計算式


(10000 + 888100-555) * 100000/ 55に


ついておこなったことを


わかりやすく


この


 4×1

________ =2  をもちいて説明してみます。

  2


ソーラー 「このすぐ上の計算式はまちがっていないですね。


マックス?」



マックス 「ああ。」


ソーラー

NOW


わたしたちは


(10000 + 888100-555) * 100000/ 55の


100000/ 55を抜き出して先に計算しました。


これは


 4×1

________ =2 

 2


において


1/2を抜き出し計算したことになります。


つまり


4  ×  1

___   _____ と式を分割したことになります。

1     2


                              」

(10000 + 888100-555) ×100000/ 55と式を分割したことになります」



マックス 「そうだが・・・???」



ソーラー 「つまり


前のエピソードの計算のときも


そうなのですが


マックスは


このように


 4×1

________  

 2


から


1/2を


とりだして


先に1/2だけに整数値同士の割り算


のルールを適用したというわけです。


つまり


とりだした


___ の計算結果を


___ =0.5


でなく



(整数同士の割り算の結果は小数点以下を

切り取られるというルールにより)


0.5の小数点以下の部分が切り取られ



___ =0



したのですね。



(10000 + 888100-555) ×100000/ 55


なら


100000/ 55の計算結果の小数点以下の部分が切り取られるので


(10000 + 888100-555) ×1818


にしたというわけです





マックス「ああおう💦 マ、マズイかも・・」


ソーラー


「そうなると


4    1      

___ ×  _____ の計算結果は

1     2 



4    1    4   

___ ×  _____ =_____ ×  0 =0

1     2    1 


という結果になってしまいます。(^^)


2にならないですね。



(10000 + 888100-555) ×100000/ 55の計算結果は


1631900000


なのですが



(10000 + 888100-555) ×1818の計算結果は


1631736810


となってしまいます





。。。。。。。。。。。。。。。。。。。。。


ちょこっと解説


整数値1と2同士の割り算


1/2


の計算結果は


実際にプログラムを組んで確かめてみるとわかるように


#include <stdio.h>


int main(void)

{

printf("あなたの預金額はただいま%d円です。\n",1/2);

return 0;

}


プログラムの実行結果


あなたの預金額はただいま0円です。



0になります


ちょこっと解説

。。。。。。。。。。。。。。。。。。。。。。


明らかに

この結果はおかしいですね。マックス。


4    1       

___ ×  _____ =2

1     2     


にならなければ いけないのですから



このようになったのは一部分の1/2だけとりだして


いきなり1/2に


整数値同士の割り算のルールを適用したからなんですね


コンピュータの計算においては


 4×1

_________  

  2



     💖数式の上辺4×1が計算されたあと、出た計算結果4を💖


         💖下辺の2で割るという順序で💖


計算が行われ


その上辺の計算結果4を2で割る時に


整数値同士の割り算のルールが適用されるんです


同様に


(10000 + 888100-555) * 100000/ 55



数式の上辺(10000 + 888100-555) * 100000が計算され、


出てきた計算結果89754500000を


下辺の55で割るという順序で


計算が行われます。


その上辺の計算結果89754500000を55で割る時に


最後に


整数値同士の割り算のルール


    🌞計算結果に小数点以下の部分が出てくる場合は🌞


      🌞小数点以下の部分が切り取られる🌞


が適用されることになるんです」



マックス 「ううっ いやあん。」


顔を両手でうめるマックス。


ソーラー 「つまり

                 

(10000 + 888100-555) * 100000/ 55で


さきに


100000/ 55をとりだして


整数値同士の割り算のルールを適用したら


計算結果がおかしくなるんだな これが。


さきに


100000/ 55をとりだして実行したなら


100000/ 55は


1818.181818181818・・・・・


なので


小数点以下の部分が切り取られ


1818となります


それに


(10000 + 888100-555)が掛け合わされる


(10000 + 888100-555) * 1818


が実行されると


計算結果は


1631736810


となります


ですが


プログラムにおいて



(10000 + 888100-555) * 100000/ 55は


ふっつうに上辺すべてを計算してから


55で割るという順序で計算が行われます


この場合は


小数点以下の部分が出てこないので


小数点以下の部分が切り取られるようなことが起こることもなく


計算結果は


1631900000となります・・・


というかなるはずなのですが・・・・・・」


マックス「ふっつ~~ん💖」



ソーラー「



つまるところ 冒頭で述べたように


(10000 + 888100-555) * 100000/ 55



まず(10000 + 888100-555)=897545が計算され


次にそれが100000とかけあわされ



     "最後に55で割る"という順序で



コンピューター内で計算されているのです。


ようするに


コンピュータの計算順序は


上辺が全て計算されてのち、その計算結果が


下辺で割られるという順序になっているんだね。😊


(^^)/」



ぶーにゃん ソーラー 


「とはいっても 私たちも大分以前には


この仕組みを理解してなかったんだな。


( ̄∇ ̄;)ハッハッハ(*´▽`*)」


マックス 「あっああん💧 てんC なぐさめて お願いぃ」


てんC 「ま、まだ大丈夫です。これから これから」


ソーラー 「猫、ぶっかけちゃえ~~(^^)」


猫をほうりなげる。


ぶーにゃん 「にゃ~~~ん💖」


🐈~~🐈~~🐈


空中で🐈をダイビングcatch


マックス 「それ   あはは、気持ちいいじゃないか~」





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

作者を応援しよう!

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

応援したユーザー

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

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る