BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019
-
28 févr. 2005 à 19:22
CriPpLe
Messages postés78Date d'inscriptionlundi 26 juillet 2004StatutMembreDernière intervention26 avril 2005
-
7 mars 2005 à 00:52
DWORD __fastcall Puiss2SupEgal_C(DWORD d)
{
DWORD r, n;
if(!d) return 0;
if(d & 1) d++;
r = 0x80000000;
n = d;
if(d & 0x80000000) goto verifInf;
do {
r >>= 1;
d <<= 1;
} while(!(d & 0x80000000));
verifInf:
if(r < n) r <<= 1;
if(!r) r = 0xFFFFFFFF;
return r;
}
Cette fonction retourne la plus proche puissance de 2 >= au param.
Si param == 0 doit retourner 0.
Si param > (2 puiss 31) doit retourner 0xFFFFFFFF;
Voila, je suis ouvert à toute proposition plus rapide, prog de test est fait.
Pas de table précalculée ni série de 32 'if' ou chose de ce genre pour cause de taille de code.
J'ai deja fait version ASM (dispo sur demande), est 6 fois + rapide que celle ci mais je voudrais savoir si vous avez des idées d'amélioration en C.
Toutes les propositions seront mesurées.
A vos claviers et merci de votre participation.
BruNews
Messages postés21040Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 2 mars 2005 à 18:04
JCDjcd > voudrait-tu jeter un oeil ici
http://www.cppfrance.com/code.aspx?ID=29847 paraitrait que ta version ne donne pas les résultats en conformité avec le cahier des charges.
Je précise que je n'ai pas eu du tout le temps de vérifier.