Отчет 2 - Вещественные числа. Ошибки при работе с вещественными числами - СФ
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕЕНЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронно-
вычислительных систем (КИБЭВС)
Вещественные числа. Ошибки при работе с вещественными числами.
Отчет по лабораторной работе № 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