Probleme en C avec les puissances

Résolu
omaflak Messages postés 38 Statut Membre -  
fiddy Messages postés 11653 Statut Contributeur -
Bonjour, je code en C depuis peu et j'ai un petit probleme avec les puissance.
Lorsque je demande grand nombre le programme me donne n'importe quoi comme reponse .
Exemple :

pow(5,100)

il me donne une mauvaise reponse. (2147483647)


Merci d'avance

6 réponses

Utilisateur anonyme
 
Bonjour

C'est parce que le résultat est beaucoup trop grand... Tu dois demander le résultat dans un int de 32 bits, ça ne tient pas. Alors il te met à la place le plus grand int qu'il connaît : 2^31-1 = 2147483647
1
KX Messages postés 19031 Statut Modérateur 3 020
 
En utilisant des nombres flottants tu auras une approximation du genre 7.888609E+69
double x = pow(5.0, 100.0);
Mais si tu veux avoir un calcul exact, il faut se tourner vers des bibliothèques spécialisées de calculs à grands entiers.

Remarque, si c'est juste le résultat qui t'intéresse le voici :
7888609052210118054117285652827862296732064351090230047702789306640625
1
Utilisateur anonyme
 
C'est un nombre à 69 chiffres, tu les veux vraiment tous ?
Déjà, si tu te contentes du résultat en flottant, tu as une bonne idée du nombre.
Sinon, il existe des bibliothèques spécialisées pour les calculs avec un nombre arbitraire de chiffes. Je ne connais pas celles du C mais ça ne doit pas être bien difficile à trouver.
1
KX Messages postés 19031 Statut Modérateur 3 020
 
En C il y a GMP (pour les systèmes Unix)
0
jisisv Messages postés 3678 Statut Modérateur 934
 
Tu ne précises pas si tu travaille en arithmétique entière ou flottante, ni ton OS, ni ton compilateur.
Pour une bibliothèque entière de précision , regarde par exemple
The GNU Multiple Precision Arithmetic Library
Pour les flottants:
The GNU MPFR Library
1

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

Posez votre question
omaflak Messages postés 38 Statut Membre 1
 
Et ya pas un moyen d'avoir le nombre en entier ?
0
omaflak Messages postés 38 Statut Membre 1
 
Ok Merci a tous, mais oui j'aimerai avoir le resultat exacte et pas que pour ce nombre. Enfet il y a un site qui s'appelle ProjectEuler.net, qui propose des probleme compliquer qui necessite un ordinateur pour les resoudre.
Et dans un des probleme j'ai besoin de faire des grand calcul comme
pow(60, 100) :)
Enfin voila le delire quoi ;)
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Si c'est pour faire ce genre de calcul, pourquoi utiliser le C comme langage ? Il y a des langages bien plus simples comme le python.
60**100 et hop tu as le résultat de 60 puissance 100 avec tous les chiffres ;-))). Bien plus simple.
0
omaflak Messages postés 38 Statut Membre 1
 
Mais si je fait ca c'est pour m'entrainer a faire des algorithme en C
Parce que sinon je pourrai faire ca meme en Basic !
0
fiddy Messages postés 11653 Statut Contributeur 1 847
 
Ok. Beh dans ce cas, soit tu utilises une bibliothèque pour gérer les grands nombres. Soit tu l'implémentes toi-même, c'est un bon exercice pour s'entraîner :-).
0