Pythonで小数型の数値を2進数、さらには16進数に変換する

Pythonで浮動小数点型の数値や変数を2進数でどのように計算しているのかという、99.9%の人が関心を持たないテーマで日々格闘をしてます。しかし、このことがわからないと0.1が0.100000000000000005551115123125782・・・とおかしなことになるのかが読み解けません。そこで変な関数を考えました。Pythonには小数型の数値を2進数に直接変換する機能はなさそうですが、16進数に変換するhex()メソッドがあります。これを使い1浮動小数点型の小数と2進数(仮数部と指数部)を交互に変換する関数を作りました。

Pythonで小数型の数値を2進数、さらには16進数に変換する

また、手計算でゴリゴリと小数を2進数に変換する関数をつくりました。

0.1のような整数部無し、小数のみ
Pythonの小数型で扱うことができる数の大きさ

1.23のように整数部もあるもの
Pythonで小数を2進数に変換する

今後、hexメソッドで導いた2進数と、ゴリゴリ求めた2進数の値が合っているか確かめたいと思います。丸めの計算とかがうまくいくと良いですが。






この記事が気に入ったらサポートをしてみませんか?