Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лабораторная работа(1)

.DOC
Скачиваний:
29
Добавлен:
01.05.2014
Размер:
174.08 Кб
Скачать

Cанкт-Петербургский Государственный Электротехнический Университет.

КАФЕДРА ИИТ

Отчет по лабораторной работе № 1

Изучение особенностей вычисления с плавающей точкой

Преподаватель : Титов М.С.

Студенты : Виноградов К.Ю.

Евдокимов С. Н.

Санкт-Петербург

Цель работы:

Изучение особенностей вычислений с плавающей точкой.

Числа с плавающей точкой являются машинным представлением системы действительных чисел. На множестве чисел с плавающей точкой определены плавающие арифметические операции, однако не все законы обычной арифметики выполняются для системы чисел с плавающей точкой. Так, например, для нее не справедливы ассоциативный и коммутативный законы. Предлагается с использованием ряда специально разработанных программ выполнить исследование плавающей арифметики. В частности, построить множество чисел с плавающей точкой и проанализировать их распределение на действительной оси, вычислить машинный эпсилон, характеризующий точность вашего компьютера, вычислить сумму ряда, состоящего из одинаковых чисел, а также проанализировать ошибки округления при вычислениях с плавающей точкой.

1. Программа формирует множество чисел F с плавающей точкой.

Каждое число с плавающей точкой, принадлежащее F, имеет вид :

x=±( d1 /b+d2 /b2+...+dt /bt )*bn , где целые числа d1 ,..., dt удовлетворяют неравенствам:

0£ di £b-1, (i=1,...,t ), и -N £ n £ N , N=2( m-1 ).

Здесь b - основание , t - разрядность мантиссы , m - разрядность порядка, - параметры , характеризующие множество F .

Задание :

исследовать распределение нормализованных чисел с плавающей точкой на вещественной оси для различных значений параметров b, t, m .

Введенные значения :

b=2 ; t=2 ; m=2 b=2 ; t=1 ; m=3 b=2 ; t=3 ; m=1

x[0] =0.000000 x[0] =0.000000 x[ 0]=0.000000

x[1] =0.062500 x[1] =0.003906 x[ 1]=0.250000

x[2] =0.093750 x[2] =0.007812 x[ 2]=0.312500

x[3] =0.125000 x[3] =0.015625 x[ 3]=0.375000

x[4] =0.187500 x[4] =0.031250 x[ 4]=0.437500

x[5] =0.250000 x[5] =0.062500 x[ 5]=0.500000

x[6] =0.375000 x[6] =0.125000 x[ 6]=0.625000

x[7] =0.500000 x[7] =0.250000 x[ 7]=0.750000

x[8] =0.750000 x[8] =0.500000 x[ 8]=0.875000

x[9] =1.000000 x[9] =1.000000 x[ 9]=1.000000

x[10]=1.500000 x[10]=2.000000 x[10]=1.250000

x[11]=2.000000 x[11]=4.000000 x[11]=1.500000

x[12]=3.000000 x[12]=8.000000 x[12]=1.750000

x[13]=4.000000 x[13]=16.00000

x[14]=6.000000 x[14]=32.00000

x[15]=64.00000

Вывод :

- распределение чисел с плавающей запятой на вещественной оси неравномерно. Плотность распределения максимальна при малых значениях чисел и минимальна при приближении к границе диапазона.

2. Точность плавающей арифметики характеризуется посредством машинного эпсилон, т. е. наименьшего числа eps с плавающей точкой такого , что 1+eps>1.

Предлагаемая программа вычисляет величину eps(c) для произвольного значения константы, так что c+eps(c)>c.

Задание :

вычислить значения eps(c) для различных значений с, построить график этой зависимости и обьяснить полученные результаты.

Получены результаты :

c=2 c=4

i= 62 eps=0.00000000000000000021 i= 61 eps=0.00000000000000000043

c=5 c=10

i= 61 eps=0.00000000000000000043 i= 60 eps=0.00000000000000000086

c=100 c=1000

i= 57 eps=0.00000000000000000693 i= 54 eps=0.00000000000000005551

c=10000 c=30000

i= 50 eps=0.00000000000000088817 i= 49 eps=0.00000000000000177635

Вывод :

  1. При небольших значениях с эпсилон очень мало. С увеличением с увеличивается и эпсилон, причем эпсилон растет по геометрической прогрессии, с каждым шагом увеличиваясь ровно в два раза

Таким образом, получаем график зависимости эпсилон от с:

3. Программа демонстрирует особенности аппроксимации действительных чисел в ЭВМ при их представлении в форме чисел с плавающей точкой. Предлагается вычислить сумму N чисел вида 1/N и оценить величину абсолютной и относительной ошибок, возникающих вследствии округления.

Вводится единственный параметр N типа int , при этом если N>0 , то вычисляется сумма x[i]=x[i-1]+1/N , i=1,2,...,N, x[0]=1.0 .

В загаловках приняты обозначения : x - число тиап float, dx - число типа double .

Задание :

исследовать абсолютные (x-dx) и относительные (x-dx)/dx ошибки округления при вычислениях с плавающей точкой сумм чисел при различных значениях шага суммирования.

Введенныое значение :

N

x-dx

x-dx/dx

2

0.0000000000

0.000000%

4

0.0000000000

0.000000%

8

0.0000000000

0.000000%

15

0.0000000596

0.000006%

20

0.0000000596

0.000006%

25

0.0000000224

0.000002%

30

0.0000000596

0.000006%

50

0.0000000224

0.000002 %

100

0.0000000224

0.000002 %

200

0.0000000224

0.000002 %

500

0.0000000689

0.000007 %

1000

0.0000000689

0.000007 %

5000

0.0000000253

0.000003 %

Вывод :

В ходе же суммирования с каждым шагом увеличивалась лишь абсолютная ошибка, то-есть происходило ее накопление, связанное с тем, что числа часто не могут быть представлены абсолютно точно. Относительная ошибка не менялась, что говорит о равномерном накоплении ошибки в ходе суммирования на отрезке [0; 1] для каждого N.

4. Программа демонстрирует проявление ошибок округления, возникающих при вычислении показательной функции exp(x) для чисел с плавающей точкой для двух вариантов алгоритма вычислений. Вычисляется значение функции exp(x) в виде суммы ряда :

exp(x)=1+x+x2 /2!+...+xN /N!

Потеря точности возникает при больших абсолютных значениях аргумента. Число членов ряда N выбирается из условия : xN/ N!< eps

Результаты алгоритма сравниваются с соответствующими результатами, полученными с использованием улучшенного алгоритма, в котором число x разлагается на целую и дробную часть : x=m+f , exp(x)=exp(m)*exp(f);

Задание :

исследовать проявление ошибок округления, а также скорость сходимости обоих алгоритмов.

Введенное значение аргумента x :

Введенное значение аргумента x:2

Введенное значение точности eps:0.001

Разложение Тейлора

i= 10 s= 7.388994708994709

Улучшенный алгоритм

i= 1 s= 7.389056098930649

Абс.погр.= 0.000061389935940

Отн.погр.=0.000831%

Введенное значение аргумента x:2

Введеннон значение точности eps:0.00001

Разложение Тейлора

i= 12 s= 7.389054566832344

Улучшенный алгоритм

i= 1 s= 7.389056098930649

Абс.погр.= 0.000001532098304

Отн.погр.=0.000021%

Введенное значение аргумента x:10

Введенное значение точности eps:0.01

Разложение Тейлора

i= 30 s= 22026.464036258916200

Улучшенный алгоритм

i= 1 s= 22026.465794806703300

Абс.погр.= 0.001758547787176

Отн.погр.=0.000008%

Введенное значение аргумента x:50

Введенное значение точности eps:0.01

Разложение Тейлора

i=138 s=5184705528587072000000.0000000000000

Улучшенный алгоритм

i= 1 s=5184705528587058400000.0000000000000

Абс.погр.= 13631488.000000000000000

Отн.погр.=0.000000%

Вывод :

При увеличении аргумента абсолютная погрешность возрастает , но несмотря на это относительная погрешность очень мала и при больших значениях x выходит за пределы машинного эпсилон и не может быть подсчитана. Поэтому такой способ вычисления exp(x) применим лишь в том случае, когда нам надо получить представление о ее поведении.Сходимость ряда Тейлора по стандартному алгоритму не дает требуемых результатов по скорости вычисления. Так, уже для х = 10 при точности порядка 1Е-2 требуется 30 итераций, каждая из которых по объему вычислений превышает предыдущую. То-есть разложение в ряд Тейлора является зависимым от величины аргумента. Поэтому более рациональным методом является улучшенный алгоритм, который для целых чисел дает сходимость в 1 шаг, а количество остальных итераций зависит уже только от требуемой точности.