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

Отчет 2 - Вещественные числа. Ошибки при работе с вещественными числами - СФ

.pdf
Скачиваний:
4
Добавлен:
19.03.2023
Размер:
225.75 Кб
Скачать

Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования

ТОМСКИЙ ГОСУДАРСТВЕЕНЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)

Кафедра комплексной информационной безопасности электронно-

вычислительных систем (КИБЭВС)

Вещественные числа. Ошибки при работе с вещественными числами.

Отчет по лабораторной работе № 2 По дисциплине «Языки программирования»

Студент гр. ххх

________ ххх

________

Принял

Ххх

ххх

________ ххх

________

Томск 2023

1 Введение

Цель работы: Знакомство с основными ошибками, возникающими при обработке вещественных чисел.

Для работы был выбран язык программирования – C++.

2

2 Ход работы

В качестве входных данных были взяты следующие числа: x = 21720167211,14102003;

y = x * 10^-10 = 2,172016721114102003;

c = x + y = 21720167213,31303675111410200;

c’ (округление до 9 знака после запятой) = 21720167213,313036751; zminus = x - 10^-8 = 21720167211,14102002;

k (округление до целого (x)) = 21720167211;

2.1 Вычисления вручную

Абсолютная ошибка A = |c – c’| = 0,000000000114102003;

Относительная ошибка O = A/c = 0,000000000000000000005253274612;

zminus – это предполагаемая ошибка в младшем разряде числа, для сравнения умножения с ошибкой и без ошибки были проведены следующие вычисления:

m (умножение без ошибки) = x * x = 471765663679925475784,4202393088612009;

n (умножение с ошибкой) = x * zminus = 460471176730110597001,1286871974510006;

Абсолютная ошибка A = | m - n | = 11294486949814878783,2915521114102003;

Относительная ошибка O = A/m = 0,02394088383;

Вычисления с k (x округленное до целого):

Абсолютная ошибка A = | x – k | = 0,14102003;

Относительная ошибка O = A/x = 0,000000000006492584916;

3

2.2 Программные вычисления

Результат программы, производящей вычисления из пункта 2.1

представлен на рисунке 2.2.1.

Рисунок 2.1 - Результат вычислений программы

При сравнении полученных результатов видно, что программа считает не точно. В программе присутствуют ошибка исчезновения операнда, ошибка потери значимости. Программные вычисления производились с типом данных – double. Умножение с ошибкой и без ошибки никак не отличаются. Также значения X, Y, C, C’, Z, K никак не отличаются.

Код программы приведен в приложении А.

4

3Заключение

Входе выполнения данной лабораторной работы были рассмотрены основные ошибки, возникающие при обработке вещественных чисел, были проведены вычисления вручную, а также программой, написанной на языке программирования C++.

5

Приложение А

(обязательное)

#include<iostream> using namespace std;

int main()

{

setlocale(LC_ALL, "Rus");

double x = 21720167211.14102003; double y = x / 10000000000; double c = x + y;

double cs = 21720167213.313036751; double zminus = x - 1 / 100000000; double k = round(x);

double A = abs(c - cs); double O = A / c;

cout << "----Определение ошибок.----\n" << "X - " << x << "\nY - " << y << "\nC - " << c << "\nC\' - " << cs << "\nZ- - " << zminus << "\nK - " << k << "\nАбсолютная ошибка: " << A << "\nОтносительная ошибка: " << O << endl;

double m1 = x * x; double n1 = x * zminus; A = abs(m1-n1);

O = A / m1;

cout<<"\nУмножение без ошибок: " << m1<< "\nУмножение с ошибкой: "<<n1 <<"\nАбсолютная ошибка: " << A <<"\nОтносительная ошибка: "<<O << endl;

A = abs(x - k);

O = A / x;

cout << "Абсолютная ошибка (при вычислениий с k): " << A << "\nОтносительная ошибка: " << O<<endl;

}

6