БлогNot. Два сомнительных алгоритма из книжки

Два сомнительных алгоритма из книжки

1. Организация кольцевого буфера ёмкости n в виде

const int n = 5;
int array[n];
unsigned count=0;

while (1) {
  array[count++] = ...;
  if (count==n) count=0;
  //...
 }

явно избыточна по сравнению с

while (1) {
 array[count] = ...;
 count = (count+1)%n;
 //...
}

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

2. Накопление произведения в виде

double p=1,a;
while (ПОЛУЧИТЬ СЛЕДУЮЩЕЕ a) if (a) p*=a;

вообще прямо ошибочно. Например, не позволяет отличить ситуацию, при которой произведение не искалось (скажем, на вход поступили одни нули), от ситуации, когда ответ равен 1, например, 0.1*10.

В последнем случае правильно было бы так, пожалуй:

double p=0,a;
while (ПОЛУЧИТЬ СЛЕДУЮЩЕЕ a) p=p==0?a:a==0?p:p*a;

- но не слишком ли красиво? :)

03.12.2014, 14:57 [9124 просмотра]


теги: c++ учебное ошибка алгоритм

К этой статье пока нет комментариев, Ваш будет первым