算術演算と誤差の基礎まとめ【シフト演算・オーバーフローも解説】

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

 集合と論理演算を理解したら,次に押さえておきたいのが「算術演算と誤差」です。基本情報技術者試験をはじめとする情報処理技術者試験では,コンピューターがどのように計算を行い,その結果にどのような誤差が生じるのかを理解していることが前提となります。しくみをしっかり理解できていますか?

算術演算=2進数で行う計算処理

誤差=計算結果に生じるズレ

 算術演算は,加算・減算・乗算・除算といった基本的な計算処理であり,コンピューター内部ではすべて2進数のビット列として処理されます。特に,減算を2の補数によって加算に変換するしくみや,シフト演算による効率的な乗算・除算の考え方は重要なポイントです。一方,誤差は,コンピューターが有限桁の数値しか扱えないことにより発生するズレのことをいいます。桁落ちや情報落ち,丸め誤差,オーバーフローなど,それぞれの特徴を理解しておくことで,計算結果を正しく判断できるようになります。

 このページでは,算術演算の基本から,2の補数やシフト演算の考え方,さらに誤差の種類と特徴までをシンプルに整理しています。試験対策として必要な知識を一通り確認できる構成になっているため,初学者の方でも無理なく学習を進めることができます。

広告

算術演算とは(加算・減算・乗算・除算)

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

加算とは(2進数の足し算の仕組み)

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

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

減算とは(2進数の引き算の仕組み)

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

 2の補数の求め方については,「数値表現の基礎まとめ」を参照してください。

広告

乗算とは(2進数の掛け算の仕組み)

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

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

論理シフトとは(符号なしビット列のシフト)

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

算術シフトとは(符号付きビット列のシフト)

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

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

左シフトのまとめ

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

2n倍以外の乗算の方法

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

除算(2進数の割り算の仕組み)

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

※ 整数の場合,端数は切り捨てられる

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

論理シフトとは(符号なしビット列のシフト)

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

算術シフトとは(符号付きビット列のシフト)

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

右シフトのまとめ

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

練習問題(加算・減算・乗算・除算)

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

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

広告

誤差とは(計算で生じるズレの種類)

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

絶対誤差と相対誤差(定義と例)

 絶対誤差とは,実際の値と,測定値や演算結果との差のことをいいます。

 相対誤差とは,実際の値に対する絶対誤差の割合のことをいいます。

絶対誤差 = | 測定値(演算結果)- 実際の値 |

相対誤差 = 絶対誤差実際の値

※ 絶対値…絶対値は,0からどれだけ離れているのかを表す値のことをいい,|を用いて表す。例)|3| = 3,|-2|=2

例)重さが100gの物体を測定した結果,99gであった。この場合の,絶対誤差と相対誤差は,

絶対誤差 = | 99 - 100 | = | -1 | = 1g

相対誤差 = 1100 = 0.01(1%)

となる。

誤差の種類

桁落ち(値が近い数同士の減算の誤差)

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

有効桁数(信頼できる桁数の考え方)

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

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

情報落ち(大きい値+小さい値の誤差)

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

丸め誤差(桁を丸めることによるズレ)

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

打ち切り誤差(途中で計算を切ることによるズレ)

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

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

オーバーフロー(表現範囲超過による誤差)

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

アンダーフロー(極小値で表現できない誤差)

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

まとめ

 今回は,算術演算と誤差についてシンプルにまとめてみました。算術演算では,加算・減算の基本に加え,2の補数によって減算を加算に変換するしくみや,シフト演算による乗算・除算の考え方を理解することが重要です。また,誤差については,桁落ちや情報落ちのような計算過程で生じるものから,丸め誤差や打ち切り誤差,オーバーフローやアンダーフローといった表現範囲に関わるものまで,それぞれの特徴を区別して理解しておくことが重要です。
 算術演算と誤差は,コンピューターの計算処理のしくみを理解するうえで欠かせない基礎分野です。確実に得点源にするためには,実際に計算しながら手順を確認し,誤差が発生するケースも含めて繰り返し学習することが近道です。

 理解が進んだら,基本情報技術者試験の過去問題にもチャレンジしてみてください。