1.1.1.3.演算精度
1.1.1.3.演算精度
前回までで、コンピュータが数値をどのように管理しているのかを説明しました。今回は、それらの数値をどのようにコンピュータが演算するのかについて説明します。
演算の方法上、発生する誤差についても説明します。
重要用語
- レジスタ
- シフト演算
- 算術シフト
- 論理シフト
- 誤差
スポンサードリンク
目次
レジスタ
レジスタ:【英】register レジスタとは、マイクロプロセッサ内部にある、演算や実行状態の保持に用いる記憶素子。動作が極めて高速だが容量が小さい。役割によって、アキュムレータ、スタックレジスタ、プログラムカウンタ、割り込みレジスタ、フラグレジスタなどの種類があり、様々な用途に使えるもの(汎用レジスタ)と機能や用途が限定されているものがある。
出典:IT用語辞典 e-Words(http://e-words.jp/)
コンピュータ上の演算はこのレジスタ上で行われます。レジスタの桁数は、有限であるため計算精度には限界があり、誤差が発生する場合があります。
コンピュータ上には演算回路が備えられており、四則演算やシフト演算ができます。シフト演算は、けた移動をする処理ですが前回にも出てきたように、
2進数では、2倍や1/2倍の処理がけた移動で表現できるため、演算が簡単で組み合わせることでいろいろな演算に利用できます。
シフト演算
算術シフト
算術シフト
- 正負を考慮した数値データとしてデータを扱う場合に利用
- 固定小数点表示で利用(先頭ビットが符号ビットであることを考慮)
- 算術左シフト
- 移動の結果空いた右端のけたには0を挿入
- 左にnビットシフトすると、2n倍となる
- 算術右シフト -移動の結果空いた左端のけたには符号ビットと同じ値を挿入 -右にnビットシフトすると、2^-n倍(1 / 2n 倍)となる
論理シフト
- データをビットの並びとして扱う場合に利用
- フラグ管理などで利用
- データを左または右へシフトし、空いたけたには0を挿入
- 算術シフトのようにシフト前後で数値が何倍になるというような関係はない
誤差
コンピュータで演算を行うレジスタは桁数が有限なため、入りきらない桁は無視されるなどされ、演算結果には本当の値とズレが発生します。これを誤差と言います。
- 丸め誤差
- レジスタに入りきらない桁数(無限小数など)を四捨五入・切り捨て・切り上げなどのルールに従って、レジスタの桁数に収める際に発生する誤差
- けた落ち
- 限りなく近い2個の数値同志の引き算を行った場合に、元の有効桁数に比べて、計算結果の有効桁数が著しく減少する現象
- 有効桁数が小さくなった数値に大きな値を掛けるなどすると、大きな誤差が発生する場合もある
- 情報落ち
- ひじょうに大きい値と、小さい値の加減算した場合に、両者のけたを揃えることで、小さい値の方の情報が仮数部に入りきらない現象
- 絶対値の小さな値から演算を行うことでこの誤差を少なくできる
例題:基本情報技術者(FE) H28春 午前 問1
問1 数値を2進数で格納するレジスタがある。このレジスタに正の整数xを設定した後、”レジスタの値を2ビット左にシフトして、xを加える”操作を行うと、レジスタの値はxの何倍になるか。ここで、あふれ(オーバフロー)は、発生しないものとする。
ア 3 イ 4 ウ 5 エ 6
例題:基本情報技術者(FE) H27春 午前 問2
問2 桁落ちの説明として、適切なものはどれか。
ア 値がほぼ等しい浮動小数点数同士の減算において、有効桁数が大幅に減ってしまうことである。
イ 演算結果が、扱える数値の最大値を超えることによって生じるエラーのことである。
ウ 浮動小数点数の演算結果について、最小の桁よりも小さい部分の四捨五入、切り上げまたは切り捨てを行うことによって生じる誤差のことである。
エ 浮動小数点数の加算において、一方の数値の下位の桁が結果に反映されないことである。