IEEE 754(アイトリプルイーななごおよん、アイトリプルイーななひゃくごじゅうよん)は、別の表記では「IEEE Standard for Floating-Point Arithmetic」と書かれるものであり、1985年IEEEによって定められた、浮動小数点算術に関する標準規格である。

概説

編集

GNU coreutilsAlmost all modern systems use IEEE-754 floating point[1]使FPU

IEEE 754 [1] IEEE 754IEEE 754JavaC#IEEE 754[2]



20088 IEEE 754-2008 1985 IEEE 754  IEEE 754-1985 IEEE 854-1987 IEEE 754-2008 IEEE 754r

IEEE Standard for Floating-Point Arithmetic (ANSI/IEEE Std 754-2008)ISO/IEEEPSDOJTC1/SC 25  ISO/IEC/IEEE 60559:2011 [3][4]





: 00[5]0.0 / 0.0  NaN

: 

: 



: 

: [6]

: [7]



IEEE 754-1985  IEEE 754-2008 7 Dan Zuras Mike Cowlishaw IEEE 754-1985  IEEE 754-2008 IEEE 754-2008 125IEEE 754-2008 1

形式

編集

IEEE 754 (Formats) 

210s01cq3(1)s × c× bqb21011234531012.345


0+00

+

2 (NaN)NaNNaN (Quiet NaN) NaN (Signaling NaN) NaN

 (b) (p) emax 

c0bp1b = 10  p= 7 c09999999

q1emax  q+p1  emaxp = 7  emax = 96 q10190

01×101019999999×1090 (9.999999×1096) 1000000×101011.000000×1095) 01×10951×10951×1010101

02 +0 0 

基本形式

編集

IEEE 7545使32/64/128364/12822 IEEE 754-1985  (single) (double) 3 (quad) 2

11
形式名 一般名 基数
(b)
桁・ビット数
(p)
指数最小値
(emin)
指数最大値
(emax)
備考 十進換算
桁数
十進換算
emax
binary16 半精度 2 10+1 −14 +15 交換形式であって、基本形式ではない 3.31 4.51
binary32 単精度 2 23+1 −126 +127 7.22 38.23
binary64 倍精度 2 52+1 −1022 +1023 15.95 307.95
binary128 四倍精度 2 112+1 −16382 +16383 34.02 4931.77
decimal32 十進単精度 10 7 −95 +96 交換形式であって、基本形式ではない 7 96
decimal64 十進倍精度 10 16 −383 +384 16 384
decimal128 十進四倍精度 10 34 −6143 +6144 34 6144

十進換算の桁数は p × log10 b で得られる十進での桁数の近似値である。

十進換算の emax は emax × log10 b で得られる十進での指数最大値である。

拡張精度形式

編集

使使

[8] (extended precision)  (extendable precision)  (b, p, emax) 



 b p emax [9]

 b[10]

264emax 16383Intel 8087 80binary128

交換形式

編集



16/32/643212816

 IEEE 754-1985 1 w p1  k w = floor(4 log2(k))13 6412816323758

ここでのビットの示し方について

編集

Wビットの幅を持つワードがある場合、整数でビットに番号を振る。その番号の範囲は0 − W−1 であり、0番のビットが右端となる。0番のビットは一般にLSBである。

32ビット単精度の交換形式

編集

32

 

sign exponent fraction 

 emax = 1272 sign  exponent 126  +1271271 254025510

 0  255
種類 exponent(指数部) fraction(仮数部)
ゼロ 0 0
非正規化数 0 0以外
正規化数 1 – 254 任意
無限大 255 0
NaN 255 0以外の任意

exponent fraction (1)s × c× bq

s = sign

q = exponent  emax (emax = 127127127)

b = 2

c = 1.fraction

c121.xxxfractionxxx124economized form

1  emax = 126 



q = 126c 0.fraction q127 0126

+0s00s1

+s0s1

NaN使fraction  signaling NaNquiet NaN

NaNexponent1

118.625IEEE 754 



1

1110110.101

11110110.101=1.110110101×26

fraction 0 23 11011010100000000000000 

632 IEEE 754 1276 + 127 = 13310000101



 

64ビット倍精度の交換形式

編集



 

emax = +1023e exponent  1023 e: +1023  1022exponent: 2046 1exponent = 2047 NaNexponent = 0  e = 1022

半精度と四倍精度の交換形式

編集

半精度の交換形式は次のようになる。

 

また、四倍精度の交換形式は次のようになる。

 

浮動小数点数の比較

編集

使NaN

aba <bNaN2使

十進浮動小数点数の交換形式

編集

32

BCD Densely Packed Decimal  Binary Integer Decimal 2DPDBID使2IEEE 754 [11]NaN

浮動小数点数の丸め

編集

IEEE 754-2008標準では5種類の丸めアルゴリズムが定義されている。うち2種類は最近接な値に丸める方法であり、残り3種類は方向丸めと呼ぶ。

最近接丸め

編集



20

0

2

方向丸め

編集

0

0 (truncation) 

+

 (rounding up, ceiling) 



 (rounding down, floor) 

演算

編集

実装には、サポートしている(基本形式を含む)算術形式に対して次の演算が要求される。

  • 算術演算(加減乗除・平方根・積和算・剰余・その他)
  • 変換(複数形式間・文字列との相互・その他)
  • スケールと量子化
  • 符号の複製・操作(絶対値・符号反転・その他)
  • 比較・全順序
  • NaNその他の分類・判定
  • フラグの読み書き
  • その他の演算

全順序判定

編集

この標準では totalOrder という述語を提供しており、それぞれの形式におけるあらゆる浮動小数点数の全順序を定義している。通常の大小比較の演算子で大小が決まる場合は、この述語も同じ結果になる。しかし、比較演算子ではNaNとの比較が判定できず、−0 と +0 は等しいという結果になる。totalOrder はそういった場合でも大小を判定し、複数の NaN や同じ数値を異なる符号化方式で表現した十進形式間でも大小を区別する。

例外処理

編集

IEEE 754-20085

5

 - qNaN

01/0  log(0)  -  ± 

 -  ± 

0 - 

 - 

IEEE 754-1985IEEE 754-1985 IEEE 754-2008 

推奨

編集

代替の例外処理

編集

規格では、様々な形の例外処理をオプションとして推奨している。例えば、ユーザー定義のデフォルト値を事前に代入しておく方式、トラップ方式(何らかの方式で例外をとらえて制御フローを変化させる)、try/catch などの制御構造を使って例外を処理する方式などである。トラップや例外処理用制御構造はオプションである。

推奨されている演算

編集

950[12][13][14]

式評価

編集

 IEEE 754-1985 

 "preferredWidth" 使 "preferredWidth" 使x87 

再現性

編集

IEEE 754-1985 IEEE 754-2008 1

文字列表現

編集

[15]NaNsignaling NaN  quiet NaN 

[16]

binary16 5

binary32 9

binary64 17

binary128 36



1 + ceiling(p×log102)

 p binary32 24

3(shall)(should)

使

decimal32 7

decimal64 16

decimal128 34



[17][18]

注釈・出典

編集
  1. ^ これは、異なる仕様を採用しているハードウェア上に実装する際のコストへの考慮のためである。


(一)^ Floating point (GNU Coreutils 9.0). www.gnu.org. 2020410

(二)^ ,  (2003615). Java. . pp. 15701582. 2020410

(三)^ "FW: ISO/IEC/IEEE 60559 (IEEE Std 754-2008)" (Mailing list). 1 April 2011. 2012410 ISO

(四)^ ISO/IEC/IEEE 60559:2011 (). ISO. 2020410

(五)^ 2IEEE 754

(六)^ 8087FPU80bit使20.1101

(七)^ 

(八)^ IEEE 754 2008, §3.7

(九)^ IEEE 754 2008, §3.7 

(十)^ IEEE 754 2008, §3.7 

(11)^ RE: Two technical questions on IEEE Std 754-2008. 20142232012410

(12)^ IEEE 754 2008, Clause 9

(13)^ IEEE 754 2008, §9.3

(14)^ IEEE 754 2008, §9.4

(15)^ IEEE 754 2008, §5.12

(16)^ IEEE 754 2008, §5.12.2

(17)^ Gay, David M. (November 30, 1990), Correctly rounded binary-decimal and decimal-binary conversions, Numerical Analysis Manuscript, Murry Hill, NJ, USA: AT&T Laboratories, 90-10, http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.31.4049 

(18)^ Paxson, Vern; Kahn, William (May 22, 1991), A Program for Testing IEEE DecimalBinary Conversion, Manuscript, http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.144.5889 2012328 

参考文献

編集

規格

編集

二次文献

編集

その他

編集

十進外部文字列形式との変換

編集

関連項目

編集

外部リンク

編集