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

ЯП / ЯП сман

.docx
Скачиваний:
40
Добавлен:
11.05.2015
Размер:
38.03 Кб
Скачать

Цель работы

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

Краткая теория

Вещественные числа при обработке в вычислительной системе представляются в двоичном виде.

Существует два подхода:

  1. Число представляется в согласно двоичной арифметике в виде числа с плавающей запятой. Такой подход называется двоично-кодированным десятичным числом.

  2. Цифры числа кодируются как целое число, дополненное информацией о позиции десятичного разделителя. Это формат числа называется форматом с фиксированной точкой.

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

  1. Исчезновение операнда. Операнд может исчезнуть, если он относительно мал по отношению с другим операндом.

  2. Умножение ошибки – многократное увеличение абсолютной погрешности операнда.

  3. Потеря значимости. Возникает, когда результат вычислений невозможно представить в допустимой форме.

Ход работы

1) В качестве исходного значения принимаем следующие значения:

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

х = 10520375201,22041993

у = х*

у = 10520375201,22041993*0,0000000001 = 1,052037520122041993

с = х+у

с = 10520375201,22041993 + 1,052037520122041993 = 10520375202,272457450122041993

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

с’ = 10520375202,272457450

Абсолютная ошибка

А = | c - с’|

A = |10520375202,272457450122041993 - 10520375202,272457450| = 0,000000000122041993

Относительная ошибка

О = А/c

O = 0,000000000122041993/10520375202,272457450122041993 = 0,0000000000000000000116005362

  1. Предполагаем, что в младшем разряде числа х произошла ошибка.

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

  1. Округлим х до целого числа

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

Исчезновение операнда. Операнд - одно из чисел в выражении.

Если сложить/вычесть большое число с малым, то малое число просто потеряется, разница операндов должна быть в несколько порядков.

Потеря значимости. При вычитании близких вещественных чисел мы также получаем неточности. Следует избегать таких действий.

Умножение ошибки. Происходит накопление ошибки из-за округления.

Соседние файлы в папке ЯП