Otto Moerbeek <o...@drijf.net> writes: > On Sun, Nov 03, 2024 at 08:13:20AM +0100, Otto Moerbeek wrote: > >> On Sun, Nov 03, 2024 at 09:38:47AM +0700, hahahahacker2009 wrote: >> >> > Hello, >> > OpenBSD bc(1) is unable to calculate very big number, >> > for example, (1024*1024)^(1024*1024) run for an hour and still cannot >> > give me the result. >> > It just use about 11M of memory and 100% CPU. >> > Gavin Howard's bc port do it in 2 minutes >> > GNU bc on Linux do it in 5 minutes. >> >> bc uses dc which does a simple exponentation computation, which is >> basically doing repeated multiplications. I'm sure there are smarter >> methods, it's not just implemented that way. > > Oh, I looked and I did it a bit smarter when I wrote that code 20 > years back, but still, I think it can be improved. >
The problem seems more on numnber printing than on number exponentation. $ /usr/bin/time -lp dc -e '1024 1024 * 1024 1024 * ^' real 46.39 user 45.66 sys 0.00 15244 maximum resident set size 0 average shared memory size 0 average unshared data size 0 average unshared stack size 3509 minor page faults 1 major page faults 0 swaps 0 block input operations 0 block output operations 0 messages sent 0 messages received 0 signals received 0 voluntary context switches 3334 involuntary context switches The exponentation took ~50 seconds (dc(1) doesn't print the number on the stack by default). -- Sebastien Marie