Partage
  • Partager sur Facebook
  • Partager sur Twitter

Utilisation de math.h sur MacOS

Sujet résolu
    8 décembre 2005 à 8:42:24

    Bonjour tout le monde !

    J'aimerais savoir comment utiliser la librairie math.h sur MacOS sachant que quand je tape ce code :
    #include <stdio.h>
    #include <math.h>

    int main()
    {
        double absolu = 0, nombre1 = -57;
        absolu = abs(nombre1);
        printf("La valeur absolue de %ld est : %ld !\n", nombre1, absolu);
        return 0;
    }


    Le Terminal m'affiche :
    /Users/simon/Desktop/Exercice C:C++/math.c: In function 'int main()':
    /Users/simon/Desktop/Exercice C:C++/math.c:7: error: 'abs' was not declared in this scope
    • Partager sur Facebook
    • Partager sur Twitter
      8 décembre 2005 à 12:25:48

      Deux choses : C'est fabs() et non abs() pour des double, m@t s'est trompé. abs() c'est pour des entiers et c'est dans stdlib.h
      • Partager sur Facebook
      • Partager sur Twitter
        8 décembre 2005 à 17:32:55

        J'ai changé ça ne change rien :(
        • Partager sur Facebook
        • Partager sur Twitter
          8 décembre 2005 à 18:11:32

          Il ne faut pas mettre \ld mais \lf. Je pense que c'est du au fait que la fonction fabs renvoie un double et non un long.

          Ce code marche pour moi ;) :

          #include <stdio.h>
          #include <math.h>

          int main()
          {
              double absolu = 0, a = -57;
              absolu = fabs(a);
              printf("La valeur absolue de %lf est : %lf !\n", a, absolu);
              system("PAUSE");
              return 0;
          }
          • Partager sur Facebook
          • Partager sur Twitter
            8 décembre 2005 à 18:44:10

            Ben je sais pas mais en tous cas, abs pour moi ça ne marche pas ;)
            • Partager sur Facebook
            • Partager sur Twitter
              8 décembre 2005 à 18:48:10

              $ grep abs math.h
              _CRTIMP double __cdecl fabs (double);
              /* Complex number (for _cabs). This is the MS version. The ISO
              _CRTIMP double __cdecl _cabs (struct _complex);
              /* 7.12.7.2 The fabs functions: Double in C89 */
              extern float __cdecl fabsf (float x);
              extern long double __cdecl fabsl (long double x);


              $ grep abs stdlib.h
              _CRTIMP int __cdecl abs (int) __MINGW_ATTRIB_CONST;
              _CRTIMP long __cdecl labs (long) __MINGW_ATTRIB_CONST;
              __CRT_INLINE long long __cdecl llabs(long long _j)


              http://www.cplusplus.com/ref/cmath/abs.html

              A savoir si c'est le math.h de mingw qui se la joue je sais pas.
              • Partager sur Facebook
              • Partager sur Twitter
                8 décembre 2005 à 18:51:05

                AHAH !

                DONC, le abs de math.h renvoie du décimal, et celui de stdlib de l'entier.

                Voilà qui est... super simple :(
                • Partager sur Facebook
                • Partager sur Twitter

                If you'd like to join us, read "How do we work at OpenClassrooms"! :)

                  8 décembre 2005 à 19:00:28

                  oui oui, en C, la fonction abs() se trouve dans stdlib.h et non dans math.h.
                  et c'est int abs(int);, et pas avec des doubles :p
                  • Partager sur Facebook
                  • Partager sur Twitter
                    8 décembre 2005 à 19:11:11

                    Donc il vaut mieux utiliser laquelle ?
                    • Partager sur Facebook
                    • Partager sur Twitter
                      8 décembre 2005 à 19:13:52

                      abs est plus pratique quand on manipule des entiers bien sur, mais sinon il faut utiliser les fonctions abs appropriés (fabs, etc).
                      • Partager sur Facebook
                      • Partager sur Twitter
                        8 décembre 2005 à 19:23:57

                        Ok merci donc pour ceux qui veulent tester c'est :
                        #include <stdio.h>
                        #include <stdlib.h>
                        #include <math.h>

                        int main()
                        {
                            int absolu = 0, nombre1 = -57;
                            double absolu_decimal = 0, nombre_decimal = -57.36;
                            absolu = abs(nombre1);
                            printf("La valeur absolue de %ld est : %ld !\n", nombre1, absolu);
                            absolu_decimal = fabs(nombre_decimal);
                            printf("La valeur absolue de %lf est : %lf !\n", nombre_decimal, absolu_decimal);
                            return 0;
                        }


                        Mathéo tu t'es trompé dans ton cours de C, chapitre 5, tu as écris que fabs renvoyé la valeur absolue d'un nombre entier or fabs renvoie la valeur absolue d'un nombre décimal, tu as confondu avec abs :p
                        • Partager sur Facebook
                        • Partager sur Twitter
                          9 décembre 2005 à 17:50:29

                          UP - Je crois pas que ce que j'ai dit c'est des conneries ;)
                          • Partager sur Facebook
                          • Partager sur Twitter

                          Utilisation de math.h sur MacOS

                          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                          • Editeur
                          • Markdown