Probleme en C avec les puissances

Résolu
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

  1. 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
    1. Modérateur
      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
      1. 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
        1. Modérateur
          En C il y a GMP (pour les systèmes Unix)
          0
      2. Et ya pas un moyen d'avoir le nombre en entier ?
        0
        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
          1. Contributeur
            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
          2. 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
          3. Contributeur
            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