Probleme en C avec les puissances

Résolu
omaflak Messages postés 26 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
En C il y a GMP (pour les systèmes Unix)
0
jisisv Messages postés 3645 Date d'inscription   Statut Modérateur Dernière intervention   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 26 Date d'inscription   Statut Membre Dernière intervention   1
 
Et ya pas un moyen d'avoir le nombre en entier ?
0
omaflak Messages postés 26 Date d'inscription   Statut Membre Dernière intervention   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 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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 26 Date d'inscription   Statut Membre Dernière intervention   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 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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