Probleme avec la fonction pow()

jeani763 Messages postés 8 Date d'inscription jeudi 17 avril 2003 Statut Membre Dernière intervention 22 janvier 2004 - 19 janv. 2004 à 10:43
jeani763 Messages postés 8 Date d'inscription jeudi 17 avril 2003 Statut Membre Dernière intervention 22 janvier 2004 - 22 janv. 2004 à 20:30
j'ai un probleme avec la fonction pow
voila mon code

long int lettre1=pow(110,5);


vous puriez me dire ce qui ne va pas please

10 réponses

cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
19 janv. 2004 à 10:53
Je pense que ca doit être ta valeur de retour : ce n'est pas un long int qui est retourné mais un double, donc exemple tiré de la MSDN :

#include <math.h>
#include <stdio.h>

void main( void )
{   double x 2.0, y 3.0, z;

   z = pow( x, y );
   printf( "%.1f to the power of %.1f is %.1f\\n", x, y, z );
}



DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
jeani763 Messages postés 8 Date d'inscription jeudi 17 avril 2003 Statut Membre Dernière intervention 22 janvier 2004
19 janv. 2004 à 10:59
oui mais le probleme c'est que apres je doit faire le modulo du nombre la est que pour le modulo ca doit forcement etre un int.
a la limite y faudrait convertir le double en int mais je c pas comment on peux faire
cs_DARKSIDIOUS Messages postés 15814 Date d'inscription jeudi 8 août 2002 Statut Membre Dernière intervention 4 mars 2013 131
19 janv. 2004 à 11:30
Fais un cast pour obtenir un int :

double dNombre1;
int iNombre1;

dNombre1 = pow; //etc.
iNombre1 = (int) dNombre1;


DarK Sidious

[Responsable de la rubrique API et responsable VB du site www.ProgOtoP.com]
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
19 janv. 2004 à 11:40
int lettre1 = pow(110,5);
ne doit pas déclencher une erreur mais juste un warning, ce n'est pas grave

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
19 janv. 2004 à 13:31
le problème c'est que 100^5=16.105.100.000

et ça tient pas sur les 32 bits d'un long.
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
19 janv. 2004 à 13:31
il fallait lire 110^5 evidemment.
vecchio56 Messages postés 6535 Date d'inscription lundi 16 décembre 2002 Statut Membre Dernière intervention 22 août 2010 14
19 janv. 2004 à 14:34
évidemment ca on ne peut rien y faire
jeani763 Messages postés 8 Date d'inscription jeudi 17 avril 2003 Statut Membre Dernière intervention 22 janvier 2004
22 janv. 2004 à 14:05
g essayé de faire votre truc mais ca marche quand meme pas.

//cryptage

#include 
#include <math.h>

using namespace std;

int main(){
//n=221
//p=13
//q=17
//e=5
int e=5;
//non = 110 111 110
double fe=110;
double dNombre1;
dNombre1 = pow (fe,e);
int df=(int) dNombre1;
cout<<df<<endl;
int sdsd=df%221;
cout<<sdsd;
return 0;
}
ymca2003 Messages postés 2070 Date d'inscription mardi 22 avril 2003 Statut Membre Dernière intervention 3 juillet 2006 7
22 janv. 2004 à 14:25
ce que tu cherche à faire c'est une exponentielle modulaire (comme dans le RSA ?)

comme je l'ai marqué plus haut, tu ne peut pas calculer 110 à la puissance 5 avec des int.

pour calculer (fe^e)%n, il faut utiliser la méthode d'Euler.
Regarde mes sources à générateur de grand nombre premier, tu trouvera une classe CBigInt (gestion de nombre sur un nombre de bits > 512) et la fonction expmod :

int expMod(int a, int b, int n)
{
int m = a;
int e = b;
int x = 1;
while(e != 0)
{
while(e % 2 == 0)
{
e >>= 1;
m = (m * m) % n;
}
e--;
x = (x * m) % n;
}
return x;
}
jeani763 Messages postés 8 Date d'inscription jeudi 17 avril 2003 Statut Membre Dernière intervention 22 janvier 2004
22 janv. 2004 à 20:30
si ce que j'essaye defaire c jusement RSA
Rejoignez-nous