вторник, 22 июля 2014 г.

Типы данных с плавающей точкой. Часть 1

Официально поддерживаемыми в Си являются следующие типы данных с плавающей точкой:

float (точность - 32 бит, sizeof(float) = 4)
double (точность - 64 бит, sizeof(double) = 8)
и плохо поддерживаемый long double (точность - 80 бит, sizeof(long dobule) = 12).


float (или single

бит знака, 8 бит порядка (со смещением 127), 24 бита мантиссы (представляется 23 битами, 24 подразумевается равным 1 для нормализованных чисел и 0 для денормализованных).

Emax = 127,  2127 ≈ 1.7 1038, Emin = -126,  2-126 ≈ 1.17 10-38.
Макс. нормализованное число ≈ 3.4 1038 (1.11111...111 = 2 - 2-23 ≈ 2)
Мин. нормализованное число ≈ 1.17 10-38 (1.00000...000 * 2-126)  
Макс. денормализованное число ≈ 1.17 10-38 (0.1111...111 * 2-126 - для E=0 e = Emin - -126)
Мин. денормализованное число  2-149 ≈ 1.4 10-45 (0.0000..001 * 2-126 = 2-23 * 2-126)
Точность вычислений - 7 знаков ( log10(224) ≈ 7.225)


double

бит знака, 11 бит порядка (со смещенем 1023), 53 бита мантиссы (представляется 52 битами, подразумевается 1 для нормализованных и 0 для денормализованных чисел).

Emax = 1023,  21023 ≈ 8.988 10307Emin = -1022,  2-1022 ≈ 2.225 10-308.
Макс. нормализованное число ≈ 1.798 10308 (1.11111...111 = 2 - 2-52 ≈ 2)
Мин. нормализованное число ≈ 2.225 10-308 (1.00000...000 * 2-1022)  
Макс. денормализованное число ≈ 2.225 10-308 (0.1111...111 * 2-1022 - для E = 0 e = Emin - -1022)
Мин. денормализованное число  2-1074 ≈ 4.940 10-324 (0.000...001 * 2-1022 = 2-52 * 2-1022)
Точность вычислений - 15 знаков ( log10(253) ≈ 15.954)

extended

бит знака, 15 бит порядка (со смещенем 16383), 64 бита мантиссы (представляется всеми 64 битами, первый бит равен 1 для нормализованных и 0 для денормализованных чисел).

 Emax = 16383,  216383 ≈ 5.949 104931Emin = -16382,  2-16382 ≈ 3.362 10-4932.
Макс. нормализованное число ≈ 1.190 104932 (1.11111...111 = 2 - 2-63 ≈ 2)
Мин. нормализованное число ≈ 3.362 10-4932 (1.00000...000 * 2-16382)  
Макс. денормализованное число ≈ 3.362 10-4932 (0.1111...111 * 2-16382 - для E = 0 e = Emin - -16382)
Мин. денормализованное число  2-16445 ≈ 3.645 10-4951 (0.000...001 * 2-16382 = 2-63 * 2-16382)
Точность вычислений - 19 знаков ( log10(264) ≈ 19.266)

Комментариев нет :

Отправить комментарий