Два сомнительных алгоритма из книжки
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 просмотра]