
Цель работы
Знакомство с основными ошибками, возникающими при обработке вещественных чисел.
Краткая теория
Вещественные числа при обработке в вычислительной системе представляются в двоичном виде.
Существует два подхода:
-
Число представляется в согласно двоичной арифметике в виде числа с плавающей запятой. Такой подход называется двоично-кодированным десятичным числом.
-
Цифры числа кодируются как целое число, дополненное информацией о позиции десятичного разделителя. Это формат числа называется форматом с фиксированной точкой.
Существуют три основные ошибки вычислений, возникающие при выполнении операции над вещественными числами:
-
Исчезновение операнда. Операнд может исчезнуть, если он относительно мал по отношению с другим операндом.
-
Умножение ошибки – многократное увеличение абсолютной погрешности операнда.
-
Потеря значимости. Возникает, когда результат вычислений невозможно представить в допустимой форме.
Ход работы
1) В качестве исходного значения принимаем следующие значения:
х = 10520415202.29031993;
у
= х*
с = х+у
-
с’ = округление с до 9 знака после запятой
Абсолютная ошибка
А = | c - с’|
Относительная ошибка
О = А/c
-
Предполагаем, что в младшем разряде числа х произошла ошибка.
z
= x
±
Производим умножение без ошибки
m = x * x
Производим умножение с ошибкой
n = x * z
Абсолютная ошибка
А = |m - n|
Относительная ошибка
О = А/m
-
Округлим х до целого числа
k = 10520415202
Абсолютная ошибка
А = |x - k|
Относительная ошибка
О = А/x
Программа разработана в среде MS Visual Studio 2010, C#.
Использованный тип данных – double.
Скриншот иллюстрирует проделанные вычисления.
Рисунок 1 – результат выполнения программы.
Листинг программы
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace YP_3
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
private void Form1_Load(object sender, EventArgs e)
{
double x = 10520415202.29031993;
double xx = 0.0000000001;
double y = x * xx;
double c = x + y;
double cc = Math.Round(c, 9);
double a1 = c - cc;
double o1 = a1 / c;
double zz = 0.00000001;
double z = x - zz;
double m = x * x;
double n = x * z;
double a2 = Math.Abs(m - n);
double o2 = a2 / m;
double k = Math.Round(x, 0);
double a3 = Math.Abs(x - k);
double o3 = a3 / x;
label1.Text = "x: " + x.ToString();
label2.Text = "y: " + y.ToString();
label3.Text = "c: " + c.ToString();
label4.Text = "c': " + cc.ToString();
label5.Text = "Абсолютная ошибка А: " + a1.ToString();
label6.Text = "Относительная ошибка О: " + o1.ToString();
label7.Text = "Предполагаемая ошибка z: " + z.ToString();
label8.Text = "Умножение без ошибки m: " + m.ToString();
label9.Text = "Умножение с ошибкой n: " + n.ToString();
label10.Text = "Абсолютная ошибка А: " + a2.ToString();
label11.Text = "Относительная ошибка О: " + o2.ToString();
label12.Text = "Округление до целого (х), k: " + k.ToString();
label13.Text = "Абсолютная ошибка А: " + a3.ToString();
label14.Text = "Относительная ошибка О: " + o3.ToString();
}
}
}
Заключение
В данной лабораторной работе были изучены ошибки, возникающие при обработке вещественных чисел.
Министерство образования и науки РФ
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ
УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра комплексной информационной безопасности электронно-
вычислительных систем (КИБЭВС)
ОТЧЕТ
по лабораторной работе №3
ВЕЩЕСТВЕННЫЕ ЧИСЛА. ОШИБКИ ПРИ РАБОТЕ С ВЕЩЕСТВЕННЫМИ ЧИСЛАМИ.
Выполнила:
студентка гр. 520-2
______________ Джурко Е.Д.
« »________2013 г.
Принял:
_____________ Романов А.С.
« »________2013 г.
Томск 2013