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

Болтушкин Л.С., группа 712-2, лабораторная 2.docx

.pdf
Скачиваний:
5
Добавлен:
04.10.2024
Размер:
544.75 Кб
Скачать

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

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

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

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

ВЕЩЕСТВЕННЫЕ ЧИСЛА.

ОШИБКИ ПРИ РАБОТЕ С ВЕЩЕСТВЕННЫМИ ЧИСЛАМИ Отчет по лабораторной работе №2

по дисциплине «Языки программирования»

Студент гр. 712-2

___________ Л.С. Болтушкин

__________

Руководитель Младший научный

сотрудник кафедры КИБЭВС

_______ __________ А.В. Куртукова

__________

Томск 2024

Введение

Целью данной лабораторной работы является знакомство с основными

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

Задание:

1.Изучить теоретические сведения.

2.Произвести вычисления и показать каким образом возникают ошибки при работе с вещественными числами. Все значения вычислять с максимальной точностью, не округляя. Относительную ошибку вычислять с точностью до 10 значащих цифр.

3.Объяснить полученные результаты.

4.Для выбранного варианта задания изучить, какие типы данных есть в языке программирования, как они реализованы.

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

Формулы для вычисления абсолютной и относительной ошибок:

А= |C-C'| – абсолютная формула

O=A/C – относительная формула

2

1 Ход работы

1.1 Подсчет с помощью программы

Для данной лабораторной работы был выбран такой язык

программирования, как Python, исходный код для программ представлен в

приложение А.

В качестве исходных значений следует принять следующие значения:

1.1. x= <номер студенческого билета><номер группы>,<дата рождения ддммгггг>;

2.y = x 10−10;

3.c = x + y;

4.c′= округление с до 9 знака после запятой;

5.z = x ± 10−8;

6.k = округл. до целого(х).

Для вычисления данных значений была реализована программа

(рисунок 1.1).

3

Рисунок 1.1 – Реализация программы

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

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

4

Появление ошибки значимости происходит по причине того, что система автоматически округляет значения до 5 знаков после запятой (14032,

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

1.2 Подсчет вручную

Считаем, что количество значащих разрядов после запятой не превышает 9. Таким образом, получаем, что реальный ответ будет иным и представлен ниже:

1.x= <2271025> <7122>, <14032004> = 22710257122,14032004;

2.y = x * 10-10 = 2,271025712214032004;

3.с = x + y = 22710257122,14032004 + 2,271025712214032004 = 22710257124,411345;

4.с′ = 22710257124.411345004;

5.Абсолютная ошибка: А = |с - с′| = 22710257124,411345 - 22710257124.411345004 = 0,00000000000000000004;

6.Относительная ошибка: O = A/c = 1,7593705975580365e-24;

7.z = x + 10-8 = 22710257122,14032004 + 10-8 = 22710257122,14032005;

8.z = x - 10-8 = 22710257122,14032004 - 10-8 = 22710257122,14032003;

9.k = 22710257122;

10.Абсолютная ошибка: А = |x - k| = 22710257122,14032004 –

22710257122 = 0,14032004

11.Относительная ошибка: О = A/x = 0,14032004/ 22710257122,14032004

=6,176896756990853e-12

Данные расчеты были получены при использовании калькулятора и

нейронной сити OpenAI – ChatGPT.

5

Заключение

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

6

Приложение А

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

import math

print("Расчет входных данных: ")

x= 22710257122.14032004 #Зачетная книжка - 2271025, номер группы - 712-2, дата рождения - 14.03.2004

y= x * 10 ** -10

print("x =", x, "\ny =", y)

C = x + y print("C =", C) C1 = round(C, 9)

print("C' =", format(C1, '.9f'))

Z1 = x - 10 ** -8

Z2 = x + 10 ** -8

print("---------------------------------

")

print("Z равен: ")

 

print("x - 10^(-8) =",

Z1)

print("x + 10^(-8) =",

Z2)

print("---------------------------------

")

print("Округление x до

целого: ")

k = round(x)

 

print("k =", k)

 

A = abs(C - C1) print("Абсолютная ошибка =", A)

O = A / C

O = round(O, 10) print("Относительная ошибка =", O)

7