Langage C - Débutant - Pow

Raphael74 Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   -  
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   -
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 (:

A voir également:

5 réponses

Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
Heremion Messages postés 538 Date d'inscription   Statut Membre Dernière intervention   102
 
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
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
Je n'ai jamais remarqué de problème de conversion en C.
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
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
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
oups... Visual Studio me perdra ^^
0
Raphael74 Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   4
 
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
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Vu qu'il n'y a pas d'ambiguïté (en C) tes deux int seront automatiquement convertit en double
0
Char Snipeur Messages postés 9813 Date d'inscription   Statut Contributeur Dernière intervention   1 299
 
?? quelle différence voi tu entre 64 et 6.400000e+001 ?
C'est juste l'affichage scientifique.
0
Raphael74 Messages postés 79 Date d'inscription   Statut Membre Dernière intervention   4
 
Oui, c'est vrai :$
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,
Si tu ne veux pas de l'affichage scientifique, tu peux mettre : printf("%f\n\n",resultat);
0