Re: constexpr is really very smart!

Liste des GroupesRevenir à cl c  
Sujet : Re: constexpr is really very smart!
De : tr.17687 (at) *nospam* z991.linuxsc.com (Tim Rentsch)
Groupes : comp.lang.c++
Date : 18. Dec 2024, 18:45:38
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <867c7whol9.fsf@linuxsc.com>
References : 1 2 3 4
User-Agent : Gnus/5.11 (Gnus v5.11) Emacs/22.4 (gnu/linux)
Michael S <already5chosen@yahoo.com> writes:

On Tue, 17 Dec 2024 12:54:19 -0800
Tim Rentsch <tr.17687@z991.linuxsc.com> wrote:
>
Michael S <already5chosen@yahoo.com> writes:
>
[...]
#include <stdio.h>
#include <stdlib.h>
#include <intrin.h>
>
static long long fib(long n)
{
  if (fib <= 0)
    return 0;
  long long f0 = 0, f1 = 1;
  for (long i = 1; i < n; ++i) {
    long long f2 = f0 + f1;
    f0 = f1;
    f1 = f2;
  }
  return f1;
}
>
Here is my second fastest fibonacci calculation code (for
relatively small inputs):
>
    typedef long unsigned long ULL;
>
    ULL
    fibonacci( unsigned n ){
        ULL  b = n&1,  a = b^1;
>
        if(  n & 2  )  a += b,  b += a;
        if(  n & 4  )  a += b,  b += a,  a += b,  b += a;
        if(  n & 8  ){
            ULL na = 13*a+21*b, nb = 21*a+34*b;
            a = na,  b = nb;
        }
>
        n >>= 4;
        while(  n--  ){
            ULL  na = 610*a + 987*b,  nb = 987*a + 1597*b;
            a = na,  b = nb;
        }
>
        return  b;
    }
>
From BigO perspective this code looks like it's still O(n) so no
better than simple loop.

It is O(n) but it has a smaller constant.

According to my measurement gear, in range 0 to 92 there are few
points where it is faster than simple loop, but in majority of
cases it is slower.

I'm at a loss to understand how this could happen.  In my own
measurements, the code shown above runs faster than a simple loop in
all cases above n > 12, more than twice as fast when n > 17, more
than three times as fast when n > 42, and going up from there.  What
might account for these radically different results?

Date Sujet#  Auteur
7 Jan 25 o 

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal