
ЯП / ЯП сман
.docxЦель работы
Знакомство с основными ошибками, возникающими при обработке вещественных чисел.
Краткая теория
Вещественные числа при обработке в вычислительной системе представляются в двоичном виде.
Существует два подхода:
-
Число представляется в согласно двоичной арифметике в виде числа с плавающей запятой. Такой подход называется двоично-кодированным десятичным числом.
-
Цифры числа кодируются как целое число, дополненное информацией о позиции десятичного разделителя. Это формат числа называется форматом с фиксированной точкой.
Существуют три основные ошибки вычислений, возникающие при выполнении операции над вещественными числами:
-
Исчезновение операнда. Операнд может исчезнуть, если он относительно мал по отношению с другим операндом.
-
Умножение ошибки – многократное увеличение абсолютной погрешности операнда.
-
Потеря значимости. Возникает, когда результат вычислений невозможно представить в допустимой форме.
Ход работы
1) В качестве исходного значения принимаем следующие значения:
х=<номер студенческого билета><номер группы>,<дата рождения ддммгг>
х = 10520375201,22041993
у
= х*
у = 10520375201,22041993*0,0000000001 = 1,052037520122041993
с = х+у
с = 10520375201,22041993 + 1,052037520122041993 = 10520375202,272457450122041993
-
с’ = округление с до 9 знака после запятой
с’ = 10520375202,272457450
Абсолютная ошибка
А = | c - с’|
A = |10520375202,272457450122041993 - 10520375202,272457450| = 0,000000000122041993
Относительная ошибка
О = А/c
O = 0,000000000122041993/10520375202,272457450122041993 = 0,0000000000000000000116005362
-
Предполагаем, что в младшем разряде числа х произошла ошибка.
z
= x
±
z = 10520375201,22041993 – 0,00000001 = 10520375201,22041992
Производим умножение без ошибки
m = x * x
m = 10520375201,22041993 * 10520375201,22041993 = 110678294374453591131,80489681
Производим умножение с ошибкой
n = x * z
n = 10520375201,22041993 * 10520375201,22041992 = 110678294374453591026,60114479
Абсолютная ошибка
А = |m - n|
A = |110678294374453591131,80489681- 110678294374453591026,60114479 | = 105,20375202
Относительная ошибка
О = А/m
O = 105,20375202/110678294374453591131,80489681 = 0,0000000000000000009505364409
-
Округлим х до целого числа
k = 10520375201
Абсолютная ошибка
А = |x - k|
A = |10520375201,22041993 - 10520375201| = 0,22041993
Относительная ошибка
О = А/x = 0,22041993/10520375201,22041993 = 0,0000000000209517175750946702
Скриншот
Рисунок 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 WindowsFormsApplication1
{
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)
{
decimal x = 10520375201.22041993m;
decimal xx = 0.0000000001m;
decimal y = x * xx;
decimal c = x + y;
decimal cc = Math.Round(c, 9);
decimal a1 = c - cc;
decimal o1 = a1 / c;
decimal zz = 0.00000001m;
decimal z = x - zz;
decimal m = x * x;
decimal n = x * z;
decimal a2 = Math.Abs(m - n);
decimal o2 = a2 / m;
decimal k = Math.Round(x, 0);
decimal a3 = Math.Abs(x - k);
decimal 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();
}
}
}
Заключение
В данной лабораторной работе были изучены ошибки, возникающие при обработке вещественных чисел.
Министерство образования и науки РФ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ
УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ
ТОМСКИЙ ГОСУДАРСТВЕННЫЙУНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ
(ФГБОУ ВПО ТУСУР)
Кафедра комплексной информационной безопасности
электронно-вычислительных систем (КИБЭВС)
Отчет
По лабораторной работе №2
Тема: «Вещественные числа. Ошибки при работе с вещественными числами»
Выполнила:
студентка группы 520-1
________ Сман А.В.
« » март 2013 г
Проверил:
Доцент кафедры КИБЭВС
_______ Романов А.С.
« » март 2013 г
Томск – 2013
Исчезновение операнда. Операнд - одно из чисел в выражении.
Если сложить/вычесть большое число с малым, то малое число просто потеряется, разница операндов должна быть в несколько порядков.
Потеря значимости. При вычитании близких вещественных чисел мы также получаем неточности. Следует избегать таких действий.
Умножение ошибки. Происходит накопление ошибки из-за округления.