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 de définition d'une variable de type float


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 33
    Points : 15
    Points
    15
    Par défaut Problème de définition d'une variable de type float
    Bonjour,
    J'essaie de réaliser une petite application 3D utilisant OpenGL, mais je pense que mon problème ne vient pas de là.
    Je pense que le plus simple est que je vous donne mes sources. J'utilise Dev C++.
    Dans "void Solid::init()", si je définis mon vecteur w par: "w.def(0.0,0.0,0.0)", mon cube s'affiche correctement. Par contre, dès que je met "w.def(0.1,0.1,0.1)", cela ne fonctionne plus!
    J'ai déjà eu des problèmes précédemment en utilisant les floats dans mes calculs: j'avais des expression du type: 1/2*a (a étant une variable de type float), et j'ai trouvé qu'il fallait les remplacer par 0.5*a (par exemple), pour que les problèmes de définition du type float.
    Dans mon problème donc, j'essaie de faire un debug, et je constate que w n'est pas définit correctement: x=-1#INF, y=-1#INF, z=-nan(0xc00000).
    J'ai beau chercher, je ne comprends pas d'où vient mon erreur. J'ai pourtant fait attention à déclarer toutes mes variables de type long double, et à remplacer les 1, 0, 1/2 etc par des 1.0, 0.0, 0.5...

    Merci d'avance pour votre aide!

    Voici le code (j'en ai supprimé une bonne partie comme on me l'a demandé)
    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
     
    class Vect {
        public:
            long double x,y,z; // Composantes du vecteur
            void def(long double cx,long double cy,long double cz); // Définition des composantes
            long double norm(); // Norme du vecteur (longueur)
    };
    void Vect::def(long double cx,long double cy,long double cz) {
        x=cx;y=cy;z=cz;
    }
    long double Vect::norm() {
        return sqrt(carre(x)+carre(y)+ carre(z));
    }
    class Solid {
        public:
            void init(); // Initialisation de l'objet
            void main(); // Gestion de l'objet à chaque boucle
            void display(); // Affichage de l'objet
            void calc_ext(); // Calcul de la résultante et du moment des forces extérieures
            void move(); // Calcul la nouvelle position
            long double m; // Masse
            Vect j; // Opérateur d'inertie diagonalisé (composantes de la diagonale)
            Vect v; // Vitesse de l'objet
            Vect g; // Centre de gravite
            Vect w; // Vecteur rotation
            Vect4 q; // Quaternion
            Matrix p; // Matrice de passage du ref galileen dans le repere lie au solide
            Force forces[FORCES_MAX]; // Liste des forces appliquées au solide
            Vect forcext; // Résultante des forces extérieures (point d'application=centre de gravite du solide)
            Vect momext; // Moment résultant des forces extérieures par rapport au centre de gravite
    }
    void Solid::init() {
        m=0.28; // masse
        g.def(0.0,0.0,0.0); // Centre de gravite initial
        w.def(0.1,0.1,0.1); // Vecteur rotation initial
        v.def(0.0,0.0,0.0); // Vitesse initiale
        j.def(2.23,2.23,0.00016); // Opérateur d'inertie
        // Forces initiales
        for &#40;int i=0;i<FORCES_MAX;i++&#41; &#123;
            forces&#91;i&#93;.f.def&#40;0.0,0.0,0.0&#41;;
            forces&#91;i&#93;.p.def&#40;0.0,0.0,0.0&#41;;
        &#125;
        // Matrice de passage initiale
        p.def&#40;1.0, 0.0, 0.0,
              0.0, 0.7, -0.7,
              0.0, 0.7, 0.7&#41;;
        q.def&#40;q0,q1,q2,q3&#41;;
    &#125;
     
    &#125;
    void Solid&#58;&#58;move&#40;&#41; &#123;
        // Translation
        g=vectplus&#40;multscalvect&#40;carre&#40;dt&#41;*m,forcext&#41;,vectplus&#40;g,multscalvect&#40;dt,v&#41;&#41;&#41;;
        v=vectplus&#40;multscalvect&#40;dt/m,forcext&#41;,v&#41;;
        // Rotation
            // Recherche du vecteur rotation
        long double a&#91;3&#93;&#91;3&#93;=&#123;&#123;j.x/dt,0.5*&#40;j.z-j.y&#41;,-&#40;momext.x+w.x/dt&#41;&#125;,
                       &#123;j.y/dt,0.5*&#40;j.x-j.z&#41;,-&#40;momext.y+w.y/dt&#41;&#125;,
                       &#123;j.z/dt,0.5*&#40;j.y-j.x&#41;,-&#40;momext.z+w.z/dt&#41;&#125;&#125;;
        Vect delta;delta.def&#40;5.0,5.0,5.0&#41;;
            w=vectplus&#40;w,delta&#41;;
        &#125;
    &#125;

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    j'avais des expression du type: 1/2*a (a étant une variable de type float), et j'ai trouvé qu'il fallait les remplacer par 0.5*a (par exemple)
    Normal, 1/2 vaut bien 0 (division entière). Par contre, 1/2.0f vaut 0.5f ; il suffit que l'une deux opérandes soit de type réel (float ou double) pour avoir une division réelle.

    Ton code est beaucoup trop long, retire ce qui n'a rien à voir avec ton problème (soit certainement 90% de ce que tu nous montres).

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/12/2010, 09h55
  2. Réponses: 0
    Dernier message: 04/02/2009, 00h30
  3. Réponses: 4
    Dernier message: 13/06/2008, 11h09
  4. Réponses: 2
    Dernier message: 31/10/2007, 16h40
  5. problème avec une variable de type string
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 14/06/2007, 15h53

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