cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 17 oct. 2004 à 13:43
arf, j'ai dit une bêtise monumentale...
a << 3 = a*8, pas a^8, dsl :p
cs_Kirua
Messages postés3006Date d'inscriptiondimanche 14 avril 2002StatutMembreDernière intervention31 décembre 2008 17 oct. 2004 à 13:19
tu peux aussi un peut améliorer en utilisant les rotations de bits pour les "puissances puissances de 2"
càd que a^2 == a<<1
et que a^4 == a<<2
et que a^8 == a<<3
et que a^16 == a<<4
etc...
si tu fais a ^ 15, ça revient à écrire a^8 * a^4 * a^2 * a
et donc tu nous fais ça:
a = a<<3 * a<<2 * a<<1 * a;
ça demande juste de ... convertir l'exposant en un nombre binaire dans une chaîne de caractères ^^ vois si c'est possible. je viens d'avoir l'idée comme ça, alors c'est bien possible que ce soit une idée pourrie ;)
Pamaury
Messages postés341Date d'inscriptionjeudi 3 avril 2003StatutMembreDernière intervention17 juin 20083 17 oct. 2004 à 09:03
pour les puissance, utilise plutôt une version perso de pow(parce que elle utilise log et tout le tralala car elle gère les exposant non entiers), çà augmenterai un peu la vitesse de tes fonctions :(dans ce cas, pas d'exposants négatifs)
unsigned long pPow(unsigned long a,unsigned long b)
{
unsigned long ret=1;
register long i=0;
if(b<=0)
return 0;
for(;i<b;i++,ret*=a);
return ret;
}
17 oct. 2004 à 13:43
a << 3 = a*8, pas a^8, dsl :p
17 oct. 2004 à 13:19
càd que a^2 == a<<1
et que a^4 == a<<2
et que a^8 == a<<3
et que a^16 == a<<4
etc...
si tu fais a ^ 15, ça revient à écrire a^8 * a^4 * a^2 * a
et donc tu nous fais ça:
a = a<<3 * a<<2 * a<<1 * a;
ça demande juste de ... convertir l'exposant en un nombre binaire dans une chaîne de caractères ^^ vois si c'est possible. je viens d'avoir l'idée comme ça, alors c'est bien possible que ce soit une idée pourrie ;)
17 oct. 2004 à 09:03
unsigned long pPow(unsigned long a,unsigned long b)
{
unsigned long ret=1;
register long i=0;
if(b<=0)
return 0;
for(;i<b;i++,ret*=a);
return ret;
}