Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1400 connectés 

 


 Mot :   Pseudo :  
 
 Page :   1  2  3
Auteur Sujet :

Puissances de 2 et optimisation de poils de nez

n°217485
joce
Architecte / Développeur principal
"BugHunter"
Posté le 19-09-2002 à 22:59:07  profilanswer
 

Reprise du message précédent :
Pour moi ca c'est suffisant :
 

Code :
  1. depart = ((floor (size/16)) * 16) << 4;
  2. if (size & depart)
  3.     result = depart<<1;
  4. else if (size & (depart>>1))
  5.     result = depart;
  6. else if (size & (depart>>2))
  7.     result = depart>>1;
  8. else
  9.     result = depart>>2;


Message édité par joce le 19-09-2002 à 23:14:07

---------------
Protèges carnets personnalisés & accessoires pour bébé
mood
Publicité
Posté le 19-09-2002 à 22:59:07  profilanswer
 

n°217486
exo_
Posté le 19-09-2002 à 23:02:07  profilanswer
 

joce a écrit a écrit :

faut faire :
 
 
depart = (floor (size/16)) * 16;
 
décaler depart de 4 bits vers la gauche, et commencer les tests :D




 
Merci, ça a l'air sympa. Dès que j'aurai assez dormi pour réussir à compiler un chunk avec "floor()", j'essaierai de poster un comparatif des perfs, si jamais quelqu'un est intéressé. Pour le moment, ça ressemble à ça :
 
/tmp/ccCWX7bz.o: In function `main':
/home/sys/tp1/foo.c:5: undefined reference to `floor'
/home/sys/tp1/foo.c:6: undefined reference to `floor'
/home/sys/tp1/foo.c:7: undefined reference to `floor'
/home/sys/tp1/foo.c:8: undefined reference to `floor'

n°217487
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 19-09-2002 à 23:03:47  profilanswer
 

fait un include de math.h


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°217488
exo_
Posté le 19-09-2002 à 23:05:26  profilanswer
 

joce a écrit a écrit :

fait un include de math.h




 
Ah oui presque... Non en fait j'avais oublié -lm comme option de l'éditeur de liens. Je suis pas fier :)

n°217489
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 19-09-2002 à 23:06:20  profilanswer
 
n°217491
exo_
Posté le 19-09-2002 à 23:12:00  profilanswer
 

joce a écrit a écrit :

:D




 
Euh "elseif" c'est un mot clé de quel langage ?  :D

n°217492
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 19-09-2002 à 23:13:26  profilanswer
 

exo_ a écrit a écrit :

 
 
Euh "elseif" c'est un mot clé de quel langage ?  :D  



elsif :kaola:
un melange de tout :D
tient t'es sur que ca existe pas d'ailleurs :D
A programmer en plein de language je sais plus :pt1cable:


Message édité par joce le 19-09-2002 à 23:15:04

---------------
Protèges carnets personnalisés & accessoires pour bébé
n°217494
exo_
Posté le 19-09-2002 à 23:19:52  profilanswer
 

joce a écrit a écrit :

elsif :kaola:
un melange de tout :D
tient t'es sur que ca existe pas d'ailleurs :D
A programmer en plein de language je sais plus :pt1cable:




 
Euh "else if", non ?
 
Sinon bilan des courses, victoire pour moi. La preuve ?
 
[root@localhost tp1]# ./a.out
s=15 exo_=4 joce=0
s=3245 exo_=12 joce=103424
s=115 exo_=7 joce=35328
s=128 exo_=7 joce=512
 
Implementation exo_ :
int expDeux(int x) {
  int k=0;
  int p=1;
  while (p<x) {
    k++;
    p<<=1;
  }
  return k;
}
 
Implementation joce :
int expDeuxBis(int size) {
int result;
int depart;
depart = ((floor (size/16)) * 16);
depart <<= 4;
if (size & depart)
   result = depart<<1;
else if (size & (depart>>1))
   result = depart;
else if (size & (depart>>2))
   result = depart>>1;
else
   result = depart>>2;
return result;
}
 
Edit : J'avais oublié...  :D


Message édité par exo_ le 19-09-2002 à 23:20:39
n°217496
exo_
Posté le 19-09-2002 à 23:24:26  profilanswer
 

:kaola:


Message édité par exo_ le 19-09-2002 à 23:25:49
n°217497
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 19-09-2002 à 23:24:33  profilanswer
 

c'est quoi tes chiffres :??:
sinon j'ai une meilleure idée :D


---------------
Protèges carnets personnalisés & accessoires pour bébé
mood
Publicité
Posté le 19-09-2002 à 23:24:33  profilanswer
 

n°217499
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 19-09-2002 à 23:25:38  profilanswer
 

pour l'avoir tu fais :
 
je verifie :D


Message édité par joce le 19-09-2002 à 23:27:09

---------------
Protèges carnets personnalisés & accessoires pour bébé
n°217501
exo_
Posté le 19-09-2002 à 23:27:44  profilanswer
 

joce a écrit a écrit :

pour l'avoir tu fais :
 
resultat = (((size<<1)-1) | size) + 1;




 
[root@localhost tp1]# ./a.out
s=15 exo_=4 joce=32
s=3245 exo_=12 joce=7678
s=115 exo_=7 joce=3328
s=128 exo_=7 joce=256
 
Y'a de l'idée  :D (Mon algo renvoie le n de 2^n)

n°217504
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 19-09-2002 à 23:30:56  profilanswer
 

nan c'était completement faux mon dernier truc, par contre je capte pas pkoi le premier marche pas :??:
 
c'est koi s, exo et joce, tu peux être plus explicite :pt1cable:


Message édité par joce le 19-09-2002 à 23:31:14

---------------
Protèges carnets personnalisés & accessoires pour bébé
n°217506
exo_
Posté le 19-09-2002 à 23:33:14  profilanswer
 

joce a écrit a écrit :

nan c'était completement faux mon dernier truc, par contre je capte pas pkoi le premier marche pas :??:
 
c'est koi s, exo et joce, tu peux être plus explicite :pt1cable:




 
s = size soit le chiffre que l'algo mange
exo_ = le resultat obtenu avec mon algo (a mettre en exposant de 2)
joce = le resultat obtenu avec ton algo

n°217507
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 19-09-2002 à 23:34:05  profilanswer
 

tient d'ailleurs après  
depart <<= 4;  
faut mettre  
 
if (depart == 0) depart = 1;
 
 :D


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°217510
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 19-09-2002 à 23:36:15  profilanswer
 

ceci dit y manque une étape dans mon algo :o


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°217512
exo_
Posté le 19-09-2002 à 23:37:13  profilanswer
 

joce a écrit a écrit :

tient d'ailleurs après  
depart <<= 4;  
faut mettre  
 
if (depart == 0) depart = 1;
 
 :D




 
Euh... Comment dire  :D  
 
[root@localhost tp1]# ./a.out
s=15 exo_=4 joce=2
s=3245 exo_=12 joce=103424
s=115 exo_=7 joce=35328
s=128 exo_=7 joce=512
 
Avec :
int expDeuxBis(int size) {
int result;
int depart;
depart = floor(size/16);
depart <<= 8;
if (depart == 0) depart = 1;
if (size & depart)
   result = depart<<1;
else if (size & (depart>>1))
   result = depart;
else if (size & (depart>>2))
   result = depart>>1;
else
   result = depart>>2;
return result;
}

n°217515
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 19-09-2002 à 23:41:18  profilanswer
 

heu pardon c'était if (depart == 0) depart = 8; :D


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°217519
exo_
Posté le 19-09-2002 à 23:43:58  profilanswer
 

joce a écrit a écrit :

heu pardon c'était if (depart == 0) depart = 8; :D




 
[root@localhost tp1]# ./a.out
s=15 exo_=4 joce=16
s=3245 exo_=12 joce=103424
s=115 exo_=7 joce=35328
s=128 exo_=7 joce=512
 
 
 :ouch:
 
5/20. L'élève joce doit se ressaisir au second trimestre.


Message édité par exo_ le 19-09-2002 à 23:45:02
n°217520
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 19-09-2002 à 23:44:43  profilanswer
 

exo_ a écrit a écrit :

 
 
[root@localhost tp1]# ./a.out
s=15 exo_=4 joce=16
s=3245 exo_=12 joce=103424
s=115 exo_=7 joce=35328
s=128 exo_=7 joce=512
 
 
 :ouch:  




parfait ca corrige au moins le premier resultat :D


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°217521
exo_
Posté le 19-09-2002 à 23:45:30  profilanswer
 

joce a écrit a écrit :

 
parfait ca corrige au moins le premier resultat :D




 
D'où mon edit.

n°217522
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 19-09-2002 à 23:46:01  profilanswer
 

exo_ a écrit a écrit :

 
 
D'où mon edit.



je sais où est le bug ceci dit :D


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°217524
exo_
Posté le 19-09-2002 à 23:48:04  profilanswer
 

joce a écrit a écrit :

je sais où est le bug ceci dit :D




 
Ah oui ?  :D Moi c'est l'initialisation de départ qui me semble louche. D'ailleurs, floor ne sert à rien, il me semble.


Message édité par exo_ le 19-09-2002 à 23:59:30
n°217526
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 20-09-2002 à 00:01:57  profilanswer
 

exo_ a écrit a écrit :

 
 
Ah oui ?  :D Moi c'est l'initialisation de départ qui me semble louche. D'ailleurs, floor ne sert à rien, il me semble.




oui je dirais même que c'est completement foireux :o


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°217529
exo_
Posté le 20-09-2002 à 00:08:08  profilanswer
 

joce a écrit a écrit :

 
oui je dirais même que c'est completement foireux :o




 
En trifouillant comme un porc (c'est une de mes grandes spécialités), j'obtiens :
 
[root@localhost tp1]# ./a.out
s=7 exo_=3 joce=8
s=15 exo_=4 joce=16
s=16 exo_=4 joce=32
s=17 exo_=5 joce=32
s=33 exo_=6 joce=64
s=63 exo_=6 joce=64
s=65 exo_=7 joce=128
s=115 exo_=7 joce=138
s=3245 exo_=12 joce=404
s=128 exo_=7 joce=2
 
Conclusion générale sur l'optimisation (proverbe écossais) : He that seeks trouble, It where a pity he should miss it. Sur ce, merci pour tout et bonne nuit.


Message édité par exo_ le 20-09-2002 à 00:13:28
n°217530
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 20-09-2002 à 00:10:29  profilanswer
 

Voui c nawak :D
plus t'augmenteras les chiffres et plus ca sera nawak :D


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°217532
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 20-09-2002 à 00:13:48  profilanswer
 

par contre j'aurais bien une solution.
y a moins de convertir le chiffre en hexa, et de compter le nombre de chiffre de la representation en hexa ? :D


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°217533
exo_
Posté le 20-09-2002 à 00:16:02  profilanswer
 

joce a écrit a écrit :

Voui c nawak :D
plus t'augmenteras les chiffres et plus ca sera nawak :D




 
J'ai vu. C'est très :pt1cable:. Bon dodo moi. Thanx a lot.

n°217535
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 20-09-2002 à 00:16:33  profilanswer
 

exo_ a écrit a écrit :

 
 
J'ai vu. C'est très :pt1cable:. Bon dodo moi. Thanx a lot.



de rien, les bugs sont offerts :D


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°217537
exo_
Posté le 20-09-2002 à 00:16:57  profilanswer
 

joce a écrit a écrit :

par contre j'aurais bien une solution.
y a moins de convertir le chiffre en hexa, et de compter le nombre de chiffre de la representation en hexa ? :D




 
Avec une boucle ?  :lol:  :sleep:

n°217538
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 20-09-2002 à 00:17:49  profilanswer
 

exo_ a écrit a écrit :

 
 
Avec une boucle ?  :lol:  :sleep:  



:lol:
ouais mais vu que c'est en Hexa c'est plus court :D


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°217542
kaa
Posté le 20-09-2002 à 00:57:31  profilanswer
 

Bonsoir,
 
Si tu veux que ca aille vite, tu ne te laisserais pas tenter par un petit calcul par table ?
 
int expDeux(unsigned int x) { -- int sur 4 octets (b1b2b3b4)
 -- Tu as la table precalculee pour les valeurs 0 .. 255
 static int p[256] = { 0, 1, 2, 2, 3, ... };
 register unsigned char * index =(&x) +3;
 int result;
 
 if (*index ==0) { // raipde a l'exec, tu es sur b4
  index --;
  if (*index ==0) { // b3
   index --;
   if (*index ==0) { // b2
    index --;
    if (*index ==0) { // b1
     return 0;
    }
   }
  }
 }
 // index pointe sur l'octet !=0
 result =p[*index];
 return result +((index -&x) *8);
}
 
Pas teste, bien sur, et il doit y avoir des petits ajustements a faire, mais uniquement des ==0 sur reg, le proc. devrait adorer.
Bon c'est l'idee quoi.
exple d'ajustements :
 
   if (*index ==0) { // b2
    result = 8;
    if (*(--index) ==0)
   :
 return result +p[*index];
 
hth


Message édité par kaa le 20-09-2002 à 08:49:55
n°217891
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 20-09-2002 à 19:14:21  profilanswer
 

exo_ a écrit a écrit :

 
 
Euh... Comment dire  :D  
 
[root@localhost tp1]# ./a.out
s=15 exo_=4 joce=2
s=3245 exo_=12 joce=103424
s=115 exo_=7 joce=35328
s=128 exo_=7 joce=512
 
Avec :
int expDeuxBis(int size) {
int result;
int depart;
depart = floor(size/16);
depart <<= 8;
if (depart == 0) depart = 1;
if (size & depart)
   result = depart<<1;
else if (size & (depart>>1))
   result = depart;
else if (size & (depart>>2))
   result = depart>>1;
else
   result = depart>>2;
return result;
}
 




 
Tient essaie voir :
 

Code :
  1. int expDeux(int x) {
  2. int result=0;
  3. int k=0;
  4. while (x>15) {
  5.    x>>=4;
  6.    k++;
  7. }
  8. if (x & 8)
  9.    result = 8<<(k*4);
  10. else if (x & 4)
  11.    result = 4<<(k*4);
  12. else if (x & 2)
  13.    result = 2<<(k*4);
  14. else
  15.    result = 1<<(k*4);
  16. return result;
  17. }


 
ou si tu veux les même resultats que toi :
 

Code :
  1. int expDeux(int x) {
  2. int result=0;
  3. int k=0;
  4. while (x>15) {
  5.    x>>=4;
  6.    k+=4;
  7. }
  8. if (x & 8)
  9.    result = k+4;
  10. else if (x & 4)
  11.    result = k+3;
  12. else if (x & 2)
  13.    result = k+2;
  14. else
  15.    result = k+1;
  16. return result;
  17. }


Message édité par joce le 20-09-2002 à 19:45:43

---------------
Protèges carnets personnalisés & accessoires pour bébé
n°217899
HappyHarry
Posté le 20-09-2002 à 19:24:53  profilanswer
 

joce a écrit a écrit :

 
 
Tient essaie voir :
 

Code :
  1. int expDeux(int x) {
  2. int result=0;
  3. int k=0;
  4. while (x<15) {
  5.    x>>=4;
  6.    k++;
  7. }
  8. if (x & 8)
  9.    result = 8<<(k*4+1);
  10. else if (x & 4)
  11.    result = 4<<(k*4+1);
  12. else if (x & 2)
  13.    result = 2<<(k*4+1);
  14. else
  15.    result = 1<<(k*4+1);
  16. return result;
  17. }


 
ou si tu veux les même resultats que toi :
 

Code :
  1. int expDeux(int x) {
  2. int result=0;
  3. int k=0;
  4. while (x<15) {
  5.    x>>=4;
  6.    k++;
  7. }
  8. if (x & 8)
  9.    result = k*4+5;
  10. else if (x & 4)
  11.    result = k*4+4;
  12. else if (x & 2)
  13.    result = k*4+3;
  14. else
  15.    result = k*4+2;
  16. return result;
  17. }






 
oué ben a ce moment la, ma solution marchait aussi hein...  :sarcastic:

n°217906
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 20-09-2002 à 19:33:13  profilanswer
 

HappyHarry a écrit a écrit :

 
 
oué ben a ce moment la, ma solution marchait aussi hein...  :sarcastic:  



mais moi je marche par bloc de 4 :kaola:


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°217908
HappyHarry
Posté le 20-09-2002 à 19:34:20  profilanswer
 

joce a écrit a écrit :

mais moi je marche par bloc de 4 :kaola:




 
que ca marche, ca reste a voir  :p

n°217915
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 20-09-2002 à 19:45:55  profilanswer
 

HappyHarry a écrit a écrit :

 
 
que ca marche, ca reste a voir  :p  



mais si ca marche :kaola:


---------------
Protèges carnets personnalisés & accessoires pour bébé
n°218045
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 21-09-2002 à 03:16:17  profilanswer
 

up ?


Message édité par joce le 21-09-2002 à 03:16:23

---------------
Protèges carnets personnalisés & accessoires pour bébé
n°218046
zion
Plop
Posté le 21-09-2002 à 03:34:09  profilanswer
 

Matafan a écrit a écrit :

Certes, mais comment fait-il pour générer son masque puisqu'il ne sait pas a priori où est le bit le plus à gauche ? En fait il me semble qu'il existe une instruction x86 pour le savoir, mais ça ne sera pas portable... Sinon il faut le chercher, ce qui n'est pas plus rapide que la fonction qu'il a déja écrite.




 
J'en suis quasi sur aussi pour cette instruction... sinon, il suffit  de faire qqs shl et de verifier le carry bit (si je me rapelle bien).  :sweat:

n°218194
kanar
Posté le 21-09-2002 à 17:01:46  profilanswer
 

pffff....
J'y comprends rien à votre cpp de noix de castagnette
gna...gna...gna gna...math.h...gna...gna...gna
 :kaola:  <<VB.NET>>


---------------
C'est pas au vieux singe qu'on apprend à faire du vinaigre
n°218565
joce
Architecte / Développeur principal
&#034;BugHunter&#034;
Posté le 22-09-2002 à 20:24:40  profilanswer
 
mood
Publicité
Posté le   profilanswer
 

 Page :   1  2  3

Aller à :
Ajouter une réponse
 

Sujets relatifs
[PHP] - [MySQL] - Optimisation de SELECT COUNT(*)[Oracle] Optimisation des paramètres Oracle, update de masse
Mon applet est une usine a gaz [optimisation et solution inside]Optimisation d'une requête. Laquelle choisiriez-vous ?
MySql - Optimisation - Champ indexé AND Champ pas indexé[PHP] Optimisation pour un template
[forum] création / optimisation[php] optimisation?
Au fait, au sujet du pb d'optimisation d'un programme de gravure de CD[Optimisation Mysql] Qui peut m'aider ?
Plus de sujets relatifs à : Puissances de 2 et optimisation de poils de nez


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR