Л 06 2 Вещ тип.ppt
- Количество слайдов: 26
Программирование 1 Лекция 6. 2 Вычисления с вещественными числами (продолжение): Вычисления с вещественными числами и машинное эпсилон (Эта часть посылается для предварительного чтения. Будет рассматриваться подробно на следующей лекции) 06. 10. 2011 Вычисления с вещественными числами 2 1
Вычисления с вещественными числами и машинное эпсилон Вещественные числа в форме с плавающей точкой (floating point): x = ± (a 1 b – 1 + a 2 b – 2 + …+ at b –t ) b p , (*) ai {0. . (b 1)} при i = 1, 2, …, t. Позиционная система счисления с основанием b. Пример: b = 10 – десятичная система. x = ± (a 110– 1 + a 2 10– 2 + …+ at 10–t) 10 p , (*) ai {0. . 9} при i = 1, 2, …, t. 2. 71828 = 0. 271828*101 = 27. 1828*10 1 = 0. 0271828*102 Представление не единственно. Нормализованный вид при a 1 0 : 0. 271828*101 06. 10. 2011 Вычисления с вещественными числами 2 2
Вычисления с вещественными числами и машинное эпсилон Вещественные числа в форме с плавающей точкой (floating point) в двоичной системе: x = ± (a 12– 1 + a 22– 2 + …+ at 2–t ) 2 p , (*) ai {0, 1} при i = 1, 2, …, t. нормализованный вид: a 1 = 1 (такое представление единственно). Число = ±(a 12– 1 + a 22– 2 + …+ at 2–t) - мантисса числа x (или дробная часть). Число бит t – разрядность мантиссы. Целое число p – двоичный порядок. L p U. Система чисел F(t, L, U) в представлении (*) задается параметрами t, L, U. 06. 10. 2011 Вычисления с вещественными числами 2 3
Особенности системы F (t, L, U) В системе F(t, L, U) представимо конечное множество положительных чисел, а именно 2 t – 1(U – L + 1). Если учесть отрицательные числа и 0, то всего чисел 2 2 t – 1(U – L + 1) + 1. Пример. t = 3, L = 1, U = 2. Всего чисел 2*16 + 1 = 33, из них положительных 16. 06. 10. 2011 Вычисления с вещественными числами 2 4
Порядок p = 0 Мантисса a * +a * 1 2 3 Число (рацион. ) Число (10 -дробь) 0. 1002 1* +0* 0. 510 0. 1012 1* +0* +1* 0. 62510 0. 1102 1* +0* 0. 7510 1* +1* 0. 87510 0. 1112 0 06. 10. 2011 Вычисления с вещественными числами 2 1 5
Порядок p = 1 Число (10 -дробь) Мантисса a 1* + a 2* +a 3* Число (рацион. ) 0. 1002 1* +0* *2= 1 1. 010 0. 1012 1* +0* +1* *2=5/4= 1 1. 2510 0. 1102 1* +0* *2=3/2= 1 1. 510 1* +1* *2=7/4= 1 1. 7510 0. 1112 0 06. 10. 2011 1 1 Вычисления с вещественными числами 2 1 1 2 6
Порядок p = 2 Мантисса a 1* + a 2* +a 3* Число (рацион. ) Число (10 -дробь) 0. 1002 1* +0* *22= 2 2. 010 0. 1012 1* +0* +1* *22=5/2= 2 2. 510 0. 1102 1* +0* *22= 3 3. 010 1* +1* *22=7/2= 3 3. 510 0. 1112 0 06. 10. 2011 2 2 3 Вычисления с вещественными числами 2 3 4 7
Порядок p = 1 a 1* + a 2* +a 3* Число (рацион. ) Число (10 -дробь) 0. 1002 1* +0* * = 0. 2510 0. 1012 1* +0* +1* * = 5/16 0. 312510 0. 1102 1* +0* * = 0. 37510 1* +1* * = 7/16 0. 437510 Мантисса 0. 1112 0 2 06. 10. 2011 1 2 3 Вычисления с вещественными числами 2 3 4 8
Особенности 1) Конечное множество (33) 2) Максимальное по величине число = (1 – 2–t) 2 U (3 ). Попытка вычислить число x > (или x < – ) –ошибка переполнения. 3) В окрестности нуля – «зазор» ( ), отсутствуют числа системы F (t, L, U). Самое маленькое положительное число = 2 L – 1 ( ). Попытка вычислить число x 0, такое, что |x| < , - ошибка антипереполнения или исчезновения порядка. 4) Неравномерность на оси. В интервале 1 x < 2 зазор 21 – t. В интервале 2 p – 1 x < 2 p зазор 2 p – t. 06. 10. 2011 Вычисления с вещественными числами 2 9
Абсолютная ошибка представления числа x числом fl(x) системы чисел F(t, L, U) есть • x = |fl(x) – x| и x 2 p – t при округлении отбрасыванием всех цифр (at + 1, at + 2, …) после at • x 2 p – t – 1 при округлении к ближайшему числу fl(x). Относительная ошибка представления числа x есть (x) = x / |x|. Значение (x) не зависит от интервала и (x) или (x) 2– 1 соответственно при округлении отбрасыванием или при округлении “к ближайшему”. 06. 10. 2011 Вычисления с вещественными числами 2 10
Особенности вычислений с вещественными числами. Дополнение. Нарушение ассоциативности сложения: (a + b) + c a + (b + c) Следствие: результат зависит от порядка суммирования Пример: 5/16 + (2 1) (5/16 + 2) 1 1) 5/16 + (2 1) = 5/16 + 1= 0. 101*2 1 + 0. 100*21 = = (0. 101*2 2 + 0. 100*20) * 21= = (0. 00101*20 + 0. 100*20) * 21= = (0. 001[01] + 0. 100) * 21= (0. 101[01]) * 21= = 0. 101* 21 = 5/4 = 1. Точный результат = 21/16 = 1+5/16 06. 10. 2011 Вычисления с вещественными числами 2 11
2) 5/16 + 2 = 0. 101*2 1 + 0. 100*22 = = (0. 101*2 3 + 0. 100*20) * 22= = (0. 000101*20 + 0. 100*20) * 22= = (0. 000[101] + 0. 100) * 22= (0. 100[101]) * 22 = 0. 100* 22 = 2 в режиме «отбрасывания» = 0. 101* 22 = 2 в режиме округления 1 в режиме «отбрасывания» (5/16 + 2) 1 = 1 в режиме округления Т. о. 1 1 и 1 1 1 06. 10. 2011 Вычисления с вещественными числами 2 1+5/16 12
Стандартные формы чисел с плавающей точкой: Стандарт 754 (IEEE) – 1985 г. – «плавающая точка IEEE» • формат одинарной точности (в B-Pascal – тип single, в С/С++ - float); • формат двойной точности (в BP и в – тип С/С++ double); • формат расширенной (повышенной) точности (в BP – тип Extended ). (long double ? ) 06. 10. 2011 Вычисления с вещественными числами 2 13
Стандартные формы чисел с плавающей точкой: формат одинарной точности (float / single); формат двойной точности (double); формат расширенной точности (extended). Название Длина типа (байт) Число явных бит мантиссы Число бит порядка (p + смещ. ) float 4 23 24 8 real (BP) 6 39 40 8 double 8 52 53 11 extended 10 64 64 15 06. 10. 2011 Вычисления с вещественными числами 2 14
Формат чисел типов float, double (и extended) Знак: 1 бит Порядок: 8 бит Мантисса: 23 бита одинарная точность float двойная точность double Расширенная точность extended 4 байта 11 бит 15 бит 52 бита 8 байт 64 бита 10 байт 06. 10. 2011 Вычисления с вещественными числами 2 15
Машинное эпсилон В качестве характеристики точности представления вещественных чисел в ЭВМ используют так называемое машинное эпсилон, определяемое как eps = min { >0: fl ( + 1) > 1 }. Эта величина учитывает особенности реализации системы F(t, L, U) в конкретном типе компьютера. Проблема переносимости ПО (библиотек). 0. 10… 001*21 1 пусто 06. 10. 2011 eps Вычисления с вещественными числами 2 16
Встроенное в программу ( «эмпирическое» ) вычисление машинного эпсилон typedef float real; // (long) double real eps, eps. P 1, epsil; eps 1. cpp int i; i = 0; eps = 1. 0; eps. P 1 = 2. 0; while (eps. P 1 > 1. 0) { // eps=2^(-i) && (1+eps>1) eps = eps * 0. 5; eps. P 1 = eps + 1. 0; i = i + 1; } //end: eps=2^(-i) && !(1+eps>1) && (1+2*eps>1) epsil = 2. 0 * eps; 06. 10. 2011 Вычисления с вещественными числами 2 17
Встроенное в программу ( «эмпирическое» ) вычисление машинного эпсилон (найди отличия!) typedef float real; // (long) double real eps, epsil; eps 2. cpp int i; i = 0; eps = 1. 0; while (eps+1. 0 > 1. 0) { // eps=2^(-i) && (1+eps>1) eps = eps * 0. 5; i = i + 1; } //end: eps=2^(-i) && !(1+eps>1) && (1+2*eps>1) epsil = 2. 0 * eps; Анализ выполнения (eps 1. cpp b, eps 2. cpp) и интерпретация результатов 06. 10. 2011 Вычисления с вещественными числами 2 18
Рекомендации программисту 1. Память более важна, чем точность одинарная точность float (single) 2. Точность более важна, чем память двойная точность double (long double) 3. Расширенная точность Extended только в специальных случаях (с самостоятельным контролем точности программистом) 06. 10. 2011 Вычисления с вещественными числами 2 19
• Далее скорректировать 06. 10. 2011 Вычисления с вещественными числами 2 20
Анализ примера с вычислением sin x Single. . . x= 0. 5235988 x= 6. 8067842 x=13. 0899696 x=19. 3731556 x=25. 6563416 x=31. 9395275 Epsilon = 1. 0 E-0005 S(x)= 5. 0000000 E-0001: : S(x)= 5. 0000530 E-0001: : S(x)= 4. 9994156 E-0001: : S(x)= 2. 5872076 E-0001: : S(x)=-4. 4802917 E+0002: : S(x)=-1. 1173759 E+0005: : Sin Sin Sin x x x = = = 5. 0000001 E-0001 5. 0000006 E-0001 5. 0000021 E-0001 5. 0000078 E-0001 5. 0000134 E-0001 5. 0000191 E-0001 n= n= n= 3 13 22 30 39 47 f(x) = sin(x) = Σi = 0. . . ∞ (– 1)ix 2 i + 1/ (2 i + 1)! sin(x) = 06. 10. 2011 Вычисления с вещественными числами 2 21
x = 10 x 3 = 103 x 7 = 107 x 9 = 109 3! = 6 5! =120 7! =5040 9! =362882 103/6 10 x 5 = 105/120 107/ 5040 109/ 362882 166, 67 833, 33 1984, 12 2755, 71 При x=1 0, 1667 1 0, 00833 0, 0001984 0, 000002755 x = 20 x 3 = 23103 x 5 = 25105 x 7 = 27 107 23 = 8 06. 10. 2011 25 = 32 27 = 128 Вычисления с вещественными числами 2 x 9 = 29 109 29 = 512 22
Машинное эпсилон и точность вычислений (комментарии и примеры) y x Параметр точности - характеристика абсолютной или относительной ошибки (точности) 06. 10. 2011 Вычисления с вещественными числами 2 23
Пример. Проверка ортогональности прямых Изменение масштаба : * < * > или * > * < 06. 10. 2011 Вычисления с вещественными числами 2 24
вектор нормали прямой ортогональность прямых 06. 10. 2011 Вычисления с вещественными числами 2 25
КОНЕЦ ЛЕКЦИИ КОНЕЦ ЛЕКЦИИ 06. 10. 2011 Вычисления с вещественными числами 2 26