Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
5080 connectés 

  FORUM HardWare.fr
  Programmation
  C

  logarithme en C

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

logarithme en C

n°909542
axelazerty
Posté le 28-11-2004 à 12:02:00  profilanswer
 

bonjour, voici mon code :

Code :
  1. #include <math.h>
  2. #include <stdio.h>
  3. int main()
  4. {
  5. float n = 3456;
  6. printf("%f\n",log2f(n));
  7. }


 
je compile  

Code :
  1. gcc -o log log.c -lm


 
et ca me renvoit toujours 0.00000
 
Où est le problème?

mood
Publicité
Posté le 28-11-2004 à 12:02:00  profilanswer
 

n°909545
darkoli
Le Petit Dinosaure Bleu
Posté le 28-11-2004 à 12:13:04  profilanswer
 

J'ai fait exactement ce que tu as fait et ça me retourne "-1.999104" (je ne sais pas si c'est correct :D).


---------------
Le site de l'année :D (XHTML 1.0 strict) : http://darkoli.free.fr/index.html
n°909546
c0wb0y
:d
Posté le 28-11-2004 à 12:13:27  profilanswer
 

essaye float n = 3456.0

n°909549
leneuf22
Posté le 28-11-2004 à 12:16:37  profilanswer
 

Dans ce cas c'est plutot 3456.0f (sinon c'est un double)

n°909551
Taz
bisounours-codeur
Posté le 28-11-2004 à 12:18:52  profilanswer
 

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.


Message édité par Taz le 28-11-2004 à 12:44:06
n°909631
axelazerty
Posté le 28-11-2004 à 13:45:35  profilanswer
 

avec -std=gnu9x ca fonctionne.
Merci beaucoup.
 
a propos de ton "PS", log2f() n a pas de prototype?

n°909632
Taz
bisounours-codeur
Posté le 28-11-2004 à 13:46:33  profilanswer
 

ben si, mais gcc peut pas l'inventer !

n°909633
axelazerty
Posté le 28-11-2004 à 13:47:38  profilanswer
 

et pourquoi ne le connait il pas ?
il est defini dans math.h pourtant.

n°909653
Taz
bisounours-codeur
Posté le 28-11-2004 à 14:07:41  profilanswer
 

il est défini dans math.h si tu fais du C99 :o
t'es long à la détente ...

n°909656
masklinn
í dag viðrar vel til loftárása
Posté le 28-11-2004 à 14:10:28  profilanswer
 

axelazerty a écrit :

et pourquoi ne le connait il pas ?
il est defini dans math.h pourtant.


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) :sol:


---------------
I mean, true, a cancer will probably destroy its host organism. But what about the cells whose mutations allow them to think outside the box by throwing away the limits imposed by overbearing genetic regulations? Isn't that a good thing?
mood
Publicité
Posté le 28-11-2004 à 14:10:28  profilanswer
 

n°909657
axelazerty
Posté le 28-11-2004 à 14:11:18  profilanswer
 

okay j ai compris :)
merci

n°911845
el muchach​o
Comfortably Numb
Posté le 01-12-2004 à 10:04:22  profilanswer
 

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 :D).

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)


Message édité par el muchacho le 01-12-2004 à 10:08:37
n°911857
spokup
Posté le 01-12-2004 à 10:31:03  profilanswer
 

oui pour un logarithme néperien. la c'est un log binaire donc ln(n)/ln(2)

n°911903
lsdYoYo
gravity powered
Posté le 01-12-2004 à 11:39:35  profilanswer
 

printf("%lf\n",log2f(n)); //Avec un L minuscule


Message édité par lsdYoYo le 01-12-2004 à 11:40:08
n°914780
Taz
bisounours-codeur
Posté le 04-12-2004 à 16:28:26  profilanswer
 

heink ?

n°914797
Emmanuel D​elahaye
C is a sharp tool
Posté le 04-12-2004 à 16:40:19  profilanswer
 

lsdyoyo a écrit :

printf("%lf\n",log2f(n)); //Avec un L minuscule


Non. Tu confonds avec scanf()...

Code :
  1. printf("%f\n",log2f(n));


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...


Message édité par Emmanuel Delahaye le 04-12-2004 à 16:46:17

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
n°914809
Taz
bisounours-codeur
Posté le 04-12-2004 à 16:55:23  profilanswer
 

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 :)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  logarithme en C

 

Sujets relatifs
[C++] Fonction logarithme ? Ca existe ? 
Plus de sujets relatifs à : logarithme en C


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)