単精度浮動小数点数

32ビットの浮動小数点数形式
単精度から転送)

 : single-precision floating-point number 使 1 FORTRAN12 Cray6464

IEEE 754324648IEEE 754-2008  binary32 32132



CC++C#JavaHaskell float [1]C/C++IEEE 754MATLAB single PascalVisual Basic .NET Single .NET FrameworkSystem.Single.NET3.2Octave single []Python float F# float32  single  float  double 

IEEE 754 での単精度浮動小数点数の形式: binary32

編集

IEEE 754  binary32 

: 1

: 8

: 23

8 0  255 0 1 254  -127  -126  127 255  NaN 

 0124 log10(224)  7.225 

  

 sign e23 b-n 32 binary32       

指数部の符号化方式

編集

単精度バイナリ浮動小数点数の指数部はオフセット表現を使って符号化されており、指数値がゼロのときのオフセット値(バイアス値)は127である。

  • Emin = 01H−7FH = −126
  • Emax = FEH−7FH = 127
  • 指数部バイアス = 7FH = 127

指数部バイアスは、エクセスNとも言う。詳しくは符号付数値表現を参照されたい。真の指数値は、指数部の値から指数部バイアスを引いた値となる。

00H と FFH は予約された指数値である。

指数部 仮数部がゼロの場合 仮数部がゼロでない場合
00H 0, −0 非正規化数 (−1)signbits×2−126× 0.significandbits
01H, ..., FEH 正規化数 (−1)signbits×2exponentbits−127× 1.significandbits
FFH ±無限 NaN (quiet, signalling)

2149  1.4 × 1045 2126  1.18 × 1038  (2223) × 2127  3.4 × 1038 

十進表現から binary32 フォーマットへの変換

編集

IEEE754  binary32 

 IEEE 754 binary32 

 12.375 





2

:

12.375  0.375 2223

0.375 x 2 = 0.750 = 0 + 0.750  b1 = 0  0.750 2

0.750 x 2 = 1.500 = 1 + 0.500  b2 = 1 

0.500 x 2 = 1.000 = 1 + 0.000  b3 = 1  0.000 

 (0.375)10  (0.011)2  0.1 

(12.375)10 = (12)10 + (0.375)10 = (1100)2 + (0.011)2 = (1100.011)2 

IEEE 754 binary32    1100.011 3   

   



3 130 = 1000 0010 

 100011 

IEEE 754 binary32  12.375  0-10000010-10001100000000000000000 = 41460000H 

: 68.123  IEEE 754 binary32  42883EF9H 4 1001 IEEE 754  42883EFAH 4 1010 

: 1   

 0  127 = 0111 1111 

 0 

1 IEEE 754 binary32  0-01111111-00000000000000000000000 = 3f800000H 

: 0.25   

 -2  127+(2)= 125 = 0111 1101 

 0 

 0.25  IEEE 754 binary32  0-01111101-00000000000000000000000 = 3e800000H 

: 0.375   

 -2  127+(2)= 125 = 0111 1101 

11.1  1 = x1 

 0.375  IEEE 754 binary32  0-01111101-10000000000000000000000 = 3ec00000H 

単精度浮動小数点数の例

編集


 3f80 0000   = 1
 c000 0000   = -2

 7f7f ffff   ≒ 3.4028234 x 1038  (単精度浮動小数点数の正の最大値)

 0000 0000   = 0
 8000 0000   = -0

 7f80 0000   = 正の無限大
 ff80 0000   = 負の無限大

 3eaa aaab   ≒ 1/3

1/3  1010...  1/2 

単精度バイナリ形式から十進への変換

編集

16 41c80000 
41c8 000016 = 0100 0001 1100 1000 0000 0000 0000 00002

3
符号ビット: 0
指数部: 1000 00112 = 8316 = 131
仮数部: 100 1000 0000 0000 0000 00002 = 48000016


仮数: 1100 1000 0000 0000 0000 00002 = C8000016

127
指数部の値: 8316 = 131
本来の指数: 131 − 127 = 4

2410.50.251/2
bit 23 = 1
bit 22 = 0.5
bit 21 = 0.25
bit 20 = 0.125
bit 19 = 0.0625
.
.
bit  0 = 0.00000011920928955078125

 bit 23bit 22bit 19 3
本来の仮数: 1 + 0.5 + 0.0625 = 1.5625 = C80000/223

2
1.5625 × 24 = 25


41c8 0000   = 25


 

       10

MSXの場合

編集

MSX-BASICMATHPACK4IEEE 754

s(): 1

y(): 7

x(): 24
 syyy yyyy xxxx xxxx xxxx xxxx xxxx xxxx

BCD 106±63 BASIC2BCDFP-1000

2BCD1020.50.250.375n/(2^m)0.10.2(102)(10)BCD()

10DAA10CPUZ80()2 MSX-BASIC10BASIC

CPUBCD

脚注・出典

編集

関連項目

編集
  • IEEE 754
  • 浮動小数点数
  • プリミティブ型
  • 数値的安定性

外部リンク

編集