読者です 読者をやめる 読者になる 読者になる

英語で書くと字が汚くても許される雰囲気なんなの

あっども僕です.

どうやら日常ではなく, なにかを解説したようなブログが人気なのですね.

私もなにか書こうと思ったけど, うまく書けないです。。。


なので, evernoteになんかメモないのかと思い探してみたところ一年以上前に書いた

パソコンが数字をなかでどう扱っているのかのメモがありましたのでそれをそのまま載っけます.





コンピュータは10進数を2進数に変換して理解し2進数を10進数に変換して表現してる!!

整数部は完全に変換できるが、小数点以下はうまく変換できない場合があるのだよアンダーソンくん!!

つまり、変換ができない単位まで有効数字が求められる場合は計算が合わなくなってしまう。

このメモ帳ではその点を理解し解決策を得ようではないか。

1・小数点以下をどう変換するのか

この点は整数部と同じだ

例えば 1011.0101 = 2^3 + 2^1 + 2^0 + 2^-2 + 2^-4

と変換すればいいだけさ

しかし少数点以下が4ビットの時

2^-1 = 0.5
2^-2 = 0.25
2^-3 = 0.125
2^-4 = 0.0625

この4つの組み合わせの少数点しか表せられない

このことは何ビットあってもどっかでぴったりと表せない小数点以下の数字があるのがわかるはずだ

2・浮動小数点数とは

では0、1しか理解できないはずのコンピュターが紙の上での1011.0101という
小数点"."をどう理解してるだろうか

コンピュターには倍精度浮動小数点数(64ビット)と単精度浮動小数点数(32ビット)がある

とりあえずここは単精度で説明するよ

浮動小数点数は小数点数を32ビット使って符号、仮数、基数、指数を表してるんだ

ただ基数は必ず2なので残りの3っつを32ビットで表してる

浮動小数点数 =(符号)*(仮数)*2*exp(指数)

浮動小数点数(32bit) =符号(1)- 指数(8)- 仮数(23)って順番で32ビット使う

符号はもちろん1で負0で正というだけさ

仮数には少数点以上を1に固定するとう正規表現で表すんだ

これは小数点がある場合その数を表現する方法はたくさんあるから決まりを作りましょうってことさ

0.75 = 0.75 * 10^0
0.75 = 0.0075 * 10^2
などを
0.75 * 10^0という表現に固定する

十進数だと整数部は0に少数点以下第一位を0以外に固定してるね

2進数もそれのルールに則り論理右シフトor左シフトをするんだ

1011.0101 ⇒ 1.0110101 とね

そして. 以下を23ビットに調節して最終的に仮数

0110101000000000000000

とするんだこの時小数点以上は1だって決めてるから省略しても問題ないのさ


最後に指数だけどこれはイクセス(excess)表現というのを使うのさ。これはマイナス?乗を計算するために必要なのさ

これは単に8ビットで表せる0~255のうちその中間である127を0としましょうってことさ

これにより8ビットで-127〜128まで表現できるね

0〜126,127,128〜255を
ー127〜−1、0、+1〜+128とする


あとこの指数はどうやって出てくるかよくわからないんだごめんね


で、この問題を解消するには全部を整数表現にする方法とBCDってのがあるけどよくわからんわ


参考図書はこれです.

プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識

プログラムはなぜ動くのか 第2版 知っておきたいプログラムの基礎知識


※間違ったことを載せてあっても怒らないでね(><。)