Accueil > Forum > > > > VITESSE ALGO, CONCOURS POUR TOUS
VITESSE ALGO, CONCOURS POUR TOUS
lundi 28 février 2005 à 19:22:47 |
VITESSE ALGO, CONCOURS POUR TOUS

BruNews
|
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. ciao... BruNews, MVP VC++
|
|
lundi 28 février 2005 à 20:47:35 |
Re : VITESSE ALGO, CONCOURS POUR TOUS

Matt67
|
Bonsoir,
J'essaie :
unsigned Puiss2SupEgal_C(unsigned d)
{
unsigned Depart = 0x80000000;
// Difficile de faire mieux
if(!d) return 0;
// Ca tombe pile poil
if((d & d-1) == 0)
return d;
// Trop grand
if(d > Depart)
return 0xFFFFFF;
while((Depart & d) == 0)
Depart >>= 1;
Depart <<= 1;
return Depart;
}
Matt...
|
|
lundi 28 février 2005 à 21:05:47 |
Re : VITESSE ALGO, CONCOURS POUR TOUS

BruNews
|
Merci je teste, résultats sous peu.
ciao... BruNews, MVP VC++
|
|
lundi 28 février 2005 à 21:15:44 |
Re : VITESSE ALGO, CONCOURS POUR TOUS

BruNews
|
598283328 ticks la mienne 599283328 la tienne on peut dire équivalent, je n'ai pas vérifié les résultats de la fonction.
ciao... BruNews, MVP VC++
|
|
lundi 28 février 2005 à 21:23:14 |
Re : VITESSE ALGO, CONCOURS POUR TOUS

Matt67
|
Bonsoir,
(Bien essayé Matt)
Ok, je vais voir si on peut faire mieux,
Matt...
|
|
lundi 28 février 2005 à 21:33:30 |
Re : VITESSE ALGO, CONCOURS POUR TOUS

Matt67
|
Une petite modif dans la boucle while (je ne pense pas que ca change grand chose mais bon)
unsigned Puiss2SupEgal_C(unsigned d)
{
unsigned Depart = 0x80000000;
// Difficile de faire mieux
if(!d) return 0;
// Ca tombe pile poil
if(!(d & d-1))
return d;
// Trop grand
if(d > Depart)
return 0xFFFFFF;
while(((Depart >>= 1) & d) == 0);
Depart <<= 1;
return Depart;
}
Matt...
|
|
lundi 28 février 2005 à 21:38:28 |
Re : VITESSE ALGO, CONCOURS POUR TOUS

BruNews
|
identique.
Le souk c'est qu'on a pas d'opérateur de scann bits en C, on est obligé de boucler.
ciao... BruNews, MVP VC++
|
|
lundi 28 février 2005 à 21:46:59 |
Re : VITESSE ALGO, CONCOURS POUR TOUS

Matt67
|
Je ne vois pas trop comment faire autrement.
Si quelqu'un trouve un autre algo !!!
Bonne soirée, Matt...
|
|
lundi 28 février 2005 à 22:07:46 |
Re : VITESSE ALGO, CONCOURS POUR TOUS

steve_clamage
|
une version avec une lookup table:
unsigned Puiss2SupEgal_C( unsigned u )
{
static const unsigned mask [] =
{
0x00000000,
0x00000001,
0x00000002,
0x00000004,
0x00000008,
0x00000010,
0x00000020,
0x00000040,
0x00000080,
0x00000100,
0x00000200,
0x00000400,
0x00000800,
0x00001000,
0x00002000,
0x00004000,
0x00008000,
0x00010000,
0x00020000,
0x00040000,
0x00080000,
0x00100000,
0x00200000,
0x00400000,
0x00800000,
0x01000000,
0x02000000,
0x04000000,
0x08000000,
0x10000000,
0x20000000,
0x40000000,
0x80000000,
0xffffffff
};
const int *p = mask;
while( *p < u)
p++;
return *p;
}
|
|
lundi 28 février 2005 à 22:10:03 |
Re : VITESSE ALGO, CONCOURS POUR TOUS

Hylvenir
|
salut,
1 doit renvoyer 2 ou 1 ? vaut deux fonctions ne sont pas d'accord.
bizarre sur les perfs, je trouve quasiment deux fois plus rapide pour la fonction de Matt ?
Je vais essayer avec cl pour voir.
Ma participation à la saturation du net: http://hylvenir.free.fr
|
|
Cette discussion est classée dans : algo, dword, vitesse, param, 0x80000000
Répondre à ce message
Sujets en rapport avec ce message
ScannerIP() [ par JCpp ]
Il y a-t-il un moyen d'ouvrir 100 Theard sans écrire :DWORD WINAPI ScaneIP1(LPVOID param){..}DWORD WINAPI ScaneIP2(LPVOID param){..}.
Problème de compilation d'une Dll [ par DrUn ]
Bonjour, J'ai une Dll qui a été compilée par visual c++ il y a quelques temps. Cette Dll fait du WinHTTP. Elle n'a pas été modifiée et mon SDK non plu
Prob de thread [ par sebastienbro ]
Bonjour, j'ai un problème avec des thread, je n'arrive pas a en créer un :(Voici mon code : HANDLE hThread1;DWORD dwThreadId1;DWORD WINAPI T
Algo de redimensionnement d'images [ par stageSAP ]
Bonjour, Je recherche un algorithme pour redimensionner une image à partir de la matrice image ou une librairie borland c++ qui fait cela. Merci
Algo trop lent :( [ par MoDDiB ]
Bon tout d'abord je tient à préciser qu'il s'agit du concours prologin auquel je compte participer donc si certaines personnes ne veulent pas m'aider
Vitesse Telechargement [ par BzsReg ]
Voila je fait un prog qui doit telecharger un fichier en http, mais je voudrait fixer la vitesse maxi du telechargement quelqu'un a une idee sur comme
RegOpenKeyEx [ par guitoulefoux ]
Bonjour,Pourriez vous m'aider a corriger mon erreur.Voici mon bout de code :TCHAR MenDema[1024];[...]HKEY hKey;RegOpenKeyEx(HKEY_LOCAL_MACHINE,"SOFTWA
transformer un jour du mois en DWORD [ par myocean ]
Dans le cas de la structure AT_INFOla variable DaysOfMonth est au format DWORD et elle recoit comme paramêtre des bit où le bit 0 est le 1er du mois
boite de dialogue C [ par benhamid ]
Bonjour, J'ai du mal à faire des boites de dialogue en C.Quelqu'un peut il m'aider svp.Mon problème est le suivant:Je voudrais qu'en executant le pg ç
GetFileVersionInfoSize, probleme de link [ par gege1024 ]
en utilisant : GetFileVersionInfoSizej'ai un probleme de lien, et je ne sais pas d'ou ca vient (# include ???) DWORD info; DWORD toto; info =
Livres en rapport
|
Derniers Blogs
POUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDNPOUR RAPPEL ! LES SPéCIFICATIONS DES PROTOCOLES OFFICE ET SHAREPOINT SONT DISPONIBLES SUR MSDN par neodante
Quelle est le point commun entre : Microsoft il y a 10 ans et Apple aujourd'hui ? Réponse: avoir une politique de protocoles propriétaires et fermés :) Car pour rappel (si si je vous assure c'est important de le rappeler), la majorité des spécifications e...
Cliquez pour lire la suite de l'article par neodante JOYEUX ANNIVERSAIRE NIXJOYEUX ANNIVERSAIRE NIX par ebartsoft
Souhaitons un bon et joyeux anniversaire à notre hôte à tous, Nix.
Je ne le répéterais jamais assez mais sans lui rien ne serait possible. Il défit en permanence les lois de la gravité et comme il le dit si bien, si tu lui fais confiance ça devra...
Cliquez pour lire la suite de l'article par ebartsoft IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|