021
09.07.2004, 21:49 Uhr
NemoEimi
|
Guguck,
eben habe ich nochmal einen anderen Ansatz probiert :
C++: |
unsigned ceil_rec(unsigned n, unsigned low, unsigned high, unsigned test) { unsigned k = n >> test; if (k==1) { unsigned tp = 1 << test; if (tp == n) return(test); else return(test+1); } if (k) return(ceil_rec(n, test, high, (test+high) >> 1)); else return(ceil_rec(n, low, test, (test+low) >> 1));}
unsigned ceil_ld2(unsigned n) { return(ceil_rec(n, 0, 32, 16)); }
|
Meine main zum benchen sieht nun so aus:
C++: |
int main() { unsigned i; unsigned chksum = 0; for(i = 1; i < 100000000L; ++i) chksum+=ceil_ld2(i); cout << "Fertig. Summe: " << chksum << endl; return 0; }
|
Compiliert habe ich alles mit
C++: |
g++ -O3 dateiname.cpp
|
Hier sind meine Ergebnisse:
beefys Lösung/meine erste Lösung ungefähr gleichauf:
Zitat: |
Fertig. Summe: 2565782246
real 0m46.415s user 0m43.851s sys 0m0.016s
|
Meine zweite Lösung :
Zitat: |
Fertig. Summe: 2565782246
real 0m5.233s user 0m4.990s sys 0m0.002s
|
Grüße, Nemo |