Langage C - Débutant - Pow

Bonjour,

Je tiens tous d'abord avant de commencer, à vous préciser que je débute depuis seulement quelques semaine dans le domaine de programmation, plus particulierement dans le C (:
Voilà, je suis en train de comprendre et retenir de nouvelles fonctions, DE BASE, mais il y en a une qui me gène un peu..

C'est pow, pour calculer le carré d'un nombre, voilà mon programme:

double resultat;
int nombre3;
resultat=0;
nombre3=4;
resultat=pow(nombre3, 3);

printf("%d\n\n", resultat);

En compilant je ne trouve pas le résultat de 4 puissance 3 mais 0. Code::Blocks (oui car je carbure grâce à cet IDE) ne m'indique aucune erreur.
J'en conclu, que ce doit être une erreur de débutant :p

Vos avis, conseil, solutions ?

Merci (:

5 réponses

  1. Contributeur
    Salut.
    Je ne voyais pas l'erreur jusqu'à ce que je commence à écrire ton programme chez moi.
    je pense que résultat vaut bien 64, mais le problème viens de l'affichage avec printf, %d attend un entier et non un double. Utilise %e pour les doubles.
    La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
    Char Snipeur
    1. Bonjour Raphael74,

      Il se trouve que la fonction Pow travaille avec des double car sur les int, il y a souvent des problèmes de conversion.
      Déclare tes variables en double, et dis-moi si tu as toujours le même problème.
      1. Contributeur
        Je n'ai jamais remarqué de problème de conversion en C.
    2. Modérateur
      Le premier argument se pow doit être un flottant (float, double ou long double), or toi tu utilises nombre3 comme un int, Code::Blocks aurait pu t'indiquer une erreur pour ça !
      error C2668: 'pow' : appel ambigu à une fonction surchargée
      Mais ta véritable erreur vient du printf, resultat est un double tu dois donc mettre %f

      double resultat;
      int nombre3=4;
      resultat=pow((double)nombre3,3); 
      
      printf("%f\n\n", resultat);
      1. Contributeur
        petite remarque, ici nous parlons de C pas de C++. En C il n'y a pas de surcharge, les noms ne sont pas décoré, cf. man pow.
      2. Modérateur
        oups... Visual Studio me perdra ^^
    3. Déjà, merci pour vos réponses (:

      Le problème venait bien du printf avec le %d, que j'ai changé en %e, en compilant j'ai presque 64 :P -> 6.400000 + 001

      Si j'ai bien compris le nombre 3 ne doit pas être un int mais un double par exemple ?
      1. Modérateur
        Vu qu'il n'y a pas d'ambiguïté (en C) tes deux int seront automatiquement convertit en double
      2. Contributeur
        ?? quelle différence voi tu entre 64 et 6.400000e+001 ?
        C'est juste l'affichage scientifique.
      3. Oui, c'est vrai :$
    4. Contributeur
      Bonjour,
      Si tu ne veux pas de l'affichage scientifique, tu peux mettre : printf("%f\n\n",resultat);