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

ЯП / ЯП / Yap_Lab_2

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

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

Томский Государственный университет систем управления и радиоэлектроники (ТУСУР)

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

ОТЧЕТ

по лабораторной работе №2

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

Выполнил студент гр. 521

Ингинен А. И.

______________ 08.12.12

Принял: Романов А. С.

___________­­­___ 24.12.12

Томск 2012

  1. Цель работы

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

  1. Задание

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

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

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

y=x*10-10;

c=x+y;

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

z=x±10-8;

k=округление до целого(x).

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

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

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

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

  1. Теоретический материал

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

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

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

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

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

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

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

  1. Ход выполнения работы

x=1152008521,29061994;

y= 0,115200852129061994;

c=x+y=1152008521,405820792129061994;

c’=1152008521,405820792;

абсолютная ошибка: A=|c-c’|=0,000000000129061994;

относительная ошибка: O=A/c=0,0000000000000000001120321521.

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

z=x+0,00000001=1152008521,29061995.

Произведем умножение без ошибок.

m=x*x=1327123633126200735,5894774295256;

Произведем умножение с ошибкой.

n=x*z=1327123633126200747,1095626424318;

абсолютная ошибка: A=|m-n|=11,5200852129062;

относительная ошибка: O=A/m=0,000000000000000008680491346.

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

k=1152008521;

абсолютная ошибка: A=|x-k|=0,29061994;

относительная ошибка: O=A/x=0,0000000002522723874.

Программа (Java):

import java.math.BigDecimal;

import java.math.RoundingMode;

public class lab1 {

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

{ double x, y, c, c1, a, o ;

x=1152008521.29061994;

double x1=Math.pow(10,-10);

y=x*x1;

c=x+y;

c1 = new BigDecimal(c).setScale(9, RoundingMode.HALF_UP).doubleValue();

a=Math.abs(c-c1);

o=a/c;

double z=x+0.00000001;

double m=x*x;

double n=x*z;

double a1=Math.abs(m-n);

double o1=a1/m;

int j = (int) Math.round(x);

double k = (double)j;

double a2=Math.abs(x-k);

double o2=a2/x;

System.out.println("x=" + x);

System.out.println("y=" + y);

System.out.println("c=" + c);

System.out.println("c'=" + c1);

System.out.println("A=" + a);

System.out.println("O=" + o);

System.out.println("z=" + z);

System.out.println("m=" + m);

System.out.println("n=" + n);

System.out.println("A=" +a1);

System.out.println("O=" +o1);

System.out.println("k=" + k);

System.out.println("A=" +a2);

System.out.println("O=" +o2);

}

}

}

Результат работы программы:

x=1.1520085212906199E9

y=0.11520085212906199

c=1.1520085214058206E9

c'=1.1520085214058206E9

A=0.0

O=0.0

z=1.1520085212906199E9

m=1.32712363312620058E18

n=1.32712363312620058E18

A=0.0

O=0.0

k=1.152008521E9

A=0.2906198501586914

O=2.5227230943839177E-10

  1. Вывод

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

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