float (4байта): nd=8, nm=23 (IEEE)

double (8байт) : nd=11, nm=52 (IEEE)

long double: 3 формата:

 - = double (современный Microsoft)

 - 80-битное число = представление вещественных регистров (по умолчанию в gcc) : nd=15

 - 128 бит = 16 байт = 80-битное представление + нулевые биты

 

x=s*m*2d,m=(1.xxx…xxx…)2

                x=s*(1.xxx…xxx…)2*2d

x → x’=s*(1.xxx…xxx)2*2d

                             ---nm----

                         0.000…001*2d

Замечание: |x-x|≤ 2-nm2d

 

 

 

 

Абсолютная ошибка представления числа:

Пусть есть x , и его приближение x ,то абсолютной ошибкой приближения называется Δ : |x-x|≤ Δ

 

Относительная ошибка приближения:

Пусть есть x , и его приближение x ,то относительной ошибкой приближения называется δ : |x-x|/|x|≤ δ

Почти J эквивалентно: |x-x|/|x|≤ δ

 

|x-x|≤ 2-nm2d=Δ |x|2-nm

|x-x|/|x|δ 2-nm

 

Машинное ε1=argmax{x : x+1. == 1.}

Машинное ε2=argmin{x ,x>0: x+1. != 1.}

ε2 :

1.=(1.000…000)2*20+

      (0.000…001)2*20

ε2=2-nm

 

ε1 :

1.=(1.000…000)2*20+

      (0.000…000111…1111)2*20

                            ---nm+1----

ε1= ε2-2-(2nm+1)= ε2(1-2-(nm+1))

Будем говорить просто про Машинное ε

|x-x|≤ 2-nm2d=Δ |x| ε

|x-x|/|x|δ ε

 

float (4байта): nd=8, nm=23 (IEEE)

ε=2-23 (210)-2 1000-2 10-6

Следствие: два веществисла с плавающей точкой равны ó

|x-y|≤ max(|x|,|y|) ε

 

MACH_EPS

|x-y|≤ ε

 

Теорема 1. x,x’,y,y , |x-x’|≤ Δx, |y-y’|≤ Δy то

|(x±y)-(x’±y’)|≤ Δx+Δy

Теорема 2. x,x’,y,y , |x-x’|/|x|≤ δx, |y-y’|/|y|≤ δy то

|(x*/y)-(x’*/y’)|/|xy|≤~ δx+δy

Д-во:

|(x*y)-(x’*y’)| /|xy|=|(x*y)- (x*y’)+ (x*y’)-(x’*y’)| /|xy|≤

|(x*y)- (x*y’)| /|xy| + |(x*y’)-(x’*y’)| /|xy|

|(x*y)- (x*y’)| /|xy| + |(x*y’)-(x’*y’)| /|xy’|=

|y- y’| /|y| + |x-x’| /|x|= δy+ δx

Ч.Т.Д.

 

Определение: |x||y| óx+y ==y

Следствие: |x||y| ó|x|≤ ε |y|

 

Нестандартные представления чисел в ЭВМ

 

80-битное число = представление вещественных регистров не соответствует стандарту IEEE

 

IBM: x=s*m*16d (m [1,16),d ) все биты мантиссы присутствуют в представлении

 

SEG-Y

 

BCDbinary coded decimal – формат представления целых чисел

неупакованный формат: одна десятичная цифра в одном байте (очень удобно для *.+-)

упакованный формат: две десятичные цифры в одном байте (экономит память)


 

Number (СУБД Oracle):

1)Вещественные числа с плавающей точкой

2)Числа в стоичной системе счисления

3)Числа с произвольной точностью (почти)

4)В представлении числа не должны быть байт с нулевым кодом

5)Числа можно сравнивать лексикографически (strcmp())

 

0 = 0x128 = (1000 0000)2

Стандартное представление

1)Число хранится в виде (d,m)

x=s*m*100d, m [1,100), d

1.1=01.10 *1000

2)Дополняем слева и справа нулями до четного к-ва цифр

3)Удаляем незначащие пары нулей

1000.=10.00*1001 =>10.*1001