logarithme en C - C - Programmation
Marsh Posté le 28-11-2004 à 12:13:04
J'ai fait exactement ce que tu as fait et ça me retourne "-1.999104" (je ne sais pas si c'est correct ).
Marsh Posté le 28-11-2004 à 12:18:52
c0wb0y a écrit : essaye float n = 3456.0 |
déjà ça c'est une constante double, et pas float
axelazerty > déjà si tu compiles en -Wall tu vois, qu'il trouve pas la fonction. Donc y a un problème. Comme un grand tu ouvres le man, et tu vois que log2f est spécifique à C99. Donc au final, ton CFLAGS doit être:
--> -Wall -std=gnu9x / C99 + extension GNU
--> -Wall -std=c99 / C99 uniquement
PS : tout ça c'est l'eternel histoire du type par défaut. une fonction qui n'a pas de prototype se verra assigné un prototype 'int f(int)'. Donc ici, ça a un effet très visible. Conclusion : toujours compilé en -Wall.
Marsh Posté le 28-11-2004 à 13:45:35
avec -std=gnu9x ca fonctionne.
Merci beaucoup.
a propos de ton "PS", log2f() n a pas de prototype?
Marsh Posté le 28-11-2004 à 13:47:38
et pourquoi ne le connait il pas ?
il est defini dans math.h pourtant.
Marsh Posté le 28-11-2004 à 14:07:41
il est défini dans math.h si tu fais du C99
t'es long à la détente ...
Marsh Posté le 28-11-2004 à 14:10:28
axelazerty a écrit : et pourquoi ne le connait il pas ? |
Taz te dit que c'est défini dans math.h en C99, et par défaut gcc ne compile pas en C99 (C89?)
Donc si tu ne lui dit pas "compile en C99", il n'a pas le bon math.h donc il n'a pas la bonne fonction (ou pas la fonction du tout)
Marsh Posté le 01-12-2004 à 10:04:22
darkoli a écrit : J'ai fait exactement ce que tu as fait et ça me retourne "-1.999104" (je ne sais pas si c'est correct |
Non. Pour que le log soit < 0, il faut que 0 < x < 1.
(rappel : log est une fonction strictement croissante définie sur ]0, +infini[, négative sur ]0,1[, positive ou nulle pour x >= 1)
Marsh Posté le 01-12-2004 à 10:31:03
oui pour un logarithme néperien. la c'est un log binaire donc ln(n)/ln(2)
Marsh Posté le 01-12-2004 à 11:39:35
printf("%lf\n",log2f(n)); //Avec un L minuscule
Marsh Posté le 04-12-2004 à 16:40:19
lsdyoyo a écrit : printf("%lf\n",log2f(n)); //Avec un L minuscule |
Non. Tu confonds avec scanf()...
Code :
|
est correct.
En fait, le 'f' de 'log2f()' signifie float. Mais printf() convertit automatiquement un float en double, donc le format est bien "%f" (car pour printf(), "%f" signifie 'au format double'. Oui, c'est pas simple, parce que avec scanf(), "%f" signifie 'adresse d'un float', et "%lf" adresse d'un double...
Marsh Posté le 04-12-2004 à 16:55:23
mais si tu tiens vraiment à faire tes calculs en long double, il y a une variante de log2 -> long double log2l(long double)
voire même dans <tgmath.h> pour ne plus s'embêter
Marsh Posté le 28-11-2004 à 12:02:00
bonjour, voici mon code :
je compile
et ca me renvoit toujours 0.00000
Où est le problème?