Такая ошибка как исчезновение порядка может возникнуть при

Работа по теме: л_4_Операции_и_выражения. Глава: Потеря (исчезновение) порядка. ВУЗ: БГУ.

Потеря (исчезновение) порядка

Пусть для
представления вещественного числа
выделено 3 разряда под мантиссу и 2 под
порядок.

Тогда при делении
двух чисел 0.425*10-27 и 0.561*1078
имеем:

0.425*10-27/0.561*1078
= 0.0757575…*10-105
= 0.757575…*10-106 = 0, т.е. все значения с
порядком, меньшим чем (-99) будут
восприниматься как «машинный нуль».

Катастрофическая потеря порядка

Пусть для
представления вещественного числа
выделено 3 разряда под мантиссу и 2 под
порядок. Тогда имеем:

0.425*10-27/0.561*1078*0.200*1087=0.0757575…*10-105*0.200*1087=0.757575…*
10-106*0.200*1087=0,
т.к. из предыдущего примера мы знаем,
что 0.757575…*10-106 есть 0 (вместо
ожидаемого результата 0.1515151*10-19).

Потеря значащих цифр

При выполнении
операций сложения и вычитания вещественных
чисел может произойти потеря значащих
цифр. Например,

  • 10-9.82
    = 0.18
    (ожидаем)

10-9.82
= 0.100*1002–0.982*1001
= 0.100*1002–0.0982*1002=
0.100*1002–0.098*1002
= 0.002*1002
= 0.2 (получаем,
если проводилось усечение).

  • 1000
    – 999 = 1
    (ожидаем)

1000
– 999 = 0.100*1004
– 0.999*1003
= 0.100*1004
– 0.0999*1004
=
0.100*1004
– 0.100*1004=0
(получаем, если
проводилось округление) или
1000 – 999 =
0.100*1004
– 0.999*1003
= 0.100*1004
– 0.0999*1004
=
0.100*1004
– 0.099*1004=0.001*1004
=10 (вместо
ожидаемой 1, если проводилось усечение).

Особенности выполнения операций отношения (сравнения)

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

Это связано с
погрешностью представления вещественных
значений в памяти. Значение величины,
с которой сравнивается модуль разности,
следует выбирать в зависимости от
решаемой задачи и точности переменных,
участвующих в выражении. Снизу эта
величина ограничена константами,
определенными в заголовочном файле
<float.h>:

FLT_EPSILON
= 1.192092896e-07F и

DBL_EPSILON =
2.2204460492503131e-016.

Примеры сравнения
вещественных чисел на точное равенство:

int
main()

{float
x=1;

x+=0.5;
//
значение x 1.5 имеет тип float

bool
b=(x==1.5);
//константа
1.5 имеет тип double

//
значение x и константа 1.5 представляются
в 2 с/с точно, поэтому

cout
<< b
<< endl; //
1
(true) !!!

_getch();

return
0;

}

int
main()

int
main()

{float
x=1;

x+=0.1;
//
значение x 1.1 имеет тип float

bool
b=(x==1.1);
//константа
1.1 имеет тип double

//
значение x и константа 1.1 представляются
в 2 с/с бесконечным числом, поэтому

cout
<< b
<< endl; //
0
(false) !!!

_getch();

return
0;

}

НО!!!

int
main()

int
main()

{double
x=1;

x+=0.1;
//
значение x 1.1 имеет тип double

bool
b=(x==1.1);
//константа
1.1 имеет тип double

//
хотя
значение
x и константа 1.1 представляются в 2 с/с
бесконечным числом

cout
<< b
<< endl; //
1
(true) !!!

_getch();

return
0;

}

Обратить внимание

Названные особые
случаи нарушают иногда и привычную
логику организации вычислений. Рассмотрим
два возможных случая.

Пример 1.
Вычисление y(x)
= (1-cos x) / x2.
Эта формула не работает для малых
значений х (уменьшаемое равно 1, вычитаемое
стремится к 1, все делится на малое
число). Для получения правильных
результатов формулу необходимо
преобразовать к виду z(x)
= 2 sin2 (x/2)
/ x 2.

Пример 2. Не
всегда выполняется и ассоциативный
закон сложения. Добавление или вычитание
малого (даже относительно малого) числа
может никак не сказаться на результате
(например, 1Е+15 и 1Е+10); необходимо
перестроить формулу вычислений настолько,
насколько это позволяет алгоритм или
вводить общий масштаб. Проанализируйте
примеры:

int
main()

{
double
x, y, z, r, v;

x=1.1e22;
y = -1.1e22; z= 1.0e2;

r=
(x+y)+z; cout<<r<<endl; //напечатает
100, т.к.

//(1.1e22
+ -1.1e22) + 1.0e2 = 0.0e22 + 1.0e2 = 100

r=
x+(y+z); cout << r <<endl; //напечатает
0, т.к.

//1.1e22
+ (-1.1e22 + 1.0e2) = 1.1e22 + (-1.1e22) = 0

_getch();

return
0;

}

Пример
3.
Обращайте внимание
на типы переменных и констант. Их
несовпадение может доставить массу
неприятностей. Проанализируйте примеры:

int
main()

{double
a,b;

b=2.0e4
+ 1.0; //тип
констант double
и совпадает с типом переменной

a=b-2.0e4;

printf
(«%lfn»,
a); //1.000000

b=2.0e20
+ 1.0;

a=b-2.0e20;

printf
(«%lfn»,
a); //0.000000

_getch();

return
0;

}

НО!!!

int
main()

{
float
a,b;

b=2.0e4
+ 1.0;
//тип констант double
и не совпадает с типом переменной

a=b-2.0e4;

printf
(«%fn»,
a); //1.000000

b=2.0e20
+ 1.0;

a=b-2.0e20;

printf
(«%fn»,
a); //4008175468544.000000

//из-за
различной точности представления
значений
типов
float и double

_getch();

return
0;

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Исчезновение — порядок

Cтраница 1

Исчезновение порядка и потеря значимости не могут возникнуть.
 [1]

Исчезновение порядка происходит, когда порядок результата должен иметь значение, меньшее — ( 2 — 1) — максимального по модулю отрицательного порядка. В таком случае результат приходится представлять машинным нулем.
 [2]

Возникновение и исчезновение порядка в расположении атомов твердых растворов сопровождается изменением свойств. При упорядочении возрастают электропроводность, температурный коэффициент электрического сопротивления, твердость и прочность; снижается пластичность сплава. У ферромагнитных сплавов изменяются магнитные свойства: например, у пермаллоев ( магнитные сплавы железа с никелем) при упорядочении в несколько раз уменьшается магнитная проницаемость.
 [4]

Имеет место исчезновение порядка.
 [5]

Содержимое маски исчезновения порядка влияет также и на результат операции. Если бит маски равен 0, знак, характеристика и мантисса устанавливаются в 0, и результат становится истинным нулем. Если бит маски равен 1, мантисса нормализуется, характеристика становится на 128 больше истинного значения характеристики, а знак и мантисса остаются истинными.
 [6]

Прерывание по исчезновению порядка происходит в том случае, если при выполнении арифметических операций характеристика результата оказалась меньше нуля, а мантисса результата при этом отлична от нуля.
 [7]

Проверку переполнения и исчезновения порядка производят сервисные программы DVCHK и OVERFL. При возникновении переполнения или исчезновения порядка формируется сообщение об ошибке, и выполнение программы продолжается. При этом результаты дальнейших вычислений могут оказаться неверными. С помощью служебных программ пользователь может предусмотреть в своей программе распознавание возникшей ситуации и ее дальнейшую обработку.
 [8]

Если прерывание является следствием переполнения или исчезновения порядка, печатается также неверный результат; если прерывание возникло при делении, результат устанавливается равным делимому.
 [9]

Никогда не возникает переполнения порядка, исчезновения порядка или потери значимости.
 [10]

Если характеристика результата С 0 — исчезновение порядка, то знаку, мантиссе и характеристике результата присваиваются нулевые значения.
 [11]

Если прерывание является следствием переполнения или исчезновения порядка, печатается также неверный результат; если прерывание возникло при делении, результат устанавливается равным делимому.
 [12]

Программа OVERFL проверяет возникновение переполнения порядка и исчезновение порядка.
 [13]

S — неправильная спецификация, U — исчезновение порядка.
 [14]

Старшие нулевые цифры из мантиссы результата не исключаются, исчезновение порядка не может произойти, а дополнительная цифра при распознавании потери значимости не используется.
 [15]

Страницы:  

   1

   2

   3

   4

Вопросы к тесту: «Основы алгоритмизации и программирования МТИ Синергия»

Цикл заканчивается, когда условие при очередной проверке оказывается …

*

Аппаратный стек реализуется на базе …

оперативной памяти

процессора

шины

внешнего устройства

В языке Си символам соответствует тип …

double

char

wchar

Общие регистры хранят…

вещественные числа

биты, которые устанавливаются в единицу или ноль

целые числа или адреса

Смысл языковых конструкций определяет …

синтаксис языка

транслятор

семантика языка

Длина строки …

занимает два байта

занимает один байт

имеет переменную длину

Для описания данных служат … операторы

исполняемые

неисполняемые

составные

Систему правил написания различных языковых конструкций описывает …

компилятор

синтаксис языка

мантисса

семантика языка

Операндами команды могут быть … памяти

только регистры

только элементы

регистры или элементы

В случае четырехбайтовых плавающих чисел (тип float языка Си) точность вычислений составляет примерно … десятичных цифр

9

7

16

15

Элементы, содержащиеся в аппаратном стеке, извлекаются в…

порядке по их помещению

обратном порядке по их помещению в стек

порядке их выполнения

C++, Object Pascal, Java относятся к …

процедурным языкам

аппликативным языкам

языкам логического программирования

объектно-ориентированным языкам

В программировании по возможности следует избегать типа …

double

float

char

Для Big Endian характерно:…

Тип ответа: Множественный выбор

старшие биты целого числа располагаются в байте со старшим адресом

байты внутри машинного слова нумеруются слева направо

байты внутри машинного слова нумеруются справа налево

старшие биты целого числа располагаются в байте с младшим адресом

Примером логического выражения «ложно» является …

х= = О

0! = О

3> = О

В языке Си логическое отрицание обозначается …

двойным амперсандом &&

двойной вертикальной чертой ||

восклицательным знаком «!»

Для отделения комментария будет использоваться знак …

Тип ответа: Одиночный выбор

/*….*/

// (двойная косая черта)

::

Для блока в соответствии с синтаксисом языка C++ для отделения комментария используется знак …

/*….*/

//

::

Для использования символов в кодировке Unicode язык C++ предоставляет тип wchar_t, в котором под каждый символ отводится …

один байт

переменная длина

два байта

Раньше других был придуман язык программирования …

Fortran

Assembler

Pascal

С

Таблица символов, в которой каждому идентификатору сопоставлен свой адрес, составляется на этапе … анализа

синтаксического

лексического

семантического

Последовательность операторов, изменяющих значение одной или нескольких ячеек, это …

процедурные языки

аппликативные языки

объектно-ориентированные языки

языки логического программирования

Язык … предназначен для обработки деловой информации

С

C#

С+ +

Cobol

Такая ошибка, как исчезновение порядка, может возникнуть при …

делении маленького числа на очень большое

умножении больших чисел

умножении двух очень маленьких по абсолютной величине чисел

К языкам программирования, которые применяются при удаленной обработке информации, относятся:…

LISP. Prolog

Perl, PHP, Java, C+ +

HTML, XML

Postscript TeX

Область памяти универсального исполнителя, хранящая порцию информации, называется …

переменной

константой

мантиссой

Когда в команде указывается константа, равная адресу аргумента, то это …

относительная адресация

индексная адресация с масштабированием

абсолютная адресация

косвенная адресация

Биты, которые устанавливаются в единицу или в ноль в зависимости от результата выполнения последней команды, содержатся в…

Тип ответа: Одиночный выбор

О регистре флагов

О плавающих регистрах

О общих регистрах

Языки программирования C++, COBOL, Java применяются в такой области человеческой деятельности, как …

издательская деятельность

удаленная обработка информации

обработка информации

системное программирование

Команды процессора еще называют …

инструкциями

указателями

логарифмами

массивами

.. это специальная программа, выполняющая перевод программы написанной на языке высокого уровня в язык машинных команд?

Компилятор

Кодировщик

Язык программирования

Система программирования

В языке Си целым числам соответствуют типы …

Тип ответа: Множественный выбор

double

int

bool

float

char

Универсальный язык программирования С был разработан Денисом Ритчи и Кеном Томпсоном в …?

начале 1960-х годов

конце 1960-х годов

середине 1970-х годов

начале 1980-х годов

Язык FORTRAN первоначально был стандартизирован в …

Тип ответа: Одиночный выбор

О 1965 г.

О 1966 г.

О 1976 г.

О 1977 г.

Минимальная единица языка, имеющая самостоятельный смысл, □ это …

константа

лексема

мантисса

транслятор

К языкам логического программирования относится язык …

Тип ответа: Одиночный выбор

О LISP

О Prolog

О Java

О FORTRAN

Когда в команде указывается регистр, содержащий адрес аргумента, то это …

Тип ответа: Одиночный выбор

О относительная адресация

О индексная адресация с масштабированием

О абсолютная адресация

О косвенная адресация

К языкам программирования, которые применяются при научных вычислениях, относятся:…?

C + +, COBOL, Java

Perl, PHP, Java, C + +

Postscript ТеХ

C + +, FORTRAN, Java

Константы обозначают…

сами числа

фактические адреса ячеек памяти

и сами числа, и фактические адреса ячеек памяти

Приблизительно точность вычислений вещественных чисел типа double составляет … десятичных цифр

О 16

О 7

О 20

О 9

… — любая положительная вещественная константа в форме с фиксированной точкой или целая константа

Мантисса

Компилятор

Константа

1. Универсальный язык программирования С был разработан Денисом Ритчи и Кеном Томпсоном в …

*начале 1960-х годов

*конце 1960-х годов

*середине 1970-х годов

*начале 1980-х годов

2. Система обозначений и правил, позволяющая записать программу решения задачи в виде последовательного текста в удобном для человека виде, – это …

*язык программирования

*компилятор

*ассемблер

3. Императивные языки иногда также называются …

*объектно-ориентированными

*языками языками логического программирования

*процедурными языками

*аппликативными языками

4. В языке Си двойным амперсандом && обозначается логическое …

*сложение

*умножение

*отрицание

5. Для блока в соответствии с синтаксисом языка C++ для отделения комментария используется знак …

*/* …. */

*//

*::

6. Приблизительно точность вычислений вещественных чисел типа double составляет … десятичных цифр

*16

*7

*20

*9

7. К языкам программирования, которые применяются при удаленной обработке информации, относятся: …

*LISP, Prolog

*Perl, PHP, Java, C++

*HTML, XML

*Postscript, TeX

8. Смысл языковых конструкций определяет …

*синтаксис языка

*транслятор

*семантика языка

9. … – любая положительная вещественная константа в форме с фиксированной точкой или целая константа

*Мантисса

*Компилятор

*Константа

10. К языкам логического программирования относится язык …

*LISP

*Prolog

*Java

*FORTRAN

11. Минимальная единица языка, имеющая самостоятельный смысл,  это …

*константа

*лексема

*мантисса

*транслятор

12. Для отделения комментария будет использоваться знак …

*/* …. */

*// (двойная косая черта)

*::

13. Последовательность операторов, изменяющих значение одной или нескольких ячеек,  это …

*процедурные языки

*аппликативные языки

*объектно-ориентированные языки

*языки логического программирования

14. Примером логического выражения «ложно» является …

*х= = 0

*0! = 0

*3> = 0

15. Биты, которые устанавливаются в единицу или в ноль в зависимости от результата выполнения последней команды, содержатся в

*регистре флагов

*плавающих регистрах

*общих регистрах

16. Язык LISP относится к … языкам

*процедурным

*аппликативным

*объектно-ориентированным

17. Команды процессора еще называют …

*инструкциями

*указателями

*логарифмами

*массивами

18. Лексемами являются …

*ключевые слова, идентификаторы, символы операций, комментарии, пробелы и разделители *только ключевые слова и комментарии

*только идентификаторы, символы операций

*только комментарии

19. Элементы, содержащиеся в аппаратном стеке, извлекаются в…

*порядке по их помещению

*обратном порядке по их помещению в стек

*порядке их выполнения

20. В языке Си логическое отрицание обозначается …

*двойным амперсандом &&

*двойной вертикальной чертой ||

*восклицательным знаком «!»

21. Язык FORTRAN первоначально был стандартизирован в …

*1965 г.

*1966 г.

*1976 г.

*1977 г.

22. Цикл заканчивается, когда условие при очередной проверке оказывается …

23. Раньше других был придуман язык программирования …

*Fortran

*Assembler

*Pascal

24. В языке Си символам соответствует тип …

*double

*сhar

*wchar

25. Для описания данных служат … операторы

*исполняемые

*неисполняемые

*составные

26. Когда в команде указывается регистр, содержащий адрес аргумента, то это …

*относительная адресация

*индексная адресация с масштабированием

*абсолютная адресация

*косвенная адресация

27. Объединение определенного числа однотипных данных  это …

*последовательность

*список

*массив переменных

28. Язык … предназначен для обработки деловой информации

*C

*C#

*C++

*Cobol

29. В программировании по возможности следует избегать типа …

*double

*float

*char

30. … -это специальная программа, выполняющая перевод программы написанной на языке высокого уровня в язык машинных команд

*Компилятор

*Кодировщик

*Язык программирования

*Система программирования

31. Для Big Endian характерно: …

*старшие биты целого числа располагаются в байте со старшим адресом

*байты внутри машинного слова нумеруются слева направо

*байты внутри машинного слова нумеруются справа налево

*старшие биты целого числа располагаются в байте с младшим адресом

32. Область памяти универсального исполнителя, хранящая порцию информации, называется …

*переменной

*константой

*мантиссой

33. Языки программирования C++, COBOL, Java применяются в такой области человеческой деятельности, как …

*издательская деятельность

*удаленная обработка информации

*обработка информации

*системное программирование

34. Таблица символов, в которой каждому идентификатору сопоставлен свой адрес, составляется на этапе … анализа

*синтаксического

*лексического

*семантического

35. Систему правил написания различных языковых конструкций описывает …

*компилятор

*синтаксис языка

*мантисса

*семантика языка

36. Длина строки …

*занимает два байта

*занимает один байт

*имеет переменную длину

37. Общие регистры хранят …

*вещественные числа

*биты, которые устанавливаются в единицу или ноль

*целые числа или адреса

38. C++, Object Pascal, Java относятся к …

*процедурным языкам

*аппликативным языкам языкам

*логического программирования

*объектно-ориентированным языкам

39. Для использования символов в кодировке Unicode язык C++ предоставляет тип wchar_t, в котором под каждый символ отводится …

*один байт

*переменная длина

*два байта

40. Такая ошибка, как исчезновение порядка, может возникнуть при …

*делении маленького числа на очень большое

*умножении больших чисел

*умножении двух очень маленьких по абсолютной величине чисел

41. В языке Си целым числам соответствуют типы …

*double

*int

*bool

*float

*char

42. Аппаратный стек реализуется на базе …

*оперативной памяти

*процессора

*шины

*внешнего устройства

Понравилась статья? Поделить с друзьями:
  • Тарков потеря пакетов как исправить
  • Так решил музыкант или его представитель как исправить
  • Тарков ошибка юнити unity
  • Твич не работает на телефоне ошибка сети
  • Так много сделано ошибок стих