第3講 数字を入れる箱を活用しよう

第5話 割り算の不思議な結果
第4話問題解答例
#include<iostream>
using namespace std;
int main(){
  short a,b;     //a,bは短整数を入れる箱
  a=12;
  b=7;
  cout<<"a="<<a+0<<endl;
  cout<<"b="<<b+0<<endl;
  cout<<"a+b="<<a+b<<endl;
  cout<<"a-b="<<a-b<<endl;
  cout<<"a*b="<<a*b<<endl;
  cout<<"a÷b="<<a/b<<endl;
}
実行結果
入門

皆さんの解答も同じでしたか。
ところで、この結果を見て不思議に感じませんか。
足し算、引き算、かけ算は正しい結果が出ていますが、
割り算はおかしいですよね。
12÷7=1.71428571428571・・・
C言語&C++では同じ型同士の計算結果も同じ型になることになっています。
今回は、短整数(short)型同士の計算ですから割り算の結果も短整数型になるのです。
そこで、小数部分は切り捨てられて、
1.71428571428571・・・は1になってしまうのです。

ならば、解消策は何でしょうか。
もちろん、aとbを単精度実数型(float)の箱に変更すれば問題は解消します。
ですが、単精度実数型(float)の箱は容量が4バイトで短整数(short)型の箱の2倍の大きさです。
大は小を兼ねますので、単精度実数型(float)の箱に変更してもよいのですが、
箱が大きくなる(容量が大きくなる)と、運ぶのに時間がかかるようになります。
大きな箱はほんの少ししかものが入っていないのです。
箱の大きさは、プログラムの処理速度に決定的に影響を与えます。
実際上はそんなに単純ではありませんが、
イメージとしては箱の大きさに処理速度は反比例すると思ってください。
容量が2倍になれば、処理時間も2倍です。
もちろん、今扱っている12×5程度の計算では、
単精度実数型(float)の箱に変更したとしても、
コンピュータは0.000001秒もかからず計算してしまいますので、
箱の大きさ=メモリー容量など気にする必要はありません。
しかし、将来は数独自動生成ソフトのような計算量が膨大なプログラムにも挑戦します。
数独で扱う数字は、1~9ですから、4バイトの大きさの箱を使うのはもったいない話です。
1バイトの文字(char)型で十分です。
箱を単精度実数型(float)から文字(char)型に変更するだけで、
速度はざっと4倍になります。
実際上は、数独自動生成ソフトのプログラムは大変複雑なプログラムになりますので、
軽く10倍以上速度は速くなります。
箱は、必要に応じたものにするが鉄則です。
#include<iostream>
using namespace std;
int main(){
  short a,b;     //a,bは短整数を入れる箱
  a=12;
  b=7;
  cout<<"a="<<a+0<<endl;
  cout<<"b="<<b+0<<endl;
  cout<<"a+b="<<a+b<<endl;
  cout<<"a-b="<<a-b<<endl;
  cout<<"a*b="<<a*b<<endl;
  cout<<"a÷b="<<a/b<<endl;
}
実行結果
入門
の問題は割り算だけです。
そこで、次話では型変身(専門用語では、キャスト=型の強制的変更)を話題にします。
割り算のときだけ、短整数型を単精度実数型に変身させてやるわけです。
短整数型aを単精度型実数に変身させるには、
(float)a
とします。では皆さん改良してみましょう。



第4話へ 第6話へ

a

初心者のためのjava 入門 基礎から応用まで
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第1部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第2部
初心者のための VC++による C言語 入門 C++ 入門 基礎から応用まで第3部
初心者のための世界で一番わかりやすいVisual Basic入門基礎講座へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座へ
VC++入門
VBA入門
専門用語なしのVBA入門
VB入門
初心者のためのEclipseによるJava入門