24
ОСНОВЫ ПРОГРАММНОГО КОНСТРУИРОВАНИЯ Лекция 4 12 марта 2013 г.

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

ОСНОВЫ ПРОГРАММНОГО КОНСТРУИРОВАНИЯ

Лекция № 412 марта 2013 г.

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

ДЕЙСТВИТЕЛЬНЫЕ ЧИСЛАВозможны ли точные вычисления с ними?

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

СПОСОБЫ ПРЕДСТАВЛЕНИЯ

• Рациональные дроби с числителем и знаменателем неограниченного размера.

• 22/7 = 3,1428571428571428

• 884279719003555 /281474976710656 = 3,1415926535897931

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

ПРЕДСТАВЛЕНИЕ С ФИКСИРОВАННОЙ ТОЧКОЙ

• 1.010100012 = 20+2-2+2-4+2-8 = 1+1/4+1/16+1/256 = 1.3164062510=337/256.

0 0 0 0 0 0 0 1 0 1 0 1 0 0 0 1

7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 -7 -8

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

ФИКСИРОВАННАЯ ТОЧКА. ОСОБЕННОСТИ

• Больше точность – меньше диапазон. Больше диапазон – меньше точность.

• Округление при представлении чисел (отбрасывание дробной части).

• Умножение и деление могут привести к потере точности.

• Вычисления так же быстры, как вычисления с целыми числами.

• Sony Playstation, Nintendo Gameboy.

• Кодирование звука: GSM Full rate, Ogg Vorbis.

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

FIXED-POINT BCD

• $1 = 30,7576 руб. (курс ЦБ РФ с 12.03.2013).

• 30,7576 → 307576 → 30757616 → 76 75 30 00 (в памяти, little endian).

•Метод часто используется для хранения денежных величин (COBOL).

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

ПРЕДСТАВЛЕНИЕ С ПЛАВАЮЩЕЙ ТОЧКОЙ

• x = m⋅be.

• m – мантисса (значащая часть, significand).

• b – основание степени (обычно 2 или 10).

• e – экспонента (порядок).

• 3,1415 = 0,31415⋅101.400 = 4⋅102 = 0,4⋅103.

• Нормализация: |m|<1.

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

СТАНДАРТ IEEE 754

± (S) Экспонента (E) Мантисса (M)1 8 бит 23 бита

binary32

S E M1 11 бит 52 бита

binary64

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

ВИДЫ ХРАНИМЫХ ЧИСЕЛ

Тип Экспонента Мантисса

±0 0 0

Денормализованные числа 0 0.mmmmmmm

Нормализованные числа 1…254 (1…2046) 1.mmmmmmm

±∞ 255 (2047) 0

Не-числа (NaN) 255 (2047) любая

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

НОРМАЛИЗОВАННЫЕ ЧИСЛА

• Для 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.

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

ДЕНОРМАЛИЗОВАННЫЕ ЧИСЛА

• Для 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.

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

ТОЧНОСТЬ

• Десятичных знаков:

• log10(223+1) ≈ 7,225 (binary32).

• log10(252+1) ≈ 15,955 (binary64).

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

ПАРАМЕТРЫ BINARY64

• |D|min ≈ 5⋅10−324.

• |D|max ≈ 2,23⋅10−308.

• |F|min ≈ 2,23⋅10−308.

• |F|max ≈ 1,80⋅10308.

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

ПРОЧИЕ ЧИСЛА

• ±∞

• Деление на 0.

• arctg(π/2).

• NaN (Not a Number):

• Корень из −1.

• ∞/∞, 0/0, 0⋅∞.

• ∞-∞

• func(NaN)

• NaN ≠ NaN!

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

ПРИМЕР КОДИРОВАНИЯ

• −118.625:

• Знак отрицательный: S = 1.

• Двоичная запись 118.625: 1110110.101

• Сдвиг влево: 1.110110101 × 26.

• Отбрасываем старшую 1; E = 127+6 = 133.

1 10000101 11011010100000000000000S E, 8 bits M, 23 bits

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

ПРОБЛЕМЫ

•Округление: tg π ≠ 0; tg(π/2) ≠ ∞.

• Накопление ошибок: a⊕(b⊕с) ≠ (a⊕b)⊕с.

• a⊖b при близких значениях a и b приводит к потере точности.

• Сравнение чисел.

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

ПРОБЛЕМА СРАВНЕНИЯ

float x = 0.1f;float y1 = x*x;float y2 = 0.01f;

y1 == y2; // => 0

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

ПРОБЛЕМА СРАВНЕНИЯ

float x = 0.1f; // 0.100000001490float y1 = x*x;// 0.010000000708 = 0 01111000 01000111101011100001011float y2 = 0.01f;// 0.009999999776 = 0 01111000 01000111101011100001010

y1 == y2; // => 0

один битотличается

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

ПРОБЛЕМА СРАВНЕНИЯ

// 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

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

ПРОБЛЕМА СРАВНЕНИЯ

#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

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

ВЫЧИСЛЕНИЕ π

или

π ≈ 6⋅2i⋅ti при 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

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

ПРИМИТИВНЫЕ ТИПЫ ДАННЫХ

• Числа (целые, дробные).

• Символы (строки?).

• Булевы переменные (True / False, Истина / Ложь).

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

ПИРАМИДА ДАННЫХ

Примитивные типы данных

Сложные типы данных

Данные предметной области

Числа, символы, перечисления

МассивыЗаписи

(структуры)Составные типы данных

СпискиДеревья

Хеш-таблицы

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

КОНЕЦ ЧЕТВЕРТОЙ ЛЕКЦИИ