
Лаба 2
.docxМинистерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования
«ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)
Кафедра комплексной информационной безопасности электронно- вычислительных систем (КИБЭВС)
ВЕЩЕСТВЕННЫЕ ЧИСЛА. ОШИБКИ ПРИ РАБОТЕ С ВЕЩЕСТВЕННЫМИ ЧИСЛАМИ
Отчет по лабораторной работе №2
по дисциплине «Языки программирования»
Студент гр. 723-1
_______
__.__.2025
Преподаватель каф. КИБЭВС
_______А.В. Куртукова
__.__.2025
Введение
Цель работы – знакомство с основными ошибками, возникающими при обработке вещественных чисел.
Задание на лабораторную работу:
1. Изучить краткие теоретические сведения;
2. В качестве исходных значений принять следующие значения: x=<номер студенческого билета><номер группы>,<дата рождения ддммгггг>;
y=x*10-10;
c=x+y; c’= округление с до 9 знака после запятой;
z=x±10-8;
k=округл. до целого(х);
3. Произвести вычисления, и показать каким образом возникают ошибки при работе с вещественными числами. Все значения вычислять с максимальной точностью, не округляя. Относительную ошибку вычислять с точность до 10 значащих цифр;
4. Объяснить полученные результаты;
5. Для выбранного варианта задания изучить, какие типы данных есть в языке программирования, как они реализованы;
6. Написать программы, демонстрирующие ошибки вещественных чисел на языке программирования, соответствующего варианту;
7. Написать отчет и защитить у преподавателя.
РУЧНОЕ ВЫЧИСЛЕНИЕ
Согласно варианту задания были получены следующие значения чисел:
X =23120127231,14032005;
Y = X * 10-10 = 2,312012723114032005;
C = X + Y = 23120127233,452332773114032005;
C’ = 23120127233,452332773;
Z1 = X – 10-8 = 23120127231,14032004;
Z2 = X + 10-8 = 23120127231,14032006;
k = 23120127231;
Абсолютная ошибка: A = |C – C’| = 0,000000000114032005;
Относительная ошибка: O = A/C = 4,9321530045478286297642787616875e-21
Предположим, что в младшем разряде X произошла ошибка, тогда: Z = X – 0,001 = 23120127231,13932005.
Умножение без ошибки будет равным: m = X * X = 534540283184116162179,14025281643.
Умножение с ошибкой будет равным: n = X * Z = 534540283184093042051,90911249638.
Абсолютная ошибка данных значений будет равна: A = |m - n| = 23120127,23114032005.
Относительная ошибка данных значений будет равна: O = A/m = 4,3252357134657449285567342472527e-14.
При округлении X до целого числа абсолютная ошибка будет равна: A = |X – k| = 0,14032005.
Относительная ошибка будет равна: O = A/X = 6,0691729157529900166232737741121e-12.
Данные расчёты были получены с помощью калькулятора.
ПОДСЧЕТ С ПОМОЩЬЮ ПРОГРАММЫ
Для данной практической работы был выбран язык программирования С#, исходный код для программ указан в приложение А.
Результат работы программы представлен на рисунке 1.2.
Рисунок 2.1 – Результат работы программы
Заключение
В ходе выполнения работы было осуществлено знакомство с основными ошибками, возникающими при обработке вещественных чисел.
Приложение А
(Обязательное)
Код программы
using System;
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Расчет входных данных: ");
double x = 23120127231.14032005;
double y = x * Math.Pow(10, -10);
Console.WriteLine("x = " + x + "\ny = " + y);
double C = x + y;
Console.WriteLine("C = " + C);
double C1 = Math.Round(C, 9);
Console.WriteLine("C' = " + C1.ToString("F9"));
double Z1 = x - Math.Pow(10, -8);
double Z2 = x + Math.Pow(10, -8);
Console.WriteLine();
Console.WriteLine("Z равен: ");
Console.WriteLine("x - 10^(-8) = " + Z1);
Console.WriteLine("x + 10^(-8) = " + Z2);
Console.WriteLine();
Console.WriteLine("Округление x до целого: ");
double k = Math.Round(x);
Console.WriteLine("k = " + k);
double A = Math.Abs(C - C1);
Console.WriteLine("Абсолютная ошибка = " + A);
double O = A / C;
O = Math.Round(O, 10);
Console.WriteLine("Относительная ошибка = " + O);
Console.WriteLine("Машинный эпсилон для double: " + double.Epsilon);
}
}
Томск 2025