43 lines
1.8 KiB
Plaintext
43 lines
1.8 KiB
Plaintext
|
|
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
|
|
|