Probleme en C avec les puissances

Résolu/Fermé
omaflak Messages postés 26 Date d'inscription jeudi 28 juin 2012 Statut Membre Dernière intervention 4 mars 2013 - 6 juil. 2012 à 16:03
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 - 7 juil. 2012 à 16:16
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
6 juil. 2012 à 16:09
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 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 018
6 juil. 2012 à 16:55
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
6 juil. 2012 à 16:56
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 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 018
6 juil. 2012 à 16:58
En C il y a GMP (pour les systèmes Unix)
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
6 juil. 2012 à 17:14
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 jeudi 28 juin 2012 Statut Membre Dernière intervention 4 mars 2013 1
6 juil. 2012 à 16:47
Et ya pas un moyen d'avoir le nombre en entier ?
0
omaflak Messages postés 26 Date d'inscription jeudi 28 juin 2012 Statut Membre Dernière intervention 4 mars 2013 1
Modifié par omaflak le 6/07/2012 à 17:16
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
6 juil. 2012 à 17:41
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 jeudi 28 juin 2012 Statut Membre Dernière intervention 4 mars 2013 1
Modifié par omaflak le 6/07/2012 à 19:45
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 840
7 juil. 2012 à 16:16
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