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

ЛР 2

.docx
Скачиваний:
0
Добавлен:
15.03.2025
Размер:
42.52 Кб
Скачать

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

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

Кафедра комплексной информационной безопасности электронно- вычислительных систем (КИБЭВС)

ВЕЩЕСТВЕННЫЕ ЧИСЛА. ОШИБКИ ПРИ РАБОТЕ С ВЕЩЕСТВЕННЫМИ ЧИСЛАМИ

Отчет по лабораторной работе №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. Написать отчет и защитить у преподавателя.

  1. РУЧНОЕ ВЫЧИСЛЕНИЕ

Согласно варианту задания были получены следующие значения чисел:

  1. X =22720057231,13082004;

  2. Y = X * 10-10 = 2,272005723113082004;

  3. C = X + Y = 22720057233,402825763113082004;

  4. C’ = 22720057233,402825763;

  5. Z1 = X – 10-8 = 22720057231,13082003;

  6. Z2 = X + 10-8 = 22720057231,13082005;

  7. k = 22720057231;

  8. Абсолютная ошибка: A = |C – C’| = 0,000000000113082004;

  9. Относительная ошибка: O = A/C = 4,977188342366842501158964444565e-21

  10. Предположим, что в младшем разряде X произошла ошибка, тогда: Z = X – 0,001 = 22 720 057 231,12982004.

  11. Умножение без ошибки будет равным: m = X * X = 516 201 000 585 859 864 952,54053236287.

  12. Умножение с ошибкой будет равным: n = X * Z = 516 201 000 585 837 144 895,30940154283..

  13. При округлении X до целого числа абсолютная ошибка будет равна: A = |X – k| = 0,13082004.

  14. Относительная ошибка будет равна: O = A/X = 5,7579097917390606950944394128716e-12.

Данные расчёты были получены с помощью калькулятора.

  1. ПОДСЧЕТ С ПОМОЩЬЮ ПРОГРАММЫ

Для данной практической работы был выбран язык программирования С#, исходный код для программ указан в приложение А.

Результат работы программы представлен на рисунке 1.2.

Рисунок 2.1 – Результат работы программы

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

Ошибка «Исчезновение операнда» происходит если один операнд относительно мал по отношению с другим операндом. Поэтому операнд 10-8 был потерян, так как для типа данных double он слишком мал. В тоже время для типа данных decimal отводится больше памяти для вещественных чисел, поэтому операнд b1 был представлен без потерь.

Ошибка «Умножение ошибки» возникает при увеличении абсолютной погрешности операнда. В данном случае за счет постоянного увеличения значений. Ошибка возникает из-за увеличения операндов на значение 0.1, при том что данное значение в вещественных числах не может быть представлено точно.

Ошибка «Потеря значимости» возникает при невозможности представить вычисления в допустимой форме. В данном случае, из-за того, что числа приблизительно равны друг другу. И как упоминалось ранее тип данных double имеет больше выделенной памяти для вещественных чисел нежели тип данных float и поэтому имеет меньшую ошибку.

Заключение

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

Приложение А

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

Код программы

using System.IO.Compression;

namespace HelloWorld;

class Program

{

static void Main(string[] args)

{

double x = 22720057231.13082004;

double y = x * Math.Pow(10, -10);

double c = x + y;

double krug9 = Math.Round(c, 9);

double z = x + Math.Pow(10, -8);

double k = Math.Round(z);

double a = c - krug9;

Console.WriteLine("Абсолютная погрешность: " + a);

double r = a / c;

Console.WriteLine("Относительная погрешность: " + r);

System.Console.WriteLine();

System.Console.WriteLine("x = " + x);

System.Console.WriteLine("y = " + y);

System.Console.WriteLine("c = " + c);

System.Console.WriteLine("krug9 = " + krug9);

System.Console.WriteLine("z = " + z);

System.Console.WriteLine("k = " + k);

}

}

Томск 2025

Соседние файлы в предмете Языки программирования