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 :

[float] Calcul et r�sultat diff�rent


Sujet :

C++

Vue hybride

Message pr�c�dent Message pr�c�dent   Message suivant Message suivant
  1. #1
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par d�faut [float] Calcul et r�sultat diff�rent
    Salut,

    Je tente d'effectuer un simple calcul depuis quelques temps et malgr� sa simplicit� je n'obtiens pas le bon r�sultat.

    Voici la chose : j'effectue un calcul avec 1 - 1 tous deux des float qui doivent me retourner un float (0). Et non j'obtiens
    -1.49012e-08 = 1 - 1
    Plut�t �trange

    Auriez-vous une id�e sur le probl�me ?

  2. #2
    Membre chevronn�
    Avatar de ZouBi
    Inscrit en
    Octobre 2007
    Messages
    508
    D�tails du profil
    Informations professionnelles :
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Octobre 2007
    Messages : 508
    Par d�faut
    c'est �a la magie des float
    Bon, sans vouloir dire de connerie, il me semble qu'il est deconseill� de faire des calculs avec des flotants, car les resultats ne sont rarement exactes ( meme pour des calculs simples comme le tiens )

  3. #3
    Membre confirm� Avatar de babar63
    Homme Profil pro
    D�veloppeur jeux vid�os/3d Temps r�el
    Inscrit en
    Septembre 2005
    Messages
    241
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur jeux vid�os/3d Temps r�el

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par d�faut
    Comment on arrive � ce r�sultat je ne sais pas mais sachant que -1.49012e-08 = -0.00000000149012, cela doit surement correspondre � une marge d'erreur introduit par le calcul en flottant. En tout cas en effectuant cette op�ration : j'obtiens bien 0

  4. #4
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par d�faut
    Mon calcul ne se limite pas � 1.f mais � des variables que je r�cup�re depuis un vecteur.

    Sinon je suis bien oblig� d'utiliser des r�els sinon mes calculs ne seront pas corrects.

    [Edit]
    De plus j'ai essay� la solution du 1.f mais rien � faire toujours le m�me r�sultat

  5. #5
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Lire : http://cpp.developpez.com/faq/cpp/?p...ions_flottants

    Ou pour un truc un peu (euph�misme) plus math�matique : http://docs.sun.com/source/806-3568/ncg_goldberg.html

    Si ces infos ne suffisent pas, il faudra nous en dire plus sur le contexte de ces calculs pour qu'on puisse tenter de mieux t'aider...

    Remarque : C'est un probl�me avec tous les langages informatiques qui soient...
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

  6. #6
    Inactif  
    Avatar de Kerod
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    11 672
    D�tails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 11 672
    Par d�faut
    A vrai dire voil� une partie de mon code :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
    3
    4
    5
    for(int j = 0; j < (2 * nbVar) + 1; j++)
            {
                float temp = valeur * tmp[0][j];
                matrice[i][j] = tmp[i][j] - temp;
            }
    Avec tmp une matrice contenant tout mes float. valeur �tant un float �galement. i un indice fix� par une pr�c�dente boucle for

    Au final je dois remplir une autre matrice avec le r�sultat de ce calcul. Les impr�cisions sont assez g�nantes et j'ai pas trop de tests � faire dessus (en r�f�rence � ton premier lien).

    C'est la premi�re fois que je vois un tel probl�me et pourtant les langages j'en ai utilis� pas mal

    faire ceci ne va pas me renvoyer un entier ? En tout cas c'est ce qui me semble et c'est pas ce que je veux

  7. #7
    Membre confirm� Avatar de babar63
    Homme Profil pro
    D�veloppeur jeux vid�os/3d Temps r�el
    Inscrit en
    Septembre 2005
    Messages
    241
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 38
    Localisation : France

    Informations professionnelles :
    Activit� : D�veloppeur jeux vid�os/3d Temps r�el

    Informations forums :
    Inscription : Septembre 2005
    Messages : 241
    Par d�faut
    Pour ce qui est des autres langages je n'ai aucune id�e mais par contre les matrices en float je n'utilise que �a � longueur de journ�e , je n'ai jamais eu r�ellement de probl�mes avec les impr�cisions, il me semble avoir vu seulement un cas d'analyse/traitement d'image qui posait probl�me avec ces impr�cisions (boucle imbriqu�e � n'en plus finir avec des calculs monstrueux... ). Je ne pense pas avoir suffisamment d'exp�rience pour en dire plus mais ces impr�cisions pose vraiment probl�mes? Travailler avec des doubles ne r�glerait pas le probl�me?

    Citation Envoy� par Kerod
    faire ceci ne va pas me renvoyer un entier ? En tout cas c'est ce qui me semble et c'est pas ce que je veux
    abs retourne bien un entier, il faut utiliser la fonction fabs

  8. #8
    R�dacteur/Mod�rateur
    Avatar de JolyLoic
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2004
    Messages
    5 463
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    �ge : 51
    Localisation : France, Yvelines (�le de France)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : High Tech - �diteur de logiciels

    Informations forums :
    Inscription : Ao�t 2004
    Messages : 5 463
    Par d�faut
    Citation Envoy� par Kerod Voir le message
    A vrai dire voil� une partie de mon code :
    Plus que du code, c'est de contexte d'utilisation dont j'ai besoin. A quoi sert ce code ?
    Si c'est pour faire de la simulation num�rique de mod�le physique, en quoi une impr�cision de 10e-8 est-elle g�nante (et si c'est le cas, pourquoi ne pas calculer en double ? Quand je vois float dans un programme, je me m�fie) ?
    Si c'est pour faire de la comptabilit�, il ne faut pas utiliser les virgules flottantes, car ce domaine a ses propres r�gles d'arrondi (par pays ?) qu'on est tenu de pr�ciser.
    Si c'est pour faire des maths niveau coll�ge, peut-�tre se faire une classe de nombre en base 10 est-elle la solution.
    Si c'est pour faire des maths niveau recherche, peut-�tre une classe � pr�cision infinie (ou du moins r�glable) est-elle la solution.
    Si c'est un probl�me d'affichage moche � l'�cran, peut-�tre baisser la pr�cision de l'affichage est la solution.
    Si c'est pour faire...

    Citation Envoy� par Kerod Voir le message
    C'est la premi�re fois que je vois un tel probl�me et pourtant les langages j'en ai utilis� pas mal
    Mais as-tu fait du calcul num�rique avec ces langages ? Certains proposent des classes pour g�rer des nombres � plus forte pr�cision, au prix d'un temps de calcul qui s'�croule, mais ce n'est pas le mode classique.

    Citation Envoy� par Kerod Voir le message
    faire ceci ne va pas me renvoyer un entier ? En tout cas c'est ce qui me semble et c'est pas ce que je veux
    La diff�rence de floats est un float. La valeur absolue d'un float est un float, donc non.

    Si tu veux convertir en entier, par d�faut, c'est un cast qu'il te faut :
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    int i = static_cast<int>(f3-1.0);
    Mais encore une fois, sans comprendre la probl�matique, difficile d'en dire plus...
    Ma session aux Microsoft TechDays 2013 : D�velopper en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage � la d�couverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'h�sitez pas � me contacter.

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. R�ponses: 13
    Dernier message: 01/06/2011, 15h58
  2. [W3C] R�sultats diff�rents avec IE ou FF
    Par Linoa dans le forum Balisage (X)HTML et validation W3C
    R�ponses: 3
    Dernier message: 17/11/2005, 13h45
  3. R�sultats diff�rent entre une requ�te SQL, et la m�me en VBA
    Par thetaps dans le forum Requ�tes et SQL.
    R�ponses: 3
    Dernier message: 23/09/2005, 12h05
  4. Encode - Decode : probleme, r�sultats diff�rent.
    Par barok dans le forum Administration
    R�ponses: 1
    Dernier message: 26/08/2005, 10h43
  5. R�ponses: 15
    Dernier message: 21/01/2005, 03h25

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