ring_elem Z_mod::divide(const ring_elem f, const ring_elem g) const { if (g == _ZERO) assert(0); // MES: raise an exception if (f == _ZERO) return _ZERO; int h = modulus_sub(f, g, _P1); return h; }
void divide(elem &result, elem a, elem b) const { if (a == zero || b == zero) result = zero; else result = modulus_sub(a,b,p1); }
void divide(elem &result, elem a, elem b) const { if (a == 0 || b == 0) result = 0; else result = modulus_sub(a,b,p1); }
ring_elem Z_mod::subtract(const ring_elem f, const ring_elem g) const { if (g == _ZERO) return f; if (f == _ZERO) return negate(g); int n = modulus_sub(_exp_table[f.int_val], _exp_table[g.int_val], P); return _log_table[n]; }
void subtract(elem &result, elem a, elem b) const { if (b == zero) result = a; else if (a == zero) result = modulus_add(b, minus_one, p1); else { int n = modulus_sub(exp_table[a], exp_table[b], p); result = log_table[n]; } }
void Z_mod::internal_subtract_to(ring_elem &f, ring_elem &g) const { if (g == _ZERO) return; if (f == _ZERO) f = negate(g); else { int n = modulus_sub(_exp_table[f.int_val], _exp_table[g.int_val], P); f = _log_table[n]; } }
ring_elem GF::divide(const ring_elem f, const ring_elem g) const { if (g == _ZERO) assert(0); // MES: raise an exception if (f == _ZERO) return _ZERO; return modulus_sub(f, g, Q1_); }