わかりやすく 負の数 小数 どう表す
これまでは0、1、2のような正の整数だけを扱ってきました。では、マイナス5度や赤字の残高、3.14のような数は、どうやって0と1で表すのでしょうか。これにはうまい方法が二つあります。
先頭のスイッチ一つを符号に使う
負の数を表す一つ目の考え方は単純です。
スイッチを一つ取り分けて、符号専用に使うのです。
先頭が0なら正、1なら負と決め、残りのスイッチで大きさを表します。
先頭のマスが符号、残りのマスが大きさを受け持ちます。
先頭のマスだけを変えると、+5が-5になります。
簡単ですが、不便なところがあります。
計算のたびに符号を別に気にしなければならず、0が二つもできてしまいます。
+0と-0の二つです。
ぐるりと一周させて負の数を作る
そこでコンピュータが実際に使う方法は、もう少し賢いものです。
自動車の走行距離計を思い浮かべるとわかりやすいでしょう。
9999から1進むと、0000に戻ります。
逆に0から1引くと、いちばん最後の数に戻ります。
この性質を使って、最後のほうの数を負の数として使うことにしたのです。
同じビットでも、一周して回り込んだところは負の数として読みます。
この方法を2の補数と呼びます。
よいところは、負の数を足すときもふつうに足すだけで、加算回路がちゃんと正しい答えを出してくれることです。
引き算の回路を別に作らなくてすむので、コンピュータはこの方法を選びました。
小数点は浮かんでいる
次は3.14のような小数です。
秘密は名前に隠れています。小数点が一か所に固定されず、浮かんでいるのです。
同じ数字でも、点をどこに打つかで大きな数にも小さな数にもなります。
下では、314という数字の間で点を動かせます。
点を動かすと、同じ数字が別の値になります。
点が左へ行けば数は小さくなり、右へ行けば大きくなります。
小数点がこうして浮かんでいるので、とても大きな数からとても小さな数まで、同じやり方で表せます。
だから浮動小数点、つまり浮かぶ小数点という名前なのです。
符号、点の位置、数字に分ける
では、浮動小数点はどうやって0と1で表すのでしょうか。
スイッチを三つの区画に分けます。
先頭はさきほどの符号、真ん中は小数点の位置(数がどれくらい大きいか)、残りは実際の数字です。
スイッチを三つの区画に分けて記録します。
この三つのかけらさえあれば、小数点がどこにあっても、どんな数でも0と1で書けます。
理科で使う指数表記と同じ考え方です。
3.14を0.314×10に分けるのと似ています。
コンピュータが0.1を正確に表せないとき
最後におもしろい事実を一つ。
コンピュータに0.1+0.2を計算させると、ぴったり0.3にならないことがあります。
ほんの少しずれるのは、0.1が0と1ではきっちり割り切れる形で表せないからです。
私たちの目には0.3でも、コンピュータの中にはごく小さな誤差が残ります。
1÷3を十進法で書くと、0.3333...のように終わりなく続きます。
0と1の世界では、0.1も終わりなく続く数なのです。
そのためどこかで切らなければならず、そこでごく小さな誤差が生まれます。
コンピュータが間違えたのではなく、0と1で小数を表すやり方の限界です。