IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

problème #include <math.h>


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    amateur
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : amateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Par défaut problème #include <math.h>
    Je deviens fou Depuis hier je n'arrive pas à utiliser une fonction de math.h (floor). J'ai un exemple test.c qui l'utilise et qui fonctionne. Parallèlement, j'ai progressivement réduit mon petit prog problématique dice.c à presque rien, y compris il inclut directement ce dont il a besoin (au lieu de passer par mon toolkit habituel) et n'a même plus de header associé. Ce qui fait qu'au final les 2 exemples sont proches. Mais je n'arrive toujours pas à utiliser floor dans dice.c, et je ne vois pas où est la différence qui l'empêche. Voici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    // test.c
    #include <stdio.h>
    #include <math.h>
     
    int main () {
       printf ("floor 1.1 : %f\n", floor(1.1)) ;
       return 1 ;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    // dice.c
    #include <stdlib.h>
    #include <stdio.h>
    #include <math.h>
    typedef unsigned int uint ;
     
    uint random_ordinal (uint max) {
       const float RANDOM_MAX = (float)(RAND_MAX) + 1 ;
       float random_01 = (float)(rand ()) / RANDOM_MAX ;
       return 1 + (uint)(floor(max * random_01)) ;
    }
     
    int main () {
       printf ("random ordinal max 3 : %d\n", random_ordinal(3)) ;
       return 1 ;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    spir@ospir:~/prog/C/WELLRandom$ gcc -c test.c -o test.o
    spir@ospir:~/prog/C/WELLRandom$ gcc test.o -o test
    spir@ospir:~/prog/C/WELLRandom$ ./test
    floor 1.1 : 1.000000
    spir@ospir:~/prog/C/WELLRandom$ gcc -c dice.c -o dice.o
    spir@ospir:~/prog/C/WELLRandom$ gcc dice.o -o dice
    dice.o: In function `random_ordinal':
    dice.c:(.text+0x4b): undefined reference to `floor'
    collect2: ld returned 1 exit status
    Voilà, je poste ce message au risque de passer pour un imbécile, mais c'est peut-être moins imbécile que de rester coincé pour ne pas passer pour un imbécile... et là, je suis complètement coincé . Ca doit être une idiotie terriblement stupide, dites-moi.

    Merci,
    denis

  2. #2
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : Février 2008
    Messages : 2 308
    Billets dans le blog
    5
    Par défaut
    Il faut ajouter -lm lors du lien pour pouvoir utiliser la bibliothèque math.h il me semble.

    Ensuite pourquoi ca fonctionne dans un cas mais pas dans l'autre, là, je ne saurais te dire...

  3. #3
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par gerald3d Voir le message
    Il faut ajouter -lm lors du lien pour pouvoir utiliser la bibliothèque math.h il me semble.
    pour pouvoir utiliser la biliothèque mathématique, oui.
    Ensuite pourquoi ca fonctionne dans un cas mais pas dans l'autre, là, je ne saurais te dire...
    Parce que dans le premier cas, le code généré n'appelle par floor. La phase d'optimisation du compilateur détecte que le paramètre passé à floor est une constante et donc que le calcul du résultat durant l'exécution est inutile.

  4. #4
    Membre confirmé
    Profil pro
    amateur
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : amateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    pour pouvoir utiliser la biliothèque mathématique, oui.

    Parce que dans le premier cas, le code généré n'appelle par floor. La phase d'optimisation du compilateur détecte que le paramètre passé à floor est une constante et donc que le calcul du résultat durant l'exécution est inutile.
    D'ac, je vais tester avec -lm...................... ça marche pas (encore):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    spir@ospir:~/prog/C/WELLRandom$ gcc -c dice.c -o dice.o
    spir@ospir:~/prog/C/WELLRandom$ gcc -lm dice.o -o dice
    dice.o: In function `random_ordinal':
    dice.c:(.text+0x37): undefined reference to `floor'
    collect2: ld returned 1 exit status
    Mais maintenant je sais qu'il y a un truc spécial avec math.h (et que je suis pas fou ): je vais chercher sur internet à propos de compiler/lier avec math.h, et à propos de -lm.

    PS: C'est typiquement le genre de truc qui me rend un peu colère, ça: comment un utilisateur est-il sensé savoir ça? D'accord, on peut toujours dire RTFM et tout ça mais; je suis sûr que c'est marqué noir sur blanc... mais où? et encore faut-il deviner que math.h est spécial en quelque chose. Et puis de toute façon lire tous les manuels de tout ce qu'on utilise, à fond, et comprendre et retenir tout le contenu et les implications et leds intéractions et tout ça, c'est pas humain (à mon avis). Si vous voyez ce que je veux dire...
    Heureusement qu'il des listes mail et autres forums: merci!

    Merci encore de votre aide,
    Denis

  5. #5
    Membre confirmé
    Profil pro
    amateur
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : amateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Par défaut ajouter -lm en ***fin*** de ligne de commande à l'édition de liens
    Voilà, toruvé sur internet, tout est dans le titre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    spir@ospir:~/prog/C/WELLRandom$ gcc -c dice.c -o dice.o
    spir@ospir:~/prog/C/WELLRandom$ gcc dice.o -o dice -lm
    spir@ospir:~/prog/C/WELLRandom$ "./dice"
    random ordinal max 3 : 3
    PS: J'aimerais bien savoir ce qui justifie ce traitement spécial de math.h, et s'il y en a d'autres come ça (des modules de la lib std, ou d'autres libs). [Alors, je marque pas encore la discussion "résolue" pour 24 h, au cas où certains auraient plus d'infos concrètes, et puis ça servira pê à d'autres.]

    Merci à vous,
    denis

  6. #6
    Membre confirmé
    Profil pro
    amateur
    Inscrit en
    Avril 2012
    Messages
    145
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : amateur
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Avril 2012
    Messages : 145
    Par défaut
    Citation Envoyé par denispir Voir le message
    PS: J'aimerais bien savoir ce qui justifie ce traitement spécial de math.h, et s'il y en a d'autres come ça (des modules de la lib std, ou d'autres libs). [Alors, je marque pas encore la discussion "résolue" pour 24 h, au cas où certains auraient plus d'infos concrètes, et puis ça servira pê à d'autres.]
    J'apporte déjà des précision, dans la FAQ de comp.lang.c (http://c-faq.com/), j'ai trouvé (chercher question 14.3):
    Q: I'm trying to do some simple trig, and I am #including <math.h>, but the linker keeps complaining that functions like sin and cos are undefined.

    A: Make sure you're actually linking with the math library. For instance, due to a longstanding bug in Unix and Linux systems, you usually need to use an explicit -lm flag, at the end of the command line, when compiling/linking. See also questions 13.25, 13.26, and 14.2.

  7. #7
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par denispir Voir le message
    D
    PS: C'est typiquement le genre de truc qui me rend un peu colère, ça: comment un utilisateur est-il sensé savoir ça? D'accord, on peut toujours dire RTFM et tout ça mais; je suis sûr que c'est marqué noir sur blanc... mais où?
    Il ne faut pas chercher bien loin:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    $ man floor
    ...
    FLOOR(3)                   Linux Programmer's Manual                  FLOOR(3)
    
    NAME
           floor,  floorf,  floorl - largest integral value not greater than argu‐
           ment
    
    SYNOPSIS
           #include <math.h>
    
           double floor(double x);
           float floorf(float x);
           long double floorl(long double x);
    
           Link with -lm.
          
          ...

  8. #8
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Parce que dans le premier cas, le code généré n'appelle par floor. La phase d'optimisation du compilateur détecte que le paramètre passé à floor est une constante et donc que le calcul du résultat durant l'exécution est inutile.
    Salut,

    cette réflection m'a interpelé ... il est fort quand même gcc, il voit floor dans <math.h> (dans la glibc/gcc il y a un attribut const qui signifie même paramêtre -> même résultat). Il optimise en exécutant un floor(1.1) (donc en faisant appel à la libm) et place le résultat à la place de l'appel de fonction. Ça me paraît cohérent.

    Mais que se passe-t-il si on remplace (maladroitement) le #include <math.h> par le prototype naïf de floor :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // test.c
    #include <stdio.h>
    //#include <math.h>
     
    extern double floor(double);
     
    int main () {
       printf ("floor 1.1 : %f\n", floor(1.1)) ;
       return 0 ;
    }
    Pas d'attribut const cette fois ci ... donc l'appel à floor pourrait faire autre chose que renvoyer une valeur constante pour un paramètre constant (comme modifier une variable globale, renvoyer une valeur non constante, ...).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ~> gcc -o test test.c 
    ~> ldd test
            linux-vdso.so.1 =>  (0x00007fff995ff000)
            libc.so.6 => /lib64/libc.so.6 (0x00007f39f9891000)
            /lib64/ld-linux-x86-64.so.2 (0x00007f39f9c21000)
    ~> ./test 
    floor 1.1 : 1.000000
    Ah ben non .... toujours la même optimisation ?

    Mais alors que se passerait-il si je lui donne ma version de floor ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //monfloor.c
     
    double floor(double x)
    {
      return 3.14;
    }
    avec le même test.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // test.c
    #include <stdio.h>
    //#include <math.h>
     
    extern double floor(double);
     
    int main () {
       printf ("floor 1.1 : %f\n", floor(1.1)) ;
       return 0 ;
    }
    On compile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ~> gcc -c test.c
    ~> gcc -c monfloor.c 
    ~> gcc -o test monfloor.o test.o 
    ~> ./test 
    floor 1.1 : 1.000000
    N'y aurait-il pas comme un bug de bonne volonté : je n'ai pas demandé de link avec la libm, j'ai fourni ma version de floor et pourtant on bypass mes choix et non seulement on écarte mon floor et on me le remplace sans que je demande quoi que ce soit par la version de la libm ????

    Ok ... forçons un appel qui ne peut-être optimisé :
    monfloor est inchangé, mais test.c devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // test.c
    #include <stdio.h>
    //#include <math.h>
     
    extern double floor(double);
     
    int main () {
       double d;
       printf ("floor 1.1 : %f\n", floor(1.1)) ;
       printf ("double value : ");
       scanf ("%lf", &d);
       printf ("floor(%lf)=%lf\n", d, floor(d));
       return 0 ;
    }
    Je vire tous les .o et test pour partir sur une compil propre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ~> rm *.o test
    ~> gcc -c monfloor.c 
    ~> gcc -c test.c 
    ~> gcc -o test test.o monfloor.o
    Jusque là tout va bien ... testons test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ~> ./test 
    floor 1.1 : 1.000000
    double value : 10.1
    floor(10.100000)=3.140000
    Ah ???? le premier floor est celui optimisé avec un appel à la libm, le second est le mien ????

    Le résultat est identique avec les options -O0 (pas d'optimisation) et -g (debug)

    Voyons quelle est l'adresse du bugzilla de gcc ?



    Remarque : le compilateur intel réagi correctement lui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ~> /opt/intel/bin/icc -c test.c
    ~> /opt/intel/bin/icc -c monfloor.c 
    ~> /opt/intel/bin/icc -o test test.o monfloor.o
    ~> ./test 
    floor 1.1 : 3.140000
    double value : 100
    floor(100.000000)=3.140000
    Il va même cherche la libm tout seul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ~> /opt/intel/bin/icc -o test test.o 
    ~> ./test 
    floor 1.1 : 1.000000
    double value : 10.22
    floor(10.220000)=10.000000

  9. #9
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 816
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 816
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par kwariz Voir le message
    Salut,

    cette réflection m'a interpelé ... il est fort quand même gcc, il voit floor dans <math.h> (dans la glibc/gcc il y a un attribut const qui signifie même paramêtre -> même résultat). Il optimise en exécutant un floor(1.1) (donc en faisant appel à la libm) et place le résultat à la place de l'appel de fonction. Ça me paraît cohérent.

    Mais que se passe-t-il si on remplace (maladroitement) le #include <math.h> par le prototype naïf de floor :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // test.c
    #include <stdio.h>
    //#include <math.h>
     
    extern double floor(double);
     
    int main () {
       printf ("floor 1.1 : %f\n", floor(1.1)) ;
       return 0 ;
    }
    Pas d'attribut const cette fois ci ... donc l'appel à floor pourrait faire autre chose que renvoyer une valeur constante pour un paramètre constant (comme modifier une variable globale, renvoyer une valeur non constante, ...).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ~> gcc -o test test.c 
    ~> ldd test
            linux-vdso.so.1 =>  (0x00007fff995ff000)
            libc.so.6 => /lib64/libc.so.6 (0x00007f39f9891000)
            /lib64/ld-linux-x86-64.so.2 (0x00007f39f9c21000)
    ~> ./test 
    floor 1.1 : 1.000000
    Ah ben non .... toujours la même optimisation ?

    Mais alors que se passerait-il si je lui donne ma version de floor ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    //monfloor.c
     
    double floor(double x)
    {
      return 3.14;
    }
    avec le même test.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    // test.c
    #include <stdio.h>
    //#include <math.h>
     
    extern double floor(double);
     
    int main () {
       printf ("floor 1.1 : %f\n", floor(1.1)) ;
       return 0 ;
    }
    On compile :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ~> gcc -c test.c
    ~> gcc -c monfloor.c 
    ~> gcc -o test monfloor.o test.o 
    ~> ./test 
    floor 1.1 : 1.000000
    N'y aurait-il pas comme un bug de bonne volonté : je n'ai pas demandé de link avec la libm, j'ai fourni ma version de floor et pourtant on bypass mes choix et non seulement on écarte mon floor et on me le remplace sans que je demande quoi que ce soit par la version de la libm ????

    Ok ... forçons un appel qui ne peut-être optimisé :
    monfloor est inchangé, mais test.c devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    // test.c
    #include <stdio.h>
    //#include <math.h>
     
    extern double floor(double);
     
    int main () {
       double d;
       printf ("floor 1.1 : %f\n", floor(1.1)) ;
       printf ("double value : ");
       scanf ("%lf", &d);
       printf ("floor(%lf)=%lf\n", d, floor(d));
       return 0 ;
    }
    Je vire tous les .o et test pour partir sur une compil propre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ~> rm *.o test
    ~> gcc -c monfloor.c 
    ~> gcc -c test.c 
    ~> gcc -o test test.o monfloor.o
    Jusque là tout va bien ... testons test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ~> ./test 
    floor 1.1 : 1.000000
    double value : 10.1
    floor(10.100000)=3.140000
    Ah ???? le premier floor est celui optimisé avec un appel à la libm, le second est le mien ????

    Le résultat est identique avec les options -O0 (pas d'optimisation) et -g (debug)
    Pas mal du tout. Mon compilo (gcc v4.4.5-8 de Debian Squeeze) a réagi pareil

    Citation Envoyé par kwariz Voir le message
    Remarque : le compilateur intel réagi correctement lui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ~> /opt/intel/bin/icc -c test.c
    ~> /opt/intel/bin/icc -c monfloor.c 
    ~> /opt/intel/bin/icc -o test test.o monfloor.o
    ~> ./test 
    floor 1.1 : 3.140000
    double value : 100
    floor(100.000000)=3.140000
    Il va même cherche la libm tout seul :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    ~> /opt/intel/bin/icc -o test test.o 
    ~> ./test 
    floor 1.1 : 1.000000
    double value : 10.22
    floor(10.220000)=10.000000
    Et g++ marche aussi...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  10. #10
    Membre Expert
    Avatar de kwariz
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Octobre 2011
    Messages
    898
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2011
    Messages : 898
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Pas mal du tout. Mon compilo (gcc v4.4.5-8 de Debian Squeeze) a réagi pareil



    Et g++ marche aussi...
    Ma version de gcc : 4.6.2 ; même comportement g++ donne un code correct (test.o + monfloor.o -> test) ou échoue (test.o -> test).

    Bon il est un peu tard pour faire du bugzilla mais je regarderai demain si le bug est connu.

    EDIT:
    En fait c'est encore pire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    #include <stdio.h>
     
    double floor(double x)
    {
      return 3.14;
    }
     
    int main()
    {
      double x;
      x=1.1;
      printf("floor(%lf)=%lf\n", 1.1, floor(1.1));
      printf("floor(%lf)=%lf\n", x, floor(x));
     
      return 0;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    > gcc -o test test.c
    > ./test
    floor(1.100000)=1.000000
    floor(1.100000)=3.140000

  11. #11
    Invité de passage
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Novembre 2012
    Messages : 1
    Par défaut
    slt
    J'utilise Visual Studio 2010 j'aimerai savoir comment utiliser la bibliothèque math.h dans cet environnement. En effet mon code ne parvient pas a calculer cos et sin
    Merci d'avance

  12. #12
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Citation Envoyé par asndic Voir le message
    slt
    J'utilise Visual Studio 2010 j'aimerai savoir comment utiliser la bibliothèque math.h dans cet environnement. En effet mon code ne parvient pas a calculer cos et sin
    Merci d'avance
    math.h est implémenté a part, il faut lier avec la lib math.

    c'est probablement m.dll, mais google ou un autre d'entre nous te diras le bon nom (pour linux, c'est libm.so => option de compilation -lm)

    Dans visual studio, il y a probablement une option explicite pour lier avec.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. problème : problème include avec 2 Form (pitié !)
    Par antoile dans le forum VC++ .NET
    Réponses: 6
    Dernier message: 04/05/2007, 16h02
  2. Problème include
    Par djul94 dans le forum Langage
    Réponses: 10
    Dernier message: 26/03/2007, 13h49
  3. Problème includes pas conformes et incomplets
    Par souviron34 dans le forum Dev-C++
    Réponses: 6
    Dernier message: 30/01/2007, 20h57
  4. [VC++] Problème include de header
    Par Yellowmat dans le forum MFC
    Réponses: 10
    Dernier message: 08/12/2005, 13h50
  5. problème include avec win 2003 / IIS6
    Par fredoche dans le forum ASP
    Réponses: 3
    Dernier message: 26/09/2005, 17h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo