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

DirectX Discussion :

Problème étrange de précision avec double


Sujet :

DirectX

  1. #1
    Membre régulier Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Points : 90
    Points
    90
    Par défaut [Résolu] Problème étrange de précision avec double
    Bonjour,

    Voila j'ai le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    double Start,Startime=1107054048.0000000;
    Start=StartTime+0;
    Lorsque je regarde la valeur de Start, celle ci est à 1107054080.0000000 (celle de Startime vaut bien 1107054048.0000000).
    Avez-vous une idée de ce qui peut se passer. Pour d'autres valeurs, l'addition de 0 est correcte.

    Ce morceau de code provoque un bogue dans ma routine par la suite...que ce soit en compilé en release ou debug (optimisations désactivés).

    Je n'ai rien trouvé sur le net concernant ce problème, à part peut-être des conversion "mal codées" dans VC++ lors du passage 16bit 32bits de VC.

    Merci pour votre aide.

    EDIT: juste pour préciser que 1107054048 rentre largement dans la mantisse d'un double...j'aurai compris des erreurs sur les derniers chiffres apres la virgule (encore qu'avec une addition par 0...). Mais là ???
    Je viens de me rendre compte que ca fait pareil avec un +10

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    chez moi ça marche très bien (VC 2003)

  3. #3
    Membre régulier Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Points : 90
    Points
    90
    Par défaut
    Citation Envoyé par bigboomshakala
    chez moi ça marche très bien (VC 2003)
    J'ai VC2003 aussi, mais rien à faire. Tout à l'air d'être calculé en float...je vais refaire des tests.
    Merci pour ton essai.

  4. #4
    Membre régulier Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Points : 90
    Points
    90
    Par défaut
    Encore moi,

    Si je copie colle le bout de code au debut du prog ( dans l'InitInstance() de CWinApp) tout est OK.
    En milieu de parcours, le même copie colle ne marche plus (....80 au lieu de ....48)
    Je ne comprends pas du tout d'ou ca peut venir.

    EDIT : j'ai trouvé ou ca commence a ne plus fonctionner !
    juste apres la creation d'un device DirectX ( IDirect3D9->CreateDevice() )
    Je pose la question aux experts DirectX. Que se passet'il ?

    En somme, chronologiquement j'ai :

    calcul en double correcte
    creation d'un device directx
    calcul en double incorrecte car effectué en float !

    Je suis en D3DCREATE_SOFTWARE_VERTEXPROCESSING ca pourrait provenir de ca ?

    Merci.

  5. #5
    Membre régulier Avatar de titoine1978
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Décembre 2005
    Messages : 132
    Points : 90
    Points
    90
    Par défaut
    Fin mot de l'histoire :

    Quand on creer un device directx, celui ci change le mode du FPU pour le mettre en mode simple précision, et pour accelerer les calculs il ne le repasse jamais en mode double précision...d'ou les erreurs sur les calculs doubles par la suite.

    Il faut ajouter dans le CreateDevice() le flag D3DCREATE_FPU_PRESERVE pour que le calcul double fonctionne dans le reste du programme.

    Fallait le savoir

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

Discussions similaires

  1. [10gR2] Problème étrange de performances avec clause "ORDER BY"
    Par StringBuilder dans le forum SQL
    Réponses: 4
    Dernier message: 04/06/2014, 14h26
  2. [semi-résolu] Problème étrange - HTTP Session avec Internet Explorer
    Par Delphine.H dans le forum Développement Web en Java
    Réponses: 2
    Dernier message: 10/05/2011, 18h18
  3. précision avec "double"
    Par sylar42 dans le forum C++
    Réponses: 1
    Dernier message: 27/03/2008, 17h17
  4. Réponses: 5
    Dernier message: 11/05/2006, 08h51
  5. [FLASH MX2004 PRO] Problème étrange avec LoadClip...
    Par josemoroide dans le forum Flash
    Réponses: 6
    Dernier message: 04/08/2004, 15h41

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