At last night's clinic, we were discussing the problem of calculating the factorial of large numbers in full precision. When the building alarm kicked us out at 9:30, I was waiting for a compile to complete.
Here's a followup (mostly for Neil's benefit, since he seemed to be somewhat interested). I downloaded and built this library. CLN - Class Library for Numbers http://www.ginac.de/CLN/ Then I compiled and linked this program with it. #include <cln/integer.h> #include <cln/io.h> #include <cln/integer_io.h> main(int argc, const char *argv[]) { for (int i = 1; i < argc; i++) { char *endptr = NULL; unsigned long n = strtoul(argv[i], &endptr, 10); if (*endptr) { std::cerr << argv[i] << " not numeric" << std::endl; } else { cln::cl_I nf = cln::factorial(n); std::cout << n << "! = " << nf << std::endl; } } } Then I ran it: bash$ time ./factorial 1000000 > /tmp/1000000! real 1m6.455s user 1m5.445s sys 0m1.010s bash$ wc /tmp/1000000! 1 3 5565721 /tmp/1000000! bash$ echo `head -30c /tmp/1000000\!` ... `tail -30c /tmp/1000000\!` 1000000! = 8263931688331240062 ... 00000000000000000000000000000 Just over a minute, including the I/O. Pretty speedy... I read somewhere that 1,000,000! was first computed in full precision in 1986 on a VAX. I don't remember how many days or weeks the computation ran, and I can't find the book where I read it. -- Bob Miller K<bob> kbobsoft software consulting http://kbobsoft.com [EMAIL PROTECTED] _______________________________________________ EuG-LUG mailing list [EMAIL PROTECTED] http://mailman.efn.org/cgi-bin/listinfo/eug-lug