Paul Zimmermann's challenge on the double factorial

Paul Zimmermann Paul.Zimmermann at loria.fr
Tue Feb 2 13:45:40 CET 2010


       Peter,

> Date: Tue, 2 Feb 2010 11:51:07 +0100
> From: "peter.luschny" <peter.luschny at googlemail.com>
> 
> Hi,
> 
> Paul Zimmermann challenged us to write a faster function for
> calculating the double factorial: "Challenge: do better than mpz_fac_ui2 ..."
> http://gmplib.org/list-archives/gmp-discuss/2009-January/003510.html
> 
> His implementation, which he says is based on an idea of Scho"nhage
> et alia (see the reference in his listing), can be found here:
> http://www.loria.fr/~zimmerma/software/double_fac_ui.c
> 
> I wrote a version which is not based on Scho"nhage's algorithm but
> also uses prime factorisation. I named it 'SwingDouble'. It seems
> to be faster, but what might be more significant, it uses less memory.
> Here is the output from a test run.
> 
> Testing number:   32000000
> ParallelDouble:   20.734 sec, memory:  2062258 long
> SwingDouble:      24.093 sec, memory:  2062258 long
> ZimmermannDouble: 31.907 sec, memory: 65973814 long
> 
> Testing number:   32000001
> ParallelDouble:   33.265 sec, memory:  3947628 long
> SwingDouble:      36.640 sec, memory:  3947628 long
> ZimmermannDouble: 37.281 sec, memory: 65973816 long
> 
> Testing number:   64000000
> ParallelDouble:   45.906 sec, memory:   3947628 long
> SwingDouble:      53.531 sec, memory:   3947628 long
> ZimmermannDouble: 70.000 sec, memory: 131785085 long
> 
> Testing number:   64000001
> ParallelDouble:   72.406 sec, memory:   7570170 long
> SwingDouble:      80.109 sec, memory:   7570170 long
> ZimmermannDouble: 80.812 sec, memory: 131785087 long
> 
> The functions to compare are 'ZimmermannDouble' and 'SwingDouble'.
> The experimental variant 'ParallelDouble' is not part of this
> 'competition'. Please let me know if you think that the comparison
> is correct and fair. You can find the sources here:
> http://www.luschny.de/math/factorial/testdoublefactorial.zip
> 
> Peter Luschny

impressive timings! However my original challenge said
"do better than mpz_fac_ui2 for n=1000000"... How does
your code behave for n=1000000?

Paul


More information about the gmp-discuss mailing list