ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 27.03.2024

Просмотров: 9

Скачиваний: 0

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Министерство образования и науки Российской Федерации

Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования «ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ» (ТУСУР)

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

Вещественные числа. Ошибки при работе с вещественными числами

Отчет по лабораторной работе №2 по дисциплине «Языки программирования»

Студент гр. ***-*

________.2023

Принял

Кандидат Технических наук, Доцент каф. КИБЭВС

__________

________ А.С. Романов

________.2023

2023

Введение

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

Задание:

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

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

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

y=x*10-10;

c=x+y;

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

z=x±10-8;

k=округлить до целого(х).

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

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

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

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


7. Написать отчет и защитить у преподавателя.

Работа была выполнена, основываясь на языке программирования Python.

2 Ход работы

2.1 Расчеты точных чисел

Ниже приведены точные расчеты чисел:

x = 21710457112,28112002

y = 2,171045711228112002

c = 21710457114,452167510986

c’ = 21710457114,452167511

z1 = 21710457142б2811203003

z2 = 21710457142б2811203003

k = 21719457112

2.2 Описание возможных ошибок

Существуют три основные ошибки вычислений, возникающие при выполнении операции над вещественными числами:

  1. Исчезновение операнда – операнд может исчезнуть, если он относительно мал по отношению с другим операндом. В данной работе можно увидеть данную ошибку при вычислении чисел z1 и z2.

  2. Умножение ошибки – многократное увеличение абсолютной погрешности операнда, которая может появиться при использовании арифметики с плавающей точкой, даже если относительная ошибка мала. Зачастую это является результатом умножения или деления. Данная ошибка наблюдается при вычислении y.

  3. Потеря значимости – полная потеря значимости, вызванная вычитанием почти равных чисел.

2.3 Вычисление чисел с помощью программы

При вычислении числа «x», с помощью программы мы получили x = 21710457112,28112002. Следовательно, можно сделать вывод, что абсолютная ошибка при расчете равна 0,00000002, а относительная ошибка равна 0.000000000000000000921215.

При вычислении числа «y» получили y = 2.1710457112, из чего можно сделать вывод, что абсолютная ошибка равна 0.457112281120020003, а относительная – 0.210549358199114911016636.

Во время расчета числа «c» получили c = 21710457114.452167510986. В данной ситуации абсолютная ошибка равна 0.00009573122811200, а абсолютная – 0.0000000000000044094524407. При округлении числа c до 9 знаков после запятой получилось c = 21710457114.452167511. Это означает, что абсолютная ошибка равна 0.000067511, а относительная – 0.00000000000000311.

Числа «z1» и «z2» получились равными 21710457112.2811203003. Следовательно, абсолютная ошибка равна 0.00002003 и 0.00002001 соответственно, а относительная ошибка равна 0.00000000000000092 соответственно.

При округлении числа до целого ошибки отсутствуют.

На рисунке 2.1 представлен вывод программы


Рисунок 2.1 – Вывод при работе программы

2.4 Типы данных в языке Python

Всего в языке программирования Python есть 8 типов данных:

  1. int – целые числа;

  2. float – числа с плавающей точкой;

  3. complex – комплексные числа (числа вида a + b*i, где a и b – вещественные числа, а i – мнимая единица, т.е. число для которого выполняется i^2 = -1);

  4. string – строки;

  5. list – списки;

  6. tuple – кортежи;

  7. dict – словари;

  8. file – файлы.

В данной работе использовался тип данных float, который отвечает за числа с плавающей точкой. Переменная такого типа может принимать значения от 2.2^-308 до 1.7^308. Переменные типа int как и в других языках могут принимать значения от -2 147 483 648 до 2 147 483 648.

Приложение А

Листинг программы

def toFixed(numObj, digits=0): return f"{numObj:.{digits}f}" x = 21710457112.28112002; A1 = 0.00000002 print("x =", toFixed(x, 10), "\nАбсолютная ошибка =", toFixed(A1, 8), "\nОтносительная ошибка =", toFixed(A1 / x, 24)) y = x * (10 ** (-10)); A2 = 0.45711228112002 print("y =", toFixed(y, 10), "\nАбсолютная ошибка =", toFixed(A2, 18), "\nОтносительная ошибка =", toFixed(A2 / y, 24)) c = x + y; A3 = 0.000095731228112002 print("c =", toFixed(c, 12), "\nАбсолютная ошибка =", toFixed(A3, 18), "\nОтносительная ошибка =", toFixed(A3 / (y + x), 25)) c1 = toFixed(c, 9); A4 = 0.000067511 print("c1 =", c1, "\nАбсолютная ошибка =", toFixed(A4, 9), "\nОтносительная ошибка =", toFixed(0.00000000000000311, 17)) z1 = x + 10 ** (-8); A5 = 0.00002003 print("z1 =", toFixed(z1, 10), "\nАбсолютная ошибка =", toFixed(A5, 8), "\nОтносительная ошибка =", toFixed(A5 / z1, 17)) z2 = x - 10 ** (-8); A6 = 0.00002001 print("z2 =", toFixed(z2, 10), "\nАбсолютная ошибка =", toFixed(A6, 8), "\nОтносительная ошибка =", toFixed(A6 / z2, 17)) k = int(x) print("k =",k,"\nАбсолютная ошибка =", 0, "\nОтносительная ошибка =", 0)