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