[CLN-list] CLN 1.2.0

Richard B. Kreckel kreckel at ginac.de
Sat Jan 19 23:34:24 CET 2008


Hi,

I am releasing CLN-1.2.0.  This took much longer than I hoped it would, 
mainly because the focus of this release has been to support huge 
numbers, i.e. those with billions of decimal digits.  And turnaround 
times when testing, debugging and benchmarking programs operating on 
numbers several GiB in size can be rather stultifying.

Another major change is the introduction of C++ exceptions for error 
handling.  The cl_abort() hook is not supported any more.  This allows 
for much more flexible error handling on the side of your application. 
Please refer to the documentation to learn about existing exception types.

Also, some types have changed which might require that you have a look 
at your application code: [su]intC is used for counter loops, [su]intE 
for exponents of all floating-point numbers, and cl_boolean has been 
replaced with standard C++ bool.

As is to be expected, if one pushes the limits of known digits, memory 
consumption becomes a critical issue.  So, CLN 1.2.0's constants and 
transcendental functions are noticeably more memory efficient than in 
previous releases.  There are two reasons for this: First, more use has 
been made of the streamed binary splitting implementation, only used 
casually in earlier versions: There, the rational series terms are not 
precomputed before starting the binary splitting algorithm but rather 
computed when they are needed.  The second reason is that while 
performing the binary splitting, some intermediate integer results may 
become much larger than the result's precision warrants.  As it turns 
out, that excess precision can simply be truncated by coercing the 
result into a cl_LF of appropriate length.  Basically, this compresses 
the extra digits into the floating-point exponent.  With some rational 
series, the savings are dramatic.  As an extreme example, attached is a 
picture of the memory footprint when computing one million decimal 
digits of Euler's gamma.  The red curve corresponds to CLN-1.1.x while 
the blue one to CLN 1.2.0.  Here, making the operands smaller even saves 
computing time.

The library has undergone tests with operands of billions of decimal 
digits and I have stopped finding errors many months ago.  This makes me 
confident to trust a computation of over 1 billion decimal digits of 
Euler's constant gamma which took one week (and another week for a 
verification on another machine with even higher precision).  Instead of 
pasting the result here, let me just write it in regexpese:

     decimal(gamma) =~ "0.57721566[0-9]{1001262760}39288477"

According to Wikipedia [1] and Xavier Gourdon's list [2], this 
establishes the current world record.  It more than eightfolds the 
previous world record by Alexander J. Yee and by the way confirms that 
earlier record's correctness.  (I've emailed Mr. Gourdon, but he doesn't 
seem to be tracking numerical world records any more, so one cannot be 
so sure.)

Oh, and last but not least, I should say a big THANK YOU to the people 
who made contributions to this release.  You'll find the names in the 
ChangeLog.

Enjoy
   -richy.

[1] <http://en.wikipedia.org/wiki/Mathematical_constant>
[2] <http://numbers.computation.free.fr/Constants/Gamma/gamma.html>
[3] <http://numberworld.org/euler116m.html>
-- 
Richard B. Kreckel
<http://www.ginac.de/~kreckel/>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: euler.png
Type: image/png
Size: 5078 bytes
Desc: not available
Url : http://www.cebix.net/pipermail/cln-list/attachments/20080119/66b886f4/euler.png


More information about the CLN-list mailing list