Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
л_4_Операции_и_выражения.doc
Скачиваний:
11
Добавлен:
05.11.2018
Размер:
660.99 Кб
Скачать

Замечания по программированию алгебраических выражений

  1. Не забываем включать требуемые заголовочные файлы.

  2. При программировании больших формул придерживаемся подхода «здравого смысла», т.к. запись формулы в виде одного выражения чревата появлением ошибок (как правило, несоответствие открывающих и закрывающих скобок), а введение большого числа дополнительных переменных для сохранения промежуточных результатов – также не лучший выход.

  3. При форматном выводе с помощью функции printf необходимо внимательно относиться к заданию спецификатора. Например, для переменной, определенной как double df; запись оператора вывода в виде printf(“%d”, df) или printf(“%d”, df) даст неверный результат.

  4. При форматном вводе с помощью функции scanf необходимо не забывать указывать адрес вводимой переменной (например, &x).

  5. При использовании функции pow для извлечения корня некоторой, (например, 4-ой степени) из выражения (например, a+b*b) помнить, что запись вида pow (a+b*b, 1/4) всегда даст значение, равное 1 из-за целочисленного деления 1 на 4. Исправить положение поможет запись степени в виде 1.0/4 или 1/4.0 или 1.0/4.0 или 0.25

  6. Заменяем умножением возведение выражений в небольшую степень (в том числе и значений, возвращаемых функциями), стараемся не использовать в таком случае функцию pow.

  7. Замена деления умножением дает выигрыш в скорости (A/5.0  A*0.2)

  8. Число в целой степени вычисляется быстрее, чем число в вещественной степени.

  9. Не путаем операции = и ==.

  10. Для повторяющихся выражений в формуле делаем предварительную замену этих выражений на некоторую переменную.

  11. Не забываем о приоритете операций.

  12. Литералы в инициализирующих выражениях должны иметь тип, соответствующий типу инициализируемой переменной (double А=0 менее эффективно, чем double А=0.0lf; double Y=1/x менее эффективно, чем double Y=1.0/x.

  13. В выражениях операнды одного типа стараемся группировать вместе.

  14. Невозможно определить порядок обработки операндов в коммутативных операциях: например: int z, x=1; z=(x*5) +((x=10)/2); z может получить различные значения в зависимости от того, какое выражение в скобках будет вычисляться первым; во избежание двусмысленности следует использовать промежуточную переменную: int z, t, x=1; t=x*5; z=(x*5) +((x=10)/2);

  15. Следим за наличием точки с запятой перед второй частью (else) условного оператора if.

  16. Если в какой-либо ветви условия необходимо выполнить более одного оператора, их следует объединить в один блок с помощью фигурных скобок.

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

  18. При вводе значения любого из целочисленных типов, превосходящего максимально допустимое значение для диапазона типа соответствующей переменной, фактически вводится неверное значение. Чтобы обнаружить ошибку, необходимо контролировать вводимые данные.

Особенности представления чисел по двоичному основанию*

Особенность представления чисел по двоичному основанию – это невозможность, как правило, осуществления точного перевода числа в двоичную систему счисления, что определяет как бы первый уровень возможных ошибок в представлении числа. Например, число 0.5 переводится в 2-ичную систему «точно»: 0.5 10 = 0.1 2 . Число 0.1 точного перевода не имеет, и его значение определяется лишь заданной точностью (количеством получаемых цифр): 0.1 10 = 0.1FFF16 = 0.000111111111 2.