У меня есть этот C-код, чтобы сделать умножения над GF (8):Оптимизировать у = х * х в поле Галуа арифметического
int32_t GaloisMultiply (int32_t a, int32_t b)
{
int32_t i;
int32_t mask = 0x100;
int32_t y = 0;
for(i=0;i<8;i++)
{
if(b & mask)
{
y ^= a;
}
mask >>= 1;
y <<= 1;
}
if(b & 0x1)
{
y ^= a;
}
return(y);
}
Это более или менее реализация учебника.
Интересно, есть ли у меня умная оптимизация для вышеуказанного алгоритма, если я могу утверждать, что a всегда b, например. Я занимаюсь возведением квадратов вместо умножения. Я не после криптографического использования кстати. Я просто хочу использовать тот факт, что x * x в GF (8) чередует биты x с нулевыми битами один за другим.
Есть уже довольно умные методы для выполнения чередования бит, но поскольку я обнаружил, что x * x в GF (8) делает операцию чередования бит (случайно), я не могу перестать пытаться ее использовать для оптимизации чередования бит.
Любые идеи?
Но, извините, я не думаю, что они используют эффект квадратизации (бит-чередование), о котором вы говорите явно (или, учитывая это, действительно повышает производительность). – 2008-09-22 20:40:04
Метод на основе таблиц должен быть быстрее, независимо от того, стоите ли вы квадрат – 2008-09-22 20:44:16
Подход на основе таблицы делает трюк. Благодарю. – 2008-09-22 21:11:18