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
BCD –binary 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