[ << ]  [ < ]  [ Up ]  [ > ]  [ >> ]  [Top]  [Contents]  [Index]  [ ? ] 
7.1 Modular integer rings
CLN implements modular integers, i.e. integers modulo a fixed integer N.
The modulus is explicitly part of every modular integer. CLN doesn’t
allow you to (accidentally) mix elements of different modular rings,
e.g. (3 mod 4) + (2 mod 5)
will result in a runtime error.
(Ideally one would imagine a generic data type cl_MI(N)
, but C++
doesn’t have generic types. So one has to live with runtime checks.)
The class of modular integer rings is
Ring cl_ring <cln/ring.h>   Modular integer ring cl_modint_ring <cln/modinteger.h>
and the class of all modular integers (elements of modular integer rings) is
Modular integer cl_MI <cln/modinteger.h>
Modular integer rings are constructed using the function
cl_modint_ring find_modint_ring (const cl_I& N)

This function returns the modular ring ‘Z/NZ’. It takes care of finding out about special cases of
N
, like powers of two and odd numbers for which Montgomery multiplication will be a win, and precomputes any necessary auxiliary data for computing moduloN
. There is a cache table of rings, indexed byN
(or, more precisely, byabs(N)
). This ensures that the precomputation costs are reduced to a minimum.
Modular integer rings can be compared for equality:
bool operator== (const cl_modint_ring&, const cl_modint_ring&)
bool operator!= (const cl_modint_ring&, const cl_modint_ring&)

These compare two modular integer rings for equality. Two different calls to
find_modint_ring
with the same argument necessarily return the same ring because it is memoized in the cache table.
[ << ]  [ < ]  [ Up ]  [ > ]  [ >> ]  [Top]  [Contents]  [Index]  [ ? ] 
This document was generated on August 27, 2013 using texi2html 5.0.