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

Лаба 2

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

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

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

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

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

Отчет по лабораторной работе №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 =23120127231,14032005;

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

  3. C = X + Y = 23120127233,452332773114032005;

  4. C’ = 23120127233,452332773;

  5. Z1 = X – 10-8 = 23120127231,14032004;

  6. Z2 = X + 10-8 = 23120127231,14032006;

  7. k = 23120127231;

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

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

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

  11. Умножение без ошибки будет равным: m = X * X = 534540283184116162179,14025281643.

  12. Умножение с ошибкой будет равным: n = X * Z = 534540283184093042051,90911249638.

  13. Абсолютная ошибка данных значений будет равна: A = |m - n| = 23120127,23114032005.

  14. Относительная ошибка данных значений будет равна: O = A/m = 4,3252357134657449285567342472527e-14.

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

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

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

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

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

Результат работы программы представлен на рисунке 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

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