コンピュータの得意な計算と苦手な計算

記事
IT・テクノロジー

コンピュータの得意な計算と苦手な計算

プログラムを書く場合、性能も大切な要素です。実はコンピュータには得意な計算と苦手な計算があるのをご存知ですか?この記事では、コンピュータの得意な計算と苦手な計算について紹介します。


コンピュータがやっている事は大きく分けて三つです

コンピュータの頭脳は CPU と呼ばれる部品です。プログラムではこの CPU を使って必要なデータ処理を行なってきます。細かく分けると色々分ける事ができますが、大まかに CPU がやっている事を分類すると三つのグループに分ける事ができます。

* メモリアクセス
* 計算
* プログラムの実行の順序の変更
です。メモリアクセスは、コンピュータのメモリから処理するデータを CPU の中に持ってくる処理です。その持ってきたデータを計算(演算)します。また、別のメモリアクセスは、計算結果をメモリに書くと言う処理もあります。

最後のプログラムの実行の順序の変更は、プログラムは基本的にメモリに入っている「命令」を順番に実行しますが、条件によって処理の内容を変えたり、ループを作ったりする際は実行の順番を変える必要があります。その順番を変更する命令のグループがあります。

細かく分けるともう少しいろいろな機能がありますが、基本はこの三つの機能という事になります。

得意な計算と苦手な計算

コンピュータは「計算(演算)」が得意なのですが、実は得意な計算と苦手な計算があります。

これは意外に知られていませんが、簡単に言ってしまうと、足し算や引き算、ビットをシフトしたり、論理演算と言われる「AND」「OR」「NOT」などのような計算は得意です。 一方で、掛け算や割り算は基本的に苦手な計算です。

そんな馬鹿な!と思うかもしれませんが、計算にかかる時間が違います。

掛け算や割り算は、足し算や引き算に比べると数倍の時間がかかります。要は計算にかかる時間の違いの事をこの記事では、「得意」と「苦手」という言葉を使って表しています。

どれくらいの計算をするか?

実際にプログラムを書いてどれ位の計算をしているかを示すのが「計算量」と呼ばれる物です。 この計算量を考える場合、足し算や引き算、論理演算やビットのシフトは基本的に無視しても余り影響がありません。プログラムで計算量を評価する場合通常は掛け算や割り算の回数を数えて計算量の評価にします。

プログラムを書いていて、そんなに計算していないように思う場合も多いと思いますが、プログラムのデータ処理の正体は実は計算です。実際は文字列の処理でもやっているのは実は数字の計算です。文字というのは、人間が認識できる文字を数字で表して処理しているので、実際にコンピュータがやっているのは数字の計算です。

文字列の場合は、割り算や掛け算をするケースは少ないですが、データの処理では掛け算や割り算の処理も入ってきます。例えば、平均値を求めるには割り算が必須になりますし、お金の計算などでは掛け算もたくさん使います。例えば、単価が XXX 円の商品を OO 個買った場合の値段などは当然掛け算で処理する事になります。

性能は計算量と実行する命令の数で決まる

コンピュータの処理時間は、計算量、基本的に乗除算の回数と、実行する命令の数である程度見積もる事ができます。

命令の数と言われると何かピンとこないと思いますが、実は通常のプログラミング言語でプログラムを書いている場合、命令の数は普通は分かりません。理由は簡単で、殆どのプログラミング言語は人間にわかりやすいように、英語を基に記述するように設計されているからです。 これを、CPU が理解できる「命令」に変換して実行しているため、通常はプログラムからは命令の数は分かりません。

なので、どんな処理に掛け算や割り算を使うのかを知っていると参考になります。 割り算や掛け算を多用するような処理は、

* プログラムで記述した掛け算や割り算
* 数学関数(三角関数、指数関数などの数学で使う関数を使った演算)
* ディスプレーなどの座標の計算(グラフィックス)
などです。

* 通常の処理(ループの処理)
* 文字列の処理
などは、通常は足し算、引き算といった「得意な演算」で行えます。

掛け算や割り算が多くなる処理は計算量が多くなり、それをループなどで行うような処理は計算量が増えるため、処理に時間がかかります。例えば、行列の計算などは処理に時間がかかる例になります。

まとめ
プログラムで処理に時間がかかる計算には、掛け算や割り算があります。 こうした処理が増えるようなプログラムでは、プログラムの処理のやり方を工夫すると処理時間を短縮できる場合もあります。

特に大きなデータを繰り返し処理するようなプログラムを開発する際は、計算量を見積もって何か計算量を減らす方法があるかを検討すると処理を大幅に改善する事ができます。

一方で、足し算や引き算、シフトや論理演算などは、割り算、掛け算に比べると高速で処理できるのと、減らすのが困難な場合が多くなっています。

プログラムの実行が遅い場合には、計算量を意識してみると何が処理に時間がかかる原因かがわかる場合があります。
サービス数40万件のスキルマーケット、あなたにぴったりのサービスを探す