【補数と小数点と誤差】補数と小数点の基礎〜コンピュータ内部の誤差!

【補数と小数点と誤差】補数表示と小数点表示〜桁数の正規化と誤差
ハテオ君

補数、小数点、誤差など勉強しているが全く意味わからないなぁ。

今回はこの悩みを解決していきます。

本日の記事テーマ

補数と小数点の基礎知識と表示形式〜コンピュータ内部の誤差を徹底解説!

ITの基礎知識やIT資格の勉強をしていると必ず出てくるのが、数字(進数)です。この数字には、進数や情報量の単位また計算といった数多くの数字が出てきます。

数学が苦手な方にとっては結構きついですよね。私も元中卒だったのでとても苦労しました。

そのため今回の記事でわかりやすいように解説していますので参考にしてください。

本日の記事内容

  • 補数の基礎知識と表示形式
  • 固定小数点と不動小数点
  • コンピューター内部の誤差

記事の最後には、今回の内容に関しての確認問題も用意していますので、インプットとアウトプットとしても是非活用してみてください。

元中卒の私が誰でも理解できるように解説していきます。

それでは早速見ていきましょう!

黄島 成

補数の基礎知識と表示形式

補数の基礎知識と表示形式

コンピュータの内部では、1と0でしか表現が出来ません。しかし-(マイナス)記号を使えないため、負の数を表現することが出来ません。

そこで登場するのが「補数」です!

それではまず、この補数に関して詳しく見ていきましょう。

補数とは何か?

補数とは、ある数を決められた数にするための、補う数という意味。 

補数を理解するために、まずは10進数で考えてみましょう。10進数には、9の補数と10の補数の二つの補数がある。 

例:10進数3桁の「123」 という数値の場合

  • 9の補数=876 10進数の「123」に9の補数を補うと999となる。
  • 10の補数は=877 10進数の「123」に10の補数を補うと1000となる。
10の補数と9の補数図

9の補数では、10進数3桁の最大値となり、10の補数では、次の桁に桁上がりをします。

一般的に N 進数には「N-1 の補数」と「N の補数」があります。

  • 「ある数」に「N-1 の補数」を補うと、与えられた桁数の最大値となる
  • 「ある数」に「N の補数」を補うと、次の桁に桁上がる

では具体的に、10進数の補数を見てみましょう。

10進数3桁であるので、桁上がりをした4桁目の1は無視されます。

計算としては、123+877=000(千の位の 1 が無視)となる。

10進数の補数図

こつまり、877は123の対の負数(-123)という意味になります。

結論、このように補数を使えば負数を表現することが可能となります。

2進数の補数

2進数の補数についても考えていきましょう!2進数も10進数と同じイメージです。

2進数には、1の補数と2の補数があります。

例:2進数4ビットで0101の場合

  • 1の補数=1010
  • 2の補数=1011
2進数の補数図

簡単な方法としては、1の補数の場合は整数の反対の値にする。2の補数の場合は反対にした値に1を足す。そうすると簡単ですね。

では、2の補数を見てみましょう。

2進数の0101は4ビットであるので、桁上りをした5ビット目の1は無視されます。

2進数補数図②

ここ計算方法としては「0101+1011=0000」となり「1011 」は 「0101 」の対の負数の意味となっています。

多くのコンピュータでは、演算回路を簡単にするために2の補数を使って負数を表現しています。

このように補数を使うことで、減算を加算で処理することが出来てなお2の補数は次のように簡単に作ることができます。

2進数の補数図③
  • 1の補数・・・ビットを反転させる
  • 2の補数・・・1の補数に1を加える

 固定小数点と不動小数点

 固定小数点と不動小数点

コンピュータの内部で小数点数(小数点がある数)を表す場合は、小数点を意味するドット(.)を使わずに、0と1だけで表現します。

そのため、以下2種類の表示形式で小数点を表します。

  • 固定小数点形式
  • 浮動小数点形式

それでは順番に詳しく見ていきましょう。

固定小数点の表示形式

固定小数点表示とは、予め小数点の位置を決めておくモノ。

例:8ビットの2進数の場合

上位4ビットと下位4ビットの間に小数点があると決めておけば、01011010 が0101.1010を表していることになる。

実際には、01011010という整数であっても、それを0101.1010 という小数点数だとみなします。

固定小数点図

つまり固定小数点表示とは、小数点の位置を予め決めておく形式です。

ちなみに、マイナスの小数点数は最初に解説した2の補数表現で表します。

浮動小数点の表示形式(正規化)

浮動小数点とは、科学技術計算などに使われるモノ。

具体的には、指数を使って大きな数や小さな数を少ないビット数で表現できる特徴があります。

浮動小数点表示では、実数Yを「Y=M×BE」として、MとBをペアにして表現します。ここでは、以下内容が暗黙的に定められています。

  • Mは「仮数部
  • Eは「指数部
  • Bは「基数(または底)
不動小数点図

1つの数値を表現する仮数部(M)と指数部(E)の組み合わせは多くありますが、仮数部(M)と指数部(E)を調節して一意に決めることを「正規化」と言います。

例えば、10進数123は指数を使うと何通りも表現できてしまいます。小数点の位置がふわふわと浮いて移動するイメージです。

しかし仮数部を0.xxxx・・・で表現する」と予め決めておけば、一意に0.123×103と決まります。また、正規化をすることによって数値の精度を保つことができます。

例えば 、7 桁の仮数部を使って 10 進数 1234567 を表現してみましょう。

仮数部を使って 10 進数を表現図

このように精度を保つことも正規化を行う理由の 1 つです。

正規化は左へ数値をつめるため、つめた桁数を指数から引いてやるだけで良いです。

32ビット浮動小数点の表現形式

コンピュータ内部では、10進数ではなく 2 進数が使われています。

浮動小数点数も同じで、コンピューター内部では進数のビット列にして扱われています。

次の32ビット浮動小数点表示の形式で、10進数7.25を表してみます。

32ビット浮動小数点の表示形式

ここで、仮数部は 0.M(0.xxxxx…)になるように正規化します。順番に見ていきましょう。

①:10 進数 7.25 は正数なので、仮数部の符号(S)に0を入れます。

32ビット浮動小数点の表示形式①番図

②:10 進数 7.25 を 2 進数で表現すると、111.01 となり、仮数部が 0.M(0.xxxx…)になるように正規化します。

111.01 → 111.01×20 → (正規化) → 0.11101×23

仮数部(M)の最上位桁から順に11101、残りのビットに0を入れます。

32ビット浮動小数点の表示形式②番図

③:指数部3を2進数7ビットで表します。

指数部(E)に 0000011 を入れます。

32ビット浮動小数点の表示形式③番図

Excel のセルに「123456789012」を入力してみると、幅によっては「1.23E+11」とか「1.23457E+11」などと表示されることがある。

「E+11」の部分は、1011 を表します。

セルの幅によっては仮数部の桁数が変化し、1.23×1011 や 1.23457×1011 などと表現していることになります。

コンピューター内部の誤差

コンピューター内部の誤差

誤差とは、実際の数値とコンピューター内部で表現できる数値との間に生じたズレのこと

具体的には、電卓なら8桁・12桁などのように、表現できる桁の上限が決まっています。コンピューターも同じで、数値を指定されたビット数で表現しているために、真の値とコンピュータ内部で表現する値との間に差が発生します。

この差のことを誤差と呼ぶ!

誤差の種類

  • 桁あふれ誤差
  • 丸め誤差
  • 桁落ち
  • 情報落ち
  • 打ち切り誤差

順番に詳しく見ていきましょう。

誤差①:桁あふれ誤差

桁あふれ誤差とは、演算結果がコンピュータの表現できる範囲を超えることによって発生する誤差です。

コンピュータ内部では、数値を指定されたビット数で表現しているために、表現できる数値の範囲は決まっています。

この範囲を超えると、異なる演算結果が出てきます。

  • 表現できる範囲の最大値を超えることをオーバーフローと呼ぶ
  • 最小値を超えることをアンダフローと呼ぶ

桁あふれ誤差は、表現できる範囲を超えることと覚えておきましょう。

誤差②:丸め誤差

丸め誤差とは、指定された有効桁数で演算結果を表すために、切り捨て、切り上げ、四捨五入などを行うために発生する誤差です。

丸め誤差図

丸め誤差は、切り捨て、切り上げ、四捨五入と覚えましょう。

誤差③:桁落ち

桁落ちとは、絶対値のほぼ等しい 2 つの数の絶対値の差を求めたとき、有効桁数が減るために発生する誤差です。

例えば、浮動小数点 0.556×107-0.552×107を計算してみましょう。

有効桁数は仮数部 3 桁までとします。

桁落ち図

正規化すると末尾に「00」が付きますが、この00は正確性とは関係のない数字で、有効桁ではありません。

有効桁は 1 桁に減ってしまうことになります。

このように、桁落ちは有効桁数が減ってしまう現象のことだと覚えておきしょう。

誤差④:情報落ち

情報落ちとは、絶対値の非常に大きな数と小さな数の足し算や引き算を行ったとき、小さい数が演算結果に反映されないために発生する誤差です。

例:0.123×102+0.124×10-2を計算してみましょう。

情報落ち図

このように情報落ちは絶対値の小さな数の有効桁数の一部または、全部が結果に反映されてない現象のこと。

なお、数多くの数値の加減算を行う場合、絶対値の昇順に数値を並び替えてから計算すると、情報落ちの誤差を小さくすることができます。

誤差⑤:打ち切り誤差

打ち切り誤差とは、浮動小数点数の計算処理の打ち切りを、指定した規則で行うことによって発生する誤差です。

例えば円周率が 3.14159・・・と続きますが、計算処理を打ち切って3.14 とすることによって発生する。

つまり打ち切り誤差は、あらかじめ定められた規則の途中で打ち切られること。

この誤差は、覚えることがメインなので記憶勝負ですね。

今回のまとめ&確認問題

【補数と小数点と誤差】補数表示と小数点表示〜桁数の正規化と誤差まとめ

補数と小数点と誤差については上記内容で以上となります。

それではまず今回の内容をまとめていきましょう。

まとめ

  • 補数は、補う数ということで、負の数を表す時に使える
  • 固定小数点表示とは、小数点の位置を予め決めておく形式
  • 浮動小数点とは、桁数の正規化を行い数値の精度を保つ
  • 誤差とは、実際の数値とコンピューター内部で表現できる数値との間に生じたズレ

今回の確認問題「アウトプット用」

確認問題

情報処理の確認問題②

「次へ」で問題スタート!

①解説

【問題①】

2の補数で表された負数10101110の絶対値はどれか。

:01010000
:01010001
:01010010
:01010011

【解説】

補数とは、ある数を決められた数にするための、補う数という意味。

例:10進数3桁の「123」 という数値の場合

  • 9の補数=876
  • 10進数の「123」に9の補数を補うと999となる。
  • 10の補数は=877
  • 10進数の「123」に10の補数を補うと1000となる。

2の補数表現には、2回同じ処理を繰り返すと、元のビット列に戻るという特徴があるのでこれを利用して正解を求めます。

  • まず全ビットを反転させる。10101110→0101 0001
  • そして1を加えます。0101 0001 +1→0101 0010

つまり答えは「」となる。

②解説

【問題②】

負数を2の補数で表すとき、すべてのビットが1であるnビットの2進数"1111…11"が表す数値又はその数式はどれか。

:-(2n-1-1)
不正解×
:-1
正解○
:0
不正解×
:2n-1
不正解×

【解説】

2の補数表現された負数の絶対値を求めるには、2進数の整数を2の補数表現に変換するために行う「全ビットを反転してから1を足す」手順をもう一度実行します。

例えば、全ビットが1である負数「1111」で考えてみると、

  • 全ビットを反転。1111→0000
  • 1を足す。0000→0001

上記のように、絶対値が1の負数、すなわち2の補数表現での1111は10進数では「-1」であることがわかります。

同様に、

  • 全ビットを反転 1111 1111→0000 0000
  • 1を足す 0000 0000→0000 0001

さらに、

  • 111 1111 1111→000 0000 0000
  • 1を足す 000 0000 0000→000 0000 0001

などのようにどれだけ桁が増えても2の補数で表現さた"1111…11"は-1を表していることになります。

つまり答えは「」となる。

③解説

【問題③】

0以外の数値を浮動小数点表示で表現する場合、仮数部の最上位桁が0以外になるように、桁合わせする操作はどれか。ここで、仮数部の表現方法は、絶対値表現とする。

:切上げ
不正解×
:切捨て
不正解×
:桁上げ
不正解×
:正規化
正解○

【解説】

浮動小数点表示における正規化は、仮数部と指数部を調整することで、仮数部の最上位桁が0以外になるように桁合わせする操作です。

正規化の目的は、有効桁数を最大化し、丸め誤差をできるだけ少なくすることです。

つまり答えは「」となる。

最後まで読んでいただきありがとうございました!

今回の内容が、役に立ったな!と思ったらシェア&ブクマ登録よろしくお願いします。

また、質問や問い合わせに関しては、コメント欄かお問い合わせフォームを活用ください。

それではまたお会いしましょう。

黄島 成

-情報処理
-