Одинарная или двойная точность?



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



, , . , , .



All Articles