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
    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.
      0
      1. Contributeur
        Je n'ai jamais remarqué de problème de conversion en C.
        0
    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);
      0
      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.
        0
      2. Modérateur
        oups... Visual Studio me perdra ^^
        0
    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 ?
      0
      1. Modérateur
        Vu qu'il n'y a pas d'ambiguïté (en C) tes deux int seront automatiquement convertit en double
        0
      2. Contributeur
        ?? quelle différence voi tu entre 64 et 6.400000e+001 ?
        C'est juste l'affichage scientifique.
        0
      3. Oui, c'est vrai :$
        0
    4. Contributeur
      Bonjour,
      Si tu ne veux pas de l'affichage scientifique, tu peux mettre : printf("%f\n\n",resultat);
      0