ОСНОВЫ ПРОГРАММНОГО  КОНСТРУИРОВАНИЯ                  Лекция № 4              12 марта 2013 г.
ДЕЙСТВИТЕЛЬНЫЕ ЧИСЛА  Возможны ли точные вычисления с ними?
СПОСОБЫ             ПРЕДСТАВЛЕНИЯ• Рациональныедроби с числителем и знаменателем неограниченного размера. • 22/7   = 3,142...
ПРЕДСТАВЛЕНИЕ СФИКСИРОВАННОЙ ТОЧКОЙ0 0 0 0 0 0 0 1                 0 1 0 1 0 0 0 17   6   5   4   3   2   1   0   -1   -2 ...
ФИКСИРОВАННАЯ ТОЧКА.        ОСОБЕННОСТИ•   Больше точность – меньше диапазон.    Больше диапазон – меньше точность.•   Окр...
FIXED-POINT BCD• $1   = 30,7576 руб. (курс ЦБ РФ с 12.03.2013).• 30,7576  → 307576 → 30757616 → 76 75 30 00 (в памяти, lit...
ПРЕДСТАВЛЕНИЕ С       ПЛАВАЮЩЕЙ ТОЧКОЙ•x   = m⋅be.                  • 3,1415                                     = 0,31415...
СТАНДАРТ IEEE 754                       binary32± (S) Экспонента (E)               Мантисса (M) 1        8 бит            ...
ВИДЫ ХРАНИМЫХ ЧИСЕЛ         Тип              Экспонента    Мантисса          ±0                  0            0Денормализо...
НОРМАЛИЗОВАННЫЕ              ЧИСЛА• Для   binary32: •F   = (−1)S⋅2E−127⋅1.mm…m.   •1    ≤ M < 2. • |F|min = 21−127⋅1.00…0 ...
ДЕНОРМАЛИЗОВАННЫЕ          ЧИСЛА• Для   binary32: •D     = (−1)S⋅2−126⋅0.mm…m. • |D|min = 2−126⋅0.00…01        = 2−126⋅2−2...
ТОЧНОСТЬ• Десятичных      знаков: • log10(223+1)   ≈ 7,225 (binary32). • log10(252+1)   ≈ 15,955 (binary64).
ПАРАМЕТРЫ BINARY64• |D|min ≈   5⋅10−324.• |D|max ≈    2,23⋅10−308.• |F|min ≈   2,23⋅10−308.• |F|max ≈   1,80⋅10308.
ПРОЧИЕ ЧИСЛА•   ±∞                      • NaN   (Not a Number):    •   Деление на 0.        • Корень   из −1.    •   arctg...
ПРИМЕР КОДИРОВАНИЯ•   −118.625:    •   Знак отрицательный: S = 1.    •   Двоичная запись 118.625: 1110110.101    •   Сдвиг...
ПРОБЛЕМЫ• Округление: tg   π ≠ 0; tg(π/2) ≠ ∞.• Накопление   ошибок: a⊕(b⊕с) ≠ (a⊕b)⊕с.• a⊖bпри близких значениях a и b пр...
ПРОБЛЕМА СРАВНЕНИЯfloat x = 0.1f;float y1 = x*x;float y2 = 0.01f;y1 == y2; // => 0
ПРОБЛЕМА СРАВНЕНИЯfloat x = 0.1f; // 0.100000001490float y1 = x*x;// 0.010000000708 = 0 01111000 01000111101011100001011fl...
ПРОБЛЕМА СРАВНЕНИЯ  // float.h  /* Difference between 1.0 and     the minimum float greater than 1.0 */  #define FLT_EPSIL...
ПРОБЛЕМА СРАВНЕНИЯ #include <float.h> #include <math.h> int almostEqual(float a, float b) {     float A = fabs(a);     flo...
ВЫЧИСЛЕНИЕ π                       π≈    6⋅2 i                                i⋅t   при i→∞.                      или i   ...
ПРИМИТИВНЫЕ ТИПЫ          ДАННЫХ• Числа   (целые, дробные).• Символы    (строки?).• Булевы   переменные (True / False, Ист...
Данные предметной области                                          Списки    Сложные типы данных                  Деревья ...
КОНЕЦ ЧЕТВЕРТОЙ ЛЕКЦИИ
Upcoming SlideShare
Loading in...5
×

ОПК № 4 – Представление действительных чисел

206

Published on

1. Действительные числа как рациональные дроби.
2. Представление с фиксированной точкой.
3. Фиксированная точка и двоично-десятичный код.
4. Числа с плавающей точкой. Binary32, binary64, битовое устройство числа, варианты хранимых чисел.
5. Пример кодирования числа.
6. Возможные проблемы плавающей арифметики.
7. Пример проблем: сравнение двух "равных" чисел.
8. Пример проблем: вычисление числа π по двум формулам.
9. Иерархия структур и типов данных.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
206
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
1
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

ОПК № 4 – Представление действительных чисел

  1. 1. ОСНОВЫ ПРОГРАММНОГО КОНСТРУИРОВАНИЯ Лекция № 4 12 марта 2013 г.
  2. 2. ДЕЙСТВИТЕЛЬНЫЕ ЧИСЛА Возможны ли точные вычисления с ними?
  3. 3. СПОСОБЫ ПРЕДСТАВЛЕНИЯ• Рациональныедроби с числителем и знаменателем неограниченного размера. • 22/7 = 3,1428571428571428 • 884279719003555 / 281474976710656 = 3,1415926535897931
  4. 4. ПРЕДСТАВЛЕНИЕ СФИКСИРОВАННОЙ ТОЧКОЙ0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 17 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 -7 -8• 1.010100012= 20+2-2+2-4+2-8 = 1+1/4+1/16+1/256 = 1.3164062510=337/256.
  5. 5. ФИКСИРОВАННАЯ ТОЧКА. ОСОБЕННОСТИ• Больше точность – меньше диапазон. Больше диапазон – меньше точность.• Округление при представлении чисел (отбрасывание дробной части).• Умножение и деление могут привести к потере точности.• Вычисления так же быстры, как вычисления с целыми числами. • Sony Playstation, Nintendo Gameboy. • Кодирование звука: GSM Full rate, Ogg Vorbis.
  6. 6. FIXED-POINT BCD• $1 = 30,7576 руб. (курс ЦБ РФ с 12.03.2013).• 30,7576 → 307576 → 30757616 → 76 75 30 00 (в памяти, little endian).• Метод часто используется для хранения денежных величин (COBOL).
  7. 7. ПРЕДСТАВЛЕНИЕ С ПЛАВАЮЩЕЙ ТОЧКОЙ•x = m⋅be. • 3,1415 = 0,31415⋅101. 400 = 4⋅102 = 0,4⋅103. •m – мантисса (значащая часть, significand). • Нормализация: |m|<1. •b – основание степени (обычно 2 или 10). •e – экспонента (порядок).
  8. 8. СТАНДАРТ IEEE 754 binary32± (S) Экспонента (E) Мантисса (M) 1 8 бит 23 бита binary64S E M1 11 бит 52 бита
  9. 9. ВИДЫ ХРАНИМЫХ ЧИСЕЛ Тип Экспонента Мантисса ±0 0 0Денормализованные числа 0 0.mmmmmmmНормализованные числа 1…254 (1…2046) 1.mmmmmmm ±∞ 255 (2047) 0 Не-числа (NaN) 255 (2047) любая
  10. 10. НОРМАЛИЗОВАННЫЕ ЧИСЛА• Для binary32: •F = (−1)S⋅2E−127⋅1.mm…m. •1 ≤ M < 2. • |F|min = 21−127⋅1.00…0 = 2−126 ≈1,18⋅10−38. • |F|max = 2254−127⋅1.11…1 = 2127⋅(2−2−23) ≈3,4⋅1038.
  11. 11. ДЕНОРМАЛИЗОВАННЫЕ ЧИСЛА• Для binary32: •D = (−1)S⋅2−126⋅0.mm…m. • |D|min = 2−126⋅0.00…01 = 2−126⋅2−23 = 2−149 ≈1,4⋅10−45. • |D|max = 2−126⋅0.11…11 = 2−126⋅(1−2−23) ≈1,18⋅10−38. • |D|max + |D|min = |F|min.
  12. 12. ТОЧНОСТЬ• Десятичных знаков: • log10(223+1) ≈ 7,225 (binary32). • log10(252+1) ≈ 15,955 (binary64).
  13. 13. ПАРАМЕТРЫ BINARY64• |D|min ≈ 5⋅10−324.• |D|max ≈ 2,23⋅10−308.• |F|min ≈ 2,23⋅10−308.• |F|max ≈ 1,80⋅10308.
  14. 14. ПРОЧИЕ ЧИСЛА• ±∞ • NaN (Not a Number): • Деление на 0. • Корень из −1. • arctg(π/2). • ∞/∞, 0/0, 0⋅∞. • ∞-∞ • func(NaN) • NaN ≠ NaN!
  15. 15. ПРИМЕР КОДИРОВАНИЯ• −118.625: • Знак отрицательный: S = 1. • Двоичная запись 118.625: 1110110.101 • Сдвиг влево: 1.110110101 × 26. • Отбрасываем старшую 1; E = 127+6 = 133. S E, 8 bits M, 23 bits 1 10000101 11011010100000000000000
  16. 16. ПРОБЛЕМЫ• Округление: tg π ≠ 0; tg(π/2) ≠ ∞.• Накопление ошибок: a⊕(b⊕с) ≠ (a⊕b)⊕с.• a⊖bпри близких значениях a и b приводит к потере точности.• Сравнение чисел.
  17. 17. ПРОБЛЕМА СРАВНЕНИЯfloat x = 0.1f;float y1 = x*x;float y2 = 0.01f;y1 == y2; // => 0
  18. 18. ПРОБЛЕМА СРАВНЕНИЯfloat x = 0.1f; // 0.100000001490float y1 = x*x;// 0.010000000708 = 0 01111000 01000111101011100001011float y2 = 0.01f;// 0.009999999776 = 0 01111000 01000111101011100001010y1 == y2; // => 0 один бит отличается
  19. 19. ПРОБЛЕМА СРАВНЕНИЯ // float.h /* Difference between 1.0 and the minimum float greater than 1.0 */ #define FLT_EPSILON 1.1920929e-07F /* Difference between 1.0 and the minimum double greater than 1.0 */ #define DBL_EPSILON 2.2204460492503131e-16
  20. 20. ПРОБЛЕМА СРАВНЕНИЯ #include <float.h> #include <math.h> int almostEqual(float a, float b) { float A = fabs(a); float B = fabs(b); float largest = (B > A) ? B : A; return (fabs(A - B)/largest <= FLT_EPSILON); } almostEqual(y1, y2); // => 1
  21. 21. ВЫЧИСЛЕНИЕ π π≈ 6⋅2 i i⋅t при i→∞. или i 1-я формула 2-я формула 0 3.4641016151377543863 3.464101615137754386310 3.1415929278733740748 3.141592927385097988516 3.1415926717412858693 3.141592653656639422217 3.1415810075796233302 3.141592653606506191320 3.1405434924008406305 3.141592653590056016824 3.2245152435345525443 3.1415926535897968907
  22. 22. ПРИМИТИВНЫЕ ТИПЫ ДАННЫХ• Числа (целые, дробные).• Символы (строки?).• Булевы переменные (True / False, Истина / Ложь).
  23. 23. Данные предметной области Списки Сложные типы данных Деревья Хеш-таблицы Массивы Составные типы данных Записи (структуры) Примитивные типы данных Числа, символы, перечисленияПИРАМИДА ДАННЫХ
  24. 24. КОНЕЦ ЧЕТВЕРТОЙ ЛЕКЦИИ
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×