diff --git a/galois_field.hh b/galois_field.hh index 8ac3713..b54229c 100644 --- a/galois_field.hh +++ b/galois_field.hh @@ -393,14 +393,19 @@ GaloisFieldReference rcp(GaloisFieldReference a) { assert(a.v); #if 1 - uint32_t r = POLY, newr = a.v; - uint32_t t = 0, newt = 1; + if (a.v == 1) + return a; + uint32_t newr = POLY, r = a.v; + uint32_t newt = 0, t = 1; auto degree = [](uint32_t a) { int d = 0; while (a >>= 1) ++d; return d; }; + int j = M - degree(r); + newr ^= r << j; + newt ^= t << j; while (newr != 1) { int j = degree(newr) - degree(r); if (j < 0) {