( ). . : 32- ( ) 64- ( ). C
float
double
, . :
half
,
quad
. . ,
half
vs
float
double
vs
quad
. : 32- 64- IEEE 754.
, . ,
double
!
( ) : .
float
,
double
.
, , . , .
32- 24 , 7 , — 53 , 16 . ? ,
float
double
:
2,4 | ||
10 | ||
5 | ||
3 | ||
(:
double
, ).
, ,
float
. GPS ,
double
.
?
, —
double
. !
,
float
double
: . ,
float
. ,
double
,
float
, , ,
double
. , ( ),
double
, 40% ( O(√N), ).
SIMD, FLOPS,
double
float
. , , CPU. Intel Haswell
float
double
, ARM Cortex-A9 . . .
,
double
,
float
. , , ? :
float
, .
, . :
float sum(float* values, long long count)
{
float sum = 0;
for (long long i = 0; i < count; ++i) {
sum += values[i];
}
return sum;
}
, - . , . , , , , . : 10^N , N . (10^3) . (10^6) , (
float
!). :
double
:
float sum(float* values, long long count)
{
double sum = 0;
for (long long i = 0; i < count; ++i) {
sum += values[i];
}
return (float)sum;
}
, , , . ,
double
, !
, - , ( ) . :
3.16, 3.15, 3.16, 3.18, 3.15, 3.11, 3.14, 3.11, 3.14, 3.15
, . base-10, ( 32-
float
). :
3.160000 + 3.150000 + 3.160000 + 3.180000 + 3.150000 + 3.110000 + 3.140000 + 3.110000 + 3.140000 + 3.150000 = 31.45000
, . ? :
314.4300
. ?
3140.890
?
31412.87
, . :
31412.87 + 3.11 = 31415.98
, , . , . ? :
314155.6 + 3.12 = 314158.7
, (2 3.12) . , . , , . , . — , « ». = 10000 , . :
P (7
float
, 16
double
) , S , P-S 10^(P-S) . , 16 7, 10^(16-3) = 10 000 000 000 000 .
( .
float
double
, , ).
- .
- , .
: ?
, , , . , INF, NaN , base-10. .
, ( 32-
float
).
1.875545 · 10^-18 = 0.000 000 000 000 000 001 875 545
3.141593 · 10^0 = 3.141593
2.997925 · 10^8 = 299 792 500
6.022141 · 10^23 = 602 214 100 000 000 000 000 000
, — . , , . ? , : :
1.111111 · 10^42 · 2.000000 · 10^7
= (1.111111 · 2.000000) · 10^(42 + 7)
= 2.222222 · 10^49
: , , .
3.141593 · 10^0 + 1.111111 · 10^-3 =
3.141593 + 0.0001111111 =
3.141593 + 0.000111 =
3.141704
, , . , , .