pourquoi pow ((double)2,(double)3) renvoi 0 et non pas 8 ? [c] - C - Programmation
Marsh Posté le 31-05-2004 à 18:08:38
man printf maintenant
(double)2.,(double)3
-> 2., 3. ou 2.0, 3.0 sont des double
-> pour les float, tu rajoute un f en suffix 2.0f, 3.0f
Marsh Posté le 31-05-2004 à 18:14:00
y a rien sur le man prinf
mais je viens de me souvenir que %ld, c'est pour les long
et %lf c'est pour les double
j'edite le source de mon premier post
malheuresement, ca ne fonctionne toujours pas
PS : cependant je vais qd meme verifier le code format du double, ca peut etre venir de l'affichage en effet avec pintf
Marsh Posté le 31-05-2004 à 18:17:13
%f pour les double
et tu vas pas trop souffir de mettre un joli int main ... return 0
chez moi ça marche
Marsh Posté le 31-05-2004 à 18:21:42
Taz a écrit : man printf maintenant |
en fait je souhaiterai faire : 2 puissance a (ou a un "int" )
donc en enfet quand on met direct un nb, on peut mettre un point devant pour caster en double
mais pour les variable, il faut bien mettre "(double)a", non ?
pow ( 2. , a ),
Marsh Posté le 31-05-2004 à 18:41:12
bon ca marche
voila, j'ai remodifié :
Code :
|
ce qui est vraiment bizzare, lorsque l'on fais direct
(double) 8 => avec un nb => ca marche pas
(double) a => variable int => ca marche
sinon peux tu m'expliquer a titre d'info ce que tu voulais me dire par : 1 << a;
Marsh Posté le 02-06-2004 à 02:39:55
C'est un décalage de a bits vers la gauche, qui fait exactement la meme chose qu'une multiplication par 2^a. Ça ne viendrait à l'idée d'à peu près personne d'utiliser pow() pour calculer 2^n...
Marsh Posté le 02-06-2004 à 13:23:53
int a = 2;
1 << a;
printf("\na = %d",a);
ehh bien j'obtiens toujours 2.
donc je pense qu'il faut que je convertisse "a" en binaire avec un truc du genre &0x, je pense ...
comme je connais pas trop les binaires, je preferes utilisé pow pour pas m'enbeter. Voilou pour info a quoi sert la fonction pow dans ma fonction :
Code :
|
c'est pas tres optimisé mais ca fonctionne parfaitement
Marsh Posté le 02-06-2004 à 13:57:10
Code :
|
ça devrait aller mieux
Marsh Posté le 02-06-2004 à 14:19:07
ohh l'idiot que je suis
mais bien sur
et bien des que j'aures terminé mon prog j'essarais de faire ca car c'est qd meme plus propre un decalage à gauche
Marsh Posté le 31-05-2004 à 18:05:03
j'ai fais quelques petit tests dans un tout petit prog, mais j'arrive pas à faire un simple : 2 puissance 3
et quand j'execute :
comme indiqué dans l'aide ci-dessous :
- je pense avoir bien casté pour respecter le prototype : double pow (double, double)
-j'ai indiqué comme entete :
#define _GNU_SOURCE
#include <math.h>
NOM
pow, powf, powl - Fonction puissance
SYNOPSIS
#define _GNU_SOURCE
#include <math.h>
double pow (double x, double y);
float powf (float x, float y);
long double powl (long double x, long double y);
DESCRIPTION
La fonction pow() renvoie la valeur de x élevé à la puissance y.
ERREURS
EDOM L'argument x est négatif, et y n'est pas entier. Le résultat
serait un nombre complexe.
NOTES
Pour utiliser les fonctions de la bibliothèque mathématique, il ne faut
pas oublier d'ajouter l'argument -lm sur la ligne de commande de cc(1)
ou ld(1), lors de l'édition des liens.
CONFORMITÉ
SVID 3, POSIX, BSD 4.3, ISO 9899 Les variantes float et long double
sont des demandes C99.
- j'ai bien precisé l'option -lm en compilant
14.17 Pourquoi j'ai des erreurs sur les fonctions de la bibliothèque, alors que j'ai bien inclus les entêtes ?
Les en-têtes (les .h) ne contiennent que les prototypes des fonctions. Le code proprement-dit de ces fonctions se trouve dans des fichiers objets. Ce code doit être « lié » au tien. Cela est fait par un éditeur de liens.
Pour certaines fonctions, il faut spécifier explicitement à l'éditeur de liens où il peut les trouver (et ce particulièrement pour les fonctions non-standard).
Par exemple, sous Unix, pour utiliser les fonctions mathématiques, il faut généralement lier le programme avec la bibliothèque adéquate :
cc -lm monfic.o -o monprog
par contre j'ai peut etre pas bien specifier la fonction mathematique avec l'option -lm
Message édité par weed le 31-05-2004 à 18:28:38