Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Michael S Newsgroups: comp.lang.c++ Subject: Re: constexpr is really very smart! Date: Mon, 23 Dec 2024 17:47:08 +0200 Organization: A noiseless patient Spider Lines: 59 Message-ID: <20241223174708.000062b3@yahoo.com> References: <20241216112808.00003f74@yahoo.com> <86jzbyghdw.fsf@linuxsc.com> <20241218013342.0000518a@yahoo.com> <20241218135131.00000006@yahoo.com> <86zfksf4lb.fsf@linuxsc.com> <20241220021703.00003e9e@yahoo.com> <86msgqezb8.fsf@linuxsc.com> <20241222000708.000007ef@yahoo.com> <86a5cnfubs.fsf@linuxsc.com> MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Injection-Date: Mon, 23 Dec 2024 16:47:27 +0100 (CET) Injection-Info: dont-email.me; posting-host="d671c883c82cc5192b50168e923ee646"; logging-data="1194624"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/sdkyZjj0ZQ1WNafRWNvLrEY1bg6JGtgE=" Cancel-Lock: sha1:lDnkcmAwmgFpE3tFuGBpW4SguAQ= X-Newsreader: Claws Mail 3.19.1 (GTK+ 2.24.33; x86_64-w64-mingw32) Bytes: 2769 On Sun, 22 Dec 2024 10:25:59 -0800 Tim Rentsch wrote: > Michael S writes: > > > On Fri, 20 Dec 2024 14:59:07 -0800 > > Tim Rentsch wrote: > > > >> I ran a python version to compute fibonacci( 10000000 ). This code > >> ran 30% faster than the previous version, which I would be is > >> almost entirely due to the expression factoring with 'c'. Great! > > > > This one does fib(10M) in 89 msec on my very old home PC. > > > > [code] > > You are the speed king! But approximately the same code in python is MUCH slower. 2.9 sec on 11 y.o. PC that still serves me as a desktop at work. 2.0 sec on 5.5 y.o. mall server. I don't really understand why. I expected that nearly all time is spend in multiplication of few huge numbers, probably over 75% of time in last couple of steps (6 multiplications). And I was under impression that internally Python uses the same GMP library that I used in C. So I expected the same speed, more or less. May be, 1.5x slowdown because of less efficient memory handling in Python. 35x difference is a big surprise. Here is my python routine. def fib(n): if n < 1: return 0 tmp = n msb = 1 while tmp > 1: msb += msb tmp //= 2 f0=0; f1=1; while msb > 1: ff0 = f0*f0 + f1*f1 f1 = (f0+f0+f1)*f1 f0 = ff0 msb //= 2 if msb & n: f0 = f1 f1 += ff0 return f1