算術演算と誤差 -情報処理シンプルまとめ

算術演算と誤差に関するブログのアイキャッチ画像 基礎理論

 基本情報技術者試験など情報処理技術者試験を受験する方にとっては必須の,算術演算と誤差についてシンプルにまとめています。算術演算については,加算の説明からスタートし,減算は2の補数を使用して加算で処理すること,2n12n倍はシフト演算(論理シフトや算術シフト)を使用して処理することなどを説明しています。誤差については,桁落ちや,情報落ち,丸め誤差,打切り誤差,オーバーフロー,アンダーフローについて説明しています。じっくり読んでみましょう。

算術演算

 算術演算とは,加算,減算,乗算,除算,剰余,べき乗などの演算のことをいいます。

加算

 2進数1桁の加算は,次のとおりです。

 1バイトの符号付き整数の加算は,次のとおりです。

減算

 コンピューターでは,負の数の表現に2の補数を使用します。2の補数を使用すると,減算を加算で処理することができます。1バイトの符号付き整数の減算は,次のとおりです。

 2の補数の求め方については,「数値表現 -情報処理シンプルまとめ」を参照してください。

乗算

 乗算は加算の繰り返しで処理できますが,繰り返す回数が多いと時間がかかります。そのため,乗算ではシフト演算も使用します。シフト演算とは,2進数のビット列を右や左にずらす操作のことをいいます。1ビット左にシフトすると2倍(=21倍),2ビット左にシフトすると4倍(=22倍),…となりますので,nビット左にシフトすると2n倍になります。

nビット左にシフト ⇒ 2n

論理シフト

 論理シフトは,符号ビットのないビット列に対して行うシフト演算です。

算術シフト

 算術シフトは,符号ビットのあるビット列に対して行うシフト演算です。符号ビット以外をシフトします。

乗算時の算術シフトに関する説明画像

左シフトのまとめ

あふれた桁空いた桁
論理シフト
算術シフト
無視0を入れる

2n倍以外の乗算

 左シフトにより2n倍は効率よく求めることができますが,3倍,5倍など2n倍以外の場合は,左シフトと加算で処理をします。たとえば,ある値の5倍は,5倍=(22+1)倍と考えることができますので、「2ビット左にシフトして元の値を加える」ことで求められます。

除算

 除算の場合もシフト演算と加算を使用します。nビット右にシフトすると 12n 倍になります。

nビット右にシフト ⇒ 12n

論理シフト

 論理シフトは,符号ビットのないビット列に対して行うシフト演算です。

算術シフト

 算術シフトは,符号ビットのあるビット列に対して行うシフト演算です。符号ビット以外をシフトします。

右シフトのまとめ

あふれた桁空いた桁
論理シフト余り0を入れる
算術シフト符号ビットと同じ値を入れる

練習問題

 各数値を1バイト符号付き2進数に変換して計算しなさい。

① 55+31   ② 31-55   ③ 3×8   ④ 8×3   ⑤ 31÷8

誤差

 コンピューターではバイト単位で有限桁の数値を扱うため,円周率など無限桁の数値を扱う場合や計算過程などで誤差が生じることがあります。

桁落ち

 桁落ちとは,値がほぼ等しい2つの数で減算をしたときに有効桁数が減ってしまうことをいいます。

有効桁数

 有効桁数とは,信頼できる桁数のことをいいます。

有効桁数
12344
3.253
1.02
0.01253
0.1×1051
0.100×1053

情報落ち

 情報落ちとは,絶対値の大きい値と小さい値で加算や減算をしたときに,絶対値の小さい値が計算結果に反映されないことをいいます。

丸め誤差

 丸め誤差とは,有限桁で表しきれない数値に対して,四捨五入や切り上げ,切り捨てをすることにより生じる誤差のことをいいます。

打ち切り誤差

 打ち切り誤差とは,計算を途中で打ち切ることによって生じる誤差のことをいいます。

 2,4,6,…のように数が列になったものを数列といいます。また、2+4+6+…のように数列の各値を順にプラス記号でつないだものを級数といいます。級数の各値はといい、この項が無限にあるものを無限級数といいます。

オーバーフロー

 オーバーフローとは,計算結果が表現可能な桁数を超えた場合に生じる誤差のことをいいます。

アンダーフロー

 アンダーフローとは,計算結果が0に近くなりすぎて表現し切れなくなった場合に生じる誤差のことをいいます。たとえば,浮動小数点数では,0や0に近い数値を表現することはできません

まとめ

 今回は,算術演算と誤差について,シンプルにまとめてみました。加算や減算,乗算,除算については,仕組みをしっかり理解し,誤差については,確実に覚えるよう努めましょう。