2016年3月16日水曜日

小数点数の2進数表現

今回も、どちらかというと中高生向けのネタです。

ここで「小数点数」と書きましたが、単純に小数点を含む数値の事です。

ex.
1.32, √2 = 1.41421356 ... , π = 3.1415926 ...

これらの数値は10進数にて書くのが当たり前でありますが、理屈の上では2進数でも書けなくはありませんよネ。
関数電卓の基数変換機能を使って、これら小数点数の基数を変えた表現がどうなるのか、チョット調べてみようと思った次第です。

関数電卓の基数変換機能ですが、通常はIntegerでしか扱えませんから、小数点数の表記を求めるには、少し工夫が必要です。
基本的な考えとしては「小数点を取り除くために基数倍する」のです。

1.32 を例に取ります。まず、基数倍、この場合では10進数表記なので10倍します。すると、1.32 * 10 = 13.2になります。更に10倍すれば 132 となって、見事、小数点を取り除くことに成功しました。

「基数が10の場合には、10倍の手続きを必要な回数繰り返す事で小数点を取り除く事が出来る」という事は、
「基数が2の場合には、2倍の手続きを必要な回数繰り返す事で小数点を取り除く事が出来そう」ですネ !
では、やってみましょう !

今度も、1.32 を例にしてみます。2進数表現でどうなるのかを調べるのですが、その為に、2倍、2倍の手続きを繰り返します。
1.      1.32 * 2 =     2.64
2.      2.64 * 2 =     5.28
3.      5.38 * 2 =    10.56
4.     10.56 * 2 =    21.12
5.     21.12 * 2 =    42.24
6.     42.24 * 2 =    84.48
7.     84.48 * 2 =   168.96
8.    168.96 * 2 =   337.92
9.    337.92 * 2 =   675.84
10.   675.84 * 2 =  1351.68
11.  1351.68 * 2 =  2703.36
12.  2703.36 * 2 =  5406.72
13.  5406.72 * 2 = 10813.44
14. 10813.44 * 2 = 21626.88
ああ、面倒くさ。「もういいでしょう」

で、こうして得られた数をどうするか。まず、小数点以下を切り捨ててしまいます (ああ、もったいない !)。
そして、関数電卓の基数変換機能で表示を変えてみるのです。

101010001111010

という表示が得られる筈です。
これは、2を14回、掛け合わせた数値であり、2進数表現において2を掛けるという事は「1桁倍した」という事でありますから、14回だけ小数点を左へずらす事で、本来の数値になる勘定です。

1.01010001111010

こうして得られた1.32の2進数表現ですが、実際には途中で切り捨てているので、正確な値ではありません。

1.32 (10) = 1.01010001111010 ... (2)

という具合です。

今の例では2倍ずつ掛けて行きましたが、実際にはオーバーフローしない範囲でまとめて桁上げしても構いません。
HP35SやFree42では、36ビットの数値をハンドル出来るので、この例では30ビット分の桁上げをしても充分です。1024を掛けると10ビット分の桁上げになりますから、1024を3回掛け合わせれば30ビット分の桁上げになります。

1.       1.32 * 1024 =       1351.68
2.    1351.68 * 1024 =    1384120.32
3. 1384120.32 * 1024 = 1417339207.68


これを2進数表示して、つぎの値を得る事が出来ます。

1.32 (10) = 1.01010001111010111000101000111 ... (2)

実際には、この値の方が正確な様です。

同様の手続きを√2や円周率に適用する事で、2進数表記を得られます。
答えを以下に示しますので、お試しを。

√2 =  1.011010100000100111100110011011 ... (2)
π  = 11.001001000011111101101010100010 ... (2)

----

あれーっ、July Amazon店のHP50Gが、売り切れだって !

2 件のコメント:

藤堂俊介 さんのコメント...

 進数を変えると、数の世界も違って見えますね。
 電卓活用の本のようなものが完成しました。なお、1~80頁は誤操作で原本データを吹っ飛ばしました。(;´д`)」

http://www.pixiv.net/member_illust.php?mode=manga&illust_id=55948675

akatuki さんのコメント...

藤堂 様、御無沙汰です。毎度の事ながら遅れてしまいまして、申し訳ない。

> 電卓活用の本のようなものが完成しました。
> http://www.pixiv.net/member_illust.php?mode=manga&illust_id=55948675

おおっ、これはイイですネ !
こうした成果は、広く人口に膾炙する所のもので、大変有意義であります。

> なお、1~80頁は誤操作で原本データを吹っ飛ばしました。(;´д`)」

ウーム。
web時代ではありますが、こうした文書はwebにつながらない所でも気軽に読めると、もっと良いと思います。

これは先を越されちゃったなァ。内容が大変面白い !