( ).
. : 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, , . , , .