Пиши Дома Нужные Работы

Обратная связь

Некоторые приёмы повышения эффективности программ

Вычисление констант

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

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

Инициирование переменных

Если начальные значения присваиваются переменным одновре­менно с их объявлением, то тем самым экономится время выпол­нения программы. В этом случае переменные получают начальные значения во время компилирования, а не во время выполнения. Инициирование переменных во время их объявления облегчает документирование программ, а также помогает избежать ошибок, которые могут возникнуть в случае, если переменным не были при­своены начальные значения.

Инициируйте переменные во время компилирования.

3.Арифметические операции

Арифметические операции выполняются с различной скоростью. Полезно знать, какие операции выполняются быстрее, так как иногда бывает целесообразно заменить одну операцию другой. Пе­речислим математические операции в порядке возрастания време­ни их выполнения: 1) сложение или вычитание, 2) умножение, 3) деление, 4) возведение в степень.



Некоторые медленно выполняемые операции легко заменить на более быстрые.

Сложение выполняется быстрее, чем умножение, поэтому умно­жение на небольшое целое число следует заменять сложением. Так, 3*1 должно быть заменено на 1+1+1. Если в выражении не все числа являются целыми, то при замене может быть утеряна точ­ность. Ошибка округления действительных чисел имеет тенден­цию накапливаться, а не уменьшаться. Так, если К — действитель­ное число, а I — целое, то 1*К более правильно, чем К+К+К+К— (I раз).

Преобразование уравнений может привести к исключению опе­раций. Например, выражение Х = 2*Y+(А—1)/Р+2*Т можно за­менить уравнением

Х = 2*(Y+Т) + (А—1)/Р, что исключает одну операцию умножения.

Поскольку деление является более медленной операцией, всюду, где возможно, его следует заменять умножением. Умножение вы­полняется по меньшей мере в два раза быстрее деления. Исключайте деление из вашей программы всюду, где это возможно: вме­сто А/5.0 пишите А*0.2.

Если в вычислениях вы все время делите на некоторое число, папример на X, замените его на обратную величину.

Важно также правильно задать тип показателя степени в опе­рации возведения в степень. Всегда, когда это возможно, следует использовать целые числа. Например,

Медленный способ: А**8.0 или А**Р, где Р — число с плаваю­щей точкой.

Более быстрый способ: А**8 или А**1, где I — целое число.

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

Если показатель степени — целое число, то операцию возведе­ния в степень выполняют повторяющимся умножением. Если пока­затель степени является числом с плавающей точкой, то для вы­полнения операции возведения в степень необходимо вызвать спе­циальную подпрограмму.

Функция извлечения квадратного корня реализуется обычно гораздо быстрее, и точность при этом выше, чем при выполнении операции возведения в степень.

Умножение выполняется значительно быстрее возведения в сте­пень, поэтому, если показатель степени — небольшое целое число, то операцию возведения в степень следует заменять несколькими операциями умножения:

Для возведения в степень обычно требуется библиотечная про­грамма. Поэтому замена его несколькими операциями умножения экономит и память, и время, если показатель степени является не­большим целым числом.

Заменяйте Х**2 на Х*Х Заменяйте Х**3 на Х*Х*Х Заменяйте Х**4 на (Х*Х)#(Х*Х)

или на (((Х*Х)*Х)*Х)

Последний пример содержит повторяющееся вычисление (Х*Х), которое в дальнейшем может быть оптимизировано. Замена одной операции другой, выполняемой более быстро, называется уменьше­нием силы операции. Уменьшение силы операции может иногда ухудшить удобочи­таемость программ, и об этом следует всегда помнить. Кроме того, при таком преобразовании некоторое количество машинного вре­мени затрачивается на управление промежуточными результатами.

Арифметика с фиксированной точкой

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

Некоторые машины могут выполнять 50 операций сложения целых чисел за время, требуемое для выполнения одной операции сложения с плавающей точкой. В этом случае целочисленную арифметику следует использовать всюду, где это возможно, осо­бенно для выполнения большого числа простых арифметических операций над целыми числами, такими, как индексы. Использова­ние неправильного типа переменных для индексов может значительно увеличить время выполнения любой программы.

Впрочем, некоторые машины выполняют операции с плаваю­щей точкой быстрее, чем операции с фиксированной точкой. Обыч­но это большие машины, служащие для проведения научных рас­четов. Они имеют специальное оборудование, обеспечивающее вы­полнение арифметических операций с плавающей точкой.

Особое внимание следует уделить тому, чтобы внутренние пе­реключатели, счетчики и переменные, встречающиеся в многочис­ленных вычислениях, были такого типа, который приводит к са­мым эффективным вычислениям. Это чаще всего является проблемой при работе с переменными, являющимися строками символов. Если возникает такая ситуация, то для каждого вычисления необходимо делать многочисленные преобразования. И память, и вре­мя можно сэкономить правильным описанием переменных.

Смешанные типы данных

Смешанные типы данных получаются в результате использова­ния чисел различного типа в арифметических и логических опера­циях. Если вы смешиваете числа разного типа, то при выполнении арифметических операций часто бывают необходимы преобразова­ния. Ситуацию можно улучшить, объявляя как можно больше пе­ременных одинакового типа. В этом случае нужно меньше забо­титься о том, чтобы избежать смешанных вычислений, поскольку почти все переменные одного типа. Хотя смешанная арифметика допускается, чтобы уменьшить количество ошибок и помочь про­граммисту, ее следует избегать, так как она занимает больше вре­мени и памяти.

Избегайте смешанных типов данных,

Способ устранения ошибок

В некоторых простых компиляторах следует тщательно выби­рать тип используемых констант. Например, А = 0 (неэффективно) А = 0.0 ( эффективно).

Некоторые компиляторы требуют преобразования целого нуля в вещественный во время выполнения программы, как в случае А = 0; во втором случае необходимость в преобразовании отсутст­вует. Хороший компилятор запоминает константу в нужной форме при компилировании, а не во время выполнения.

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






ТОП 5 статей:
Экономическая сущность инвестиций - Экономическая сущность инвестиций – долгосрочные вложения экономических ресурсов сроком более 1 года для получения прибыли путем...
Тема: Федеральный закон от 26.07.2006 N 135-ФЗ - На основании изучения ФЗ № 135, дайте максимально короткое определение следующих понятий с указанием статей и пунктов закона...
Сущность, функции и виды управления в телекоммуникациях - Цели достигаются с помощью различных принципов, функций и методов социально-экономического менеджмента...
Схема построения базисных индексов - Индекс (лат. INDEX – указатель, показатель) - относительная величина, показывающая, во сколько раз уровень изучаемого явления...
Тема 11. Международное космическое право - Правовой режим космического пространства и небесных тел. Принципы деятельности государств по исследованию...



©2015- 2020 pdnr.ru Все права принадлежат авторам размещенных материалов.