Конспект лекций по предмету "Программирование"


Ошибки вычислений

1. Имеются ли вычисления, использующие переменные недопустимых (например, неарифметических) типов данных?
2. Существуют ли вычисления, использующие данные разного вида? Например, сложение переменной с плавающей точкой и целой переменной. Такие случаи не обязательно являются ошибочными, но они должны быть тщательно проверены для обеспечения гарантии того, что правила преобразования, принятые в языке, понятны. Это особенно важно для языков со сложными правилами преобразования (например, для PL/1, Си). Например, следующий фрагмент программы на PL/1:
DECLARE A BIT(1);
A=1;
определяет значение A рав­ным битовому 0, а не 1. Или в языке Си попытка присвоить переменной с плавающей точкой значение 1/2 даст значение 0 (т.к. 1 и 2 имеют целый тип).
3. Существуют ли вычисления, использующие переменные, имеющие одинаковый тип данных, но разную длину? Такой вопрос справедлив для PL/1, и возник он из этого языка. Например, в PL/1 результатом вычисления выражения 25 + 1/3 будет 5.333..., а не 25.333… Аналогично, в языке Си присутствуют множество данных одного типа, но имеющих разную длину. Например, это целые типы (CHAR, INT, LONG, SHORT, INT64 и т.д.), вещественные типы (FLOAT, DOUBLE, LONG DOUBLE) и т.д. К тому же, эти типы могут быть как знаковыми (SIGNED), так и без­зна­ко­вы­ми (UNSIGNED).
4. Имеет ли результирующая переменная оператора присваивания атрибуты, описывающие ее с меньшей длиной, чем в атрибутах выражения в правой части?
5. Возможны ли переполнение или потеря результата во время вычисления выражения? Это означает, что конечный результат может казаться правильным, но промежуточный результат может быть слишком большим или слишком малым для машинного представления данных.
6. Возможно ли, чтобы делитель в операторе деления был равен нулю?
7. Если величины представлены в машине в двоичной форме, получаются ли какие-ни­будь результаты неточными? Так, 10´0,1 редко равно 1.0 в двоичной машине.
8. Может ли значение переменной выходить за пределы установленного для нее диапазона? Например, для операторов, присваивающих значение переменной PROB (имеющей смысл вероятности какого-либо события), может быть произведена проверка, будет ли полученное значение всегда положительным и не превышающим 1,0.
9. Верны ли предположения о порядке оценки и следования операторов для выражений, содержащих более чем один оператор?
10. Встречается ли неверное использование целой арифметики, особенно деления? Например, если I — целая величина, то выражение 2*I/2 = I зависит от того, является значение I четным или нечетным, и от того, какое действие — умножение или деление — выполняется первым.


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

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем конспект самостоятельно:
! Как написать конспект Как правильно подойти к написанию чтобы быстро и информативно все зафиксировать.