Partage
  • Partager sur Facebook
  • Partager sur Twitter

Vérifier si une variable contient un réel

Problème avec une racine carrée d'un négatif.

Sujet résolu
    27 janvier 2006 à 20:56:36

    Bonsoir,

    Je suis masochiste :p , et je cherche à faire un programme qui calcule une limite d'une fonction. (oui j'aime les maths, et alors ? :-° )

    J'ai besoin à un moment de calculer une solution d'une équation du second degré, voici mon code source simplifié au maximum :


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

    double racine(int a,int b,int c)
    {
           return (-b + sqrt(pow(b,2) - 4*a*c)) / (2*a);
           // Je calcule une des deux solutions possibles
    }


    int main(int argc, char *argv[])
    {
        printf("%lf\n",racine(5,2,10));
        // Ici, je calcule par exemple une solution de 5x²+2x+10=0
        system("PAUSE");
        return 0;
    }


    J'obtiens à l'écran le résultat suivant : -1.#IND00.
    Le problème vient d'après moi du fait que je demande au programme de calculer la racine carrée d'un nombre négatif ou de diviser un nombre par zéro, ce qui n'est pas très catholique o_O

    Voici donc (enfin) ma question : est-il possible de vérifier que la valeur retournée par la fonction "racine" est bien un nombre réel ? Si oui, comment ?


    Merci d'avance.
    PS : Je débute totalement en C++.
    • Partager sur Facebook
    • Partager sur Twitter
      27 janvier 2006 à 21:08:21

      C'est à toi de "vérifier" en envisageant tout les cas possibles et d'y apporter le bon algorithme

      Un bon programmeur c'est un programmeur qui prévoit le danger et qui agit en conséquence :)

      EDIT : Sinon pour ton problème il suffit de tester la valeur du déterminant, si celui-ci est supérieur ou égal à 0 => appeller la fonction racine
      • Partager sur Facebook
      • Partager sur Twitter
        27 janvier 2006 à 21:09:02

        Tu ferais bien d'utiliser des double si tu veux des calculs sur réels à petite précision.

        Pour tester si c'est un réel :
        #include <errno.h>

        double sr;
        /* ... */
        errno = 0;
        sr = sqrt(b*b - 4*a*c);
        if (errno == EDOM)
        /* non réel */
        • Partager sur Facebook
        • Partager sur Twitter
          27 janvier 2006 à 21:16:49

          Merci beaucoup pour vos réponses.

          Je pensais que c'était plus simple o_O , en fait je cherchais l'équivalent du IsNaN du Javascript.

          Ca me rassure de voir que je n'aurais jamais pu deviner ça tout seul, enfin je vais me renseigner sur l'include errno.h.

          Encore merci :)
          • Partager sur Facebook
          • Partager sur Twitter
            27 janvier 2006 à 21:34:48

            C'est une solution, j'ai répondu à ta question : Comment détecter que sqrt n'a pas produit un réel. Or, il y a plus simple : Il suffit de tester si la valeur que tu vas passer à sqrt n'est pas négative.
            • Partager sur Facebook
            • Partager sur Twitter

            Vérifier si une variable contient un réel

            × 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