, , , . 32- , (64 ), 1 + 52 , 1 + 10 . 4,9410−324 1.7910308 ( 2−52 × 2−1022 ~1 × 21024). IEEE 754 . NaN (Not a Number, ) +/-INF (Infinity, ), . , . (, GPU) . , , (. ).
() | |||
~7.2 | ~15.9 | ~19.2 | |
(>0), denorm | 1,410−45 | 5,010−324 | 1,910−4951 |
(>0), normal | 1,210−38 | 2,310−308 | 3,410−4932 |
3,4×10+38 | 1,7×10+308 | 1,1×10+4932 | |
S-E-F | S-E-F | S-E-I-F | |
1-8-23 | 1-11-52 | 1-15-1-63 |
S , E , I , F
, , .
[ | -]
, , , : . , . ε , {\displaystyle 1\oplus \varepsilon \neq 1} ( {\displaystyle \oplus } ). , a b, , {\displaystyle 1<{\frac {a}{b}}<1+\varepsilon } , .
{\displaystyle \varepsilon =2^{-24}\approx 5,96\cdot 10^{-8}} , , 7 . : {\displaystyle \varepsilon =2^{-53}\approx 1,11\cdot 10^{-16}} , 15 [1].
. , , , .
|
|
, (. sign), (. exponent) (. mantis). ( IEEE 754) , , , ( , ). , , . :
, . , :
, , , , . , , , , ; , , , . ,
.
, .
, . , . . , .
[] 1 2 ( IEEE 754) o 2.1 (Binary16, Half precision) o 2.2 (Binary32, Single precision, float) o 2.3 (Binary64, Double precision, double) o 2.4 (Binary128, Quadruple precision) o 2.5 3 o 3.1 ( ) o 3.2 (NaN) o 3.3 o 3.4 4 o 4.1 o 4.2 o 4.3 5 . 6 7 o 7.1 o 7.2 |
[]
(. normal form) , ( ) . : (, 4 , , , ), (. normalized), () ( ), () ( ). . ( ) . , ( , ). ( ) , , , IEEE 754. , ( , .), ( ).
|
|
[] ( IEEE 754)
[] (Binary16, Half precision)
́ ́ ́ , ( 32- ). , .
1, | ||||||||||||||||
. . , , ( ).
.
.
, .
, .
, .
, .
[] (Binary32, Single precision, float)
́ ́ ́ , ( 32- ). , .
(8 ) | (23+1 ) | ||||||||||||||||||||||||||||||||
1, | |||||||||||||||||||||||||||||||||
.
[] (Binary64, Double precision, double)
́ ́ ́ , ( 32- ). , .
|
|
(11 ) | (52+1 ) | ||
1, | 000 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.
[] (Binary128, Quadruple precision)
́ ́ ́ , ( 32- ). .
(15 ) | (112+1 ) | ||
1, | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
(112+1 ) | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0000 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
.
, . , - (, gcc x86 __float128, ). Quadruple .
[]
, , , . ( ) . , NaN (Not a Number, " ", ) .
|
|
, .
IEEE 754 | ||||
Half precision | - | 6,10×10-5..65504 | ||
Single presicion | float | 3,4×10-38..3,4×1038 | ||
Double precision | double | 1,7×10-308..1,7×10308 | ||
Extended precision | ( Intel) long double | 3,4×10-4932..3,4×104932 |
[]
[] ( )
, . , , , . , .
0/1 | 1, | = | |||||||||||||||
. :
( )
( )
[] (NaN)
NaN " not a number ". NaN , ( . ). IEEE 754 NaN , , .
0/1 | 1, | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | 0/1 | = | |||||
NaN NaN. , . .
NaN?
,
NaN, .
NaN ≠ NaN, , .
[]
. , . IEEE 754 , , . .
0/1 | 1, | = | |||||||||||||||
.
[]
(. denormalized/subnormal numbers) - , . ("") . , ( , ) , . , , ( , ) , , .
, , :
|
|
, ( )
, ( )
, , ( ), , (1 ), , ( , 0 ).
, . - , .
, . Isaac Dooley, Laxmikant Kale "Quantifying the Interference Caused by Subnormal Floating-Point Values"[1]
() | ||
IBM | PowerPC 970 | 2,4 |
AMD | Athlon | 6,0 |
Intel | Pentium 3 | 15,8 |
AMD | Athlon 64 | 21,4 |
AMD | Opteron64 | 23,8 |
Intel | Core Duo | 44,2 |
Intel | P4 Xeon | 97,9 |
Intel | Pentium 4 | 131,0 |
Intel | Itanium 2 | 183,2 |
Sun | UltraSPARC IV | 520,0 |
(gcc, icc, xlc) . , .
( ) ( ), . , Flush-to-zero (FTZ) Denormals-are-zero (DAZ). , , . .
"" , . , , , , , , .
IEEE 754-2008 (denormal denormalized numbers) subnormal numbers, , "". " ".
[]
[]
. , , , .
, . .
[]
. , , /, , , . :
32- .
. .
.
. 32- , .
, , .
, 32- :
10000111 ( , 23 ).
, .
= , ... ...
.. .
, , .
, , .
32- :
10000111
, = , = ( ).
, .
, .
,
. .
, , .
10000110
. .
, .
, :
,
, - .
[]
Double.
, . , ( ):
62..52 | 51..0 |
, , , , .. . . , , ( ). , . , .. . , . , Double , () (). , .
, :
1. ;
2. , .. M 2 p, M ( ()) p , ;
3. ;
4. (0 ; 1 ), .
. , .
1. .
2. .
3. . () ().
4.
62..52 | 51..0 |
5.
, : C073850000000000(16).
.
. 3FEC600000000000(16)
62..52 | 51..0 |
1. , , . : () (); .
2. , , .
3. , .
: , ,
, . , :
,
,
.
.
[] 1 o 1.1 o 1.2 2 o 2.1 o 2.2 3 ( ) o 3.1 o 3.2 4 ( ) o 4.1 , o 4.2 o 4.3 5 . 6 |
[]
(. Signed magnitude repr