This file defines a few very basic functions which I feel should
really be part of the standard C++. Nevertheless I have placed all
definitions inside the namespace
CoCoA. Here is a summary:
double) to nearest integer value (of type
double); halves round towards +infinity.
hi-loas unsigned long (assumes
LongRange(lo,hi)-- returns a
MaxSquarableInteger<T>()-- returns largest integer whose square fits in type
len(v)-- same as
v.size()except that result is
Everything is in
the functions are all so simple that they can be implemented inline.
Impl of template fn
MaxSquarableInteger uses GMP to compute the
memorized values. A table of constants would be faster but potentially
less portable (given that CoCoALib requires GMP anyway). I haven't yet
found a neat way of ensuring that the type
T is integral & bounded.
A possibly better idea for
MaxSquarableInteger: precompute 2^63*sqrt(2) as
unsigned long, then simply right shift this value for integral types with
less than 127 bits. This suggestion presupposes a binary computer.