Скачать презентацию Программирование 1 Лекция 6 2 Вычисления с вещественными Скачать презентацию Программирование 1 Лекция 6 2 Вычисления с вещественными

Л 06 2 Вещ тип.ppt

  • Количество слайдов: 26

Программирование 1 Лекция 6. 2 Вычисления с вещественными числами (продолжение): Вычисления с вещественными числами Программирование 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) представимо конечное множество Особенности системы 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 Число (рацион. Порядок 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 Порядок 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* Число (рацион. Порядок 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* Число (рацион. ) Порядок 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) Особенности 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) системы чисел 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 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. 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 г. – «плавающая Стандартные формы чисел с плавающей точкой: Стандарт 754 (IEEE) – 1985 г. – «плавающая точка IEEE» • формат одинарной точности (в B-Pascal – тип single, в С/С++ - float); • формат двойной точности (в BP и в – тип С/С++ double); • формат расширенной (повышенной) точности (в BP – тип Extended ). (long double ? ) 06. 10. 2011 Вычисления с вещественными числами 2 13

Стандартные формы чисел с плавающей точкой: формат одинарной точности (float / single); формат двойной Стандартные формы чисел с плавающей точкой: формат одинарной точности (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 бит Мантисса: Формат чисел типов 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) Встроенное в программу ( «эмпирическое» ) вычисление машинного эпсилон 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; Встроенное в программу ( «эмпирическое» ) вычисление машинного эпсилон (найди отличия!) 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. Точность Рекомендации программисту 1. Память более важна, чем точность одинарная точность float (single) 2. Точность более важна, чем память двойная точность double (long double) 3. Расширенная точность Extended только в специальных случаях (с самостоятельным контролем точности программистом) 06. 10. 2011 Вычисления с вещественными числами 2 19

 • Далее скорректировать 06. 10. 2011 Вычисления с вещественными числами 2 20 • Далее скорректировать 06. 10. 2011 Вычисления с вещественными числами 2 20

Анализ примера с вычислением sin x Single. . . x= 0. 5235988 x= 6. Анализ примера с вычислением 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 = 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 Параметр точности - характеристика Машинное эпсилон и точность вычислений (комментарии и примеры) y x Параметр точности - характеристика абсолютной или относительной ошибки (точности) 06. 10. 2011 Вычисления с вещественными числами 2 23

Пример. Проверка ортогональности прямых Изменение масштаба : * < * > или * > Пример. Проверка ортогональности прямых Изменение масштаба : * < * > или * > * < 06. 10. 2011 Вычисления с вещественными числами 2 24

 вектор нормали прямой ортогональность прямых 06. 10. 2011 Вычисления с вещественными числами 2 вектор нормали прямой ортогональность прямых 06. 10. 2011 Вычисления с вещественными числами 2 25

КОНЕЦ ЛЕКЦИИ КОНЕЦ ЛЕКЦИИ 06. 10. 2011 Вычисления с вещественными числами 2 26 КОНЕЦ ЛЕКЦИИ КОНЕЦ ЛЕКЦИИ 06. 10. 2011 Вычисления с вещественными числами 2 26