|
Boost : |
From: Maarten Kronenburg (M.Kronenburg_at_[hidden])
Date: 2006-05-30 04:31:01
If you don't mind I start a new thread here.
The unsigned infinite precision integer is
different from the base type unsigned int,
which is actually a modular integer with
modulus 2^n.
Therefore two integer derived classes are
needed: unsigned_integer and modular_integer.
The unsigned_integer is an infinite precision
integer which can only be positive or zero.
The negate() of a non-zero unsigned_integer
will always throw an exception.
A subtraction which results in a negative value
will do the same; therefore in my opinion
there is no fundamental problem with this,
as negation is subtraction from zero.
The modular_integer has a static method
static void set_modulus( const integer & ).
When the modulus is not set, it is zero,
in that case the modular_integer is identical to integer.
Users that like an unsigned integer with
a negate() that always works, will have to
use a modular_integer and set its modulus
to a positive value.
In the document I will specify unsigned_integer
and modular_integer, and thus implementations
can provide them.
Regards, Maarten.
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk