], int y[cols]) { for (i nt i

Автор admin Пятница, 22 мая 2009 11:32

], int y[cols]) { for (i nt i = 0; i < rows: ++i) { y[i] = 0: for (int j = 0: j < cols; j +=2) y[i] += a[i][j]*x[j] + a[i][j+l]*x[j+l]: } } В общем случае, если значение COLS кратно к, при каждой итерации внутреннего цикла можно выполнять к операций, что существенно повышает эффективность цикла. Конечно, экономия заметна только для очень больших массивов, но именно такие объемы данных обрабатываются современными математическими системами. Подстановка функций тоже может рассматриваться как своего рода разновидность развертывания циклов. Рассмотрим следующий способ вычисления степеней целых чисел: //; С05:Unroll.срр // Развертывание неявного цикла путем подстановок #include using namespace std; tempiate inline int power(int m) { return power(m) * m; } tempiate<> inline int power(int m) { return m; } tempiate<> inline int power<0>(int m) { return 1; } int mainO { Шаблонное метапрограммирование 239 int m = 4; cout « power<3>(m) « endl; } ///:- Формально компилятор должен генерировать три специализации шаблона powero, по одной для каждого параметра 3, 2 и 1. Поскольку код каждой из


Комментарии закрыты.