はじめMath! Javaでコンピュータ数学

第9回 実数型のしくみ[後編]

この記事を読むのに必要な時間:およそ 4 分

(3)float型に格納されていた値を16進数で表記したものを,10進数に変換しましょう。計算には電卓を使用して結構です。それぞれの数値は,ある物理定数を表しています。該当する物理定数名を答えてください。

1.(0x66ff0bbd)Hを,10進数値に変換する。

2進数に変換


(0x 6    6    f    f    0    b    b    d)H
(0110 0110 1111 1111 0000 1011 1011 1101)B

役割ごとのビットに分けると


(0 1100 1101 111 1111 0000 1011 1011 1101)B
符号部( 1bit) : (0)B
指数部( 8bit) : (1100 1101)B = 205 = +78+127
仮数部(23bit) : (1111 1110 0001 0111 0111 101)B
                1 3  5 7        14   18  21
                 2 4  6      12  15   19   23
                                  16   20

符号部0より,正の数。(-1)0 = 1。

指数部が128だから,2128-127 = 21

仮数部は左からを表す。nは小数点以下第n位のこと。1になっている桁について全て合計すると仮数部の10進数値となる。

以上の結果をIEEE754の定義に従い計算すると,

float型を10進数で表したときの有効桁数は6,7桁であるため,6022099までが仮数で表現できる値である。(0x66ff0bbd)Hは6.02201 × 1023らしい。これはアボガドロ数の近似値である。

2.(0x43889333)Hを,10進数値に変換する。

2進数に変換


(0x 4    3    8    8    9    3    3    3)H
(0100 0011 1000 1000 1001 0011 0011 0011)B

役割ごとのビットに分けると


(0 1000 0111 0001 0001 0010 0110 0110 011)B
符号部( 1bit) : (0)B
指数部( 8bit) : (1000 0111)B = 135 = +8+127
仮数部(23bit) : (0001 0001 0010 0110 0110 011)B
                    4    8   11  14   18   22
                                  15   19   23

符号部0より,正の数。(-1)0 = 1。

指数部が128だから,2135-127 = 28

仮数部は左からを表す。nは小数点以下第n位のこと。1になっている桁について全て合計すると仮数部の10進数値となる。

以上の結果をIEEE754の定義に従い計算すると,

float型を10進数で表したときの有効桁数は6,7桁であるため,273.1499までが仮数で表現できる値である。(0x43889333)Hは273.15らしい。これはセルシウス温度で熱力学温度0[K]の近似値である。

今回のまとめ

  • 実数値の表現方法の規格IEEE754は大変シンプルです。
  • IEEE754によって表現される数値は近似値です。

著者プロフィール

平田敦(ひらたあつし)

地方都市の公立工業高等学校教諭。趣味はプログラミングと日本の端っこ踏破旅行。2010年のLotYはRuby。結城浩氏のような仕事をしたいと妄想する30代後半♂。