
A new experimental fast multiprecison floating-point module is now available, 
implemented in float.cpp and float.h. The motivation was to speed up the CM 
program fir elliptic curves - see cm.txt

A new C++ class Float is defined, which can be used instead of Flash. The 
main advantage is that it uses asymptotically fast methods. If MR_KCM is 
defined in mirdef.h, then Karatsuba's method is used, otherwise FFT methods 
(see mrfast.c). Karatsuba is faster with precisions up to several thousands of 
words, beyond that the FFT is to be preferred.

A simple example is shown in the file fsample.cpp. Compare with sample.cpp 
which uses Flash arithmetic.

For a more useful example of use see cm.cpp, a fast replacement for the 
original cm.cpp which used Flash arithmetic. To support this application 
modules flpoly.h/.cpp and complex.h/.cpp have also been created, for Float 
polynomials and Complex arithmetic respectively.

There are a few restrictions:-

1) A full width base must be used.
2) The precision of FP arithmetic must be specified by a call to 
   setprecision(n). The precision will be 2^n words. Miracl must be 
   initialised to at least 2^n+2 words per big, either by mirsys(2^n+2,0) or 
   Miracl precision=2^n+2;
3) The basic miracl library must support flash arithmetic - that is MR_FLASH 
   must be defined in mirdef.h
4) Only very basic numeric output is supported. Output attempts to print a 
   decimal, but if the number x is very large or very small it will be output
   as x.2^n.

See float.h for the functions currently implemented.

Note that this class has been designed simply for raw speed. No particular 
care has been taken with respect to rounding errors. The rounding method is 
simple truncation. The last few digits of any calculation are probably in 
error.

A rudimentary Complex class based on Float can be found in complex.h and 
complex.cpp 

