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


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

, , . , , .


Source: https://habr.com/ru/post/J331814/


All Articles