( ).
. : 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
:
(:
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 00
1 875 5453.141593 · 10^
0 =
3.1415932.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.000
1111111 =
3.141593 +
0.000111 =
3.141704, , . , , .