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

MATLAB Discussion :

Petit problème de quantité infinitésimale qui s'invite toute seule


Sujet :

MATLAB

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1
    Par défaut Petit problème de quantité infinitésimale qui s'invite toute seule
    Salut à vous tous! Et enchanté, je suis tout nouveau sur le forum!
    Ce qui m'amène sur le forum, probablement plus que pour cet échange, c'est un petit problème qui semble rien comme ça mais qui me bloque complètement dans mon travail:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    >> 1 - 0.8 - 0.2
     
    ans =
     
      -5.5511e-17
    Au lieu de me sortir 0 comme résultat, cette opération très simple me renvoie ce petit chiffre qui m'ennuie beaucoup.
    Savez vous d'où vient ce chiffre et comment je pourrais retrouver un beau "0"?
    Je précise que pour toutes les opérations avec des nombres décimaux (à virgule, ou plutôt avec un point dans Matlab) me sortent des résultats avec une quantité infinitésimale en plus ou en moins.
    Merci pour votre aide!
    Piero le fou

  2. #2
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Il n'y a aucun problème ici. Le résultat est conforme à la norme IEEE 754 à partir de la laquelle MATLAB gère les valeurs réelles.

    => : Pourquoi 0.3-0.2-0.1 est-il différent de 0 ?

  3. #3
    Membre émérite
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Billets dans le blog
    1
    Par défaut
    Ca a beau être dans la norme IEEE 754, je confirme que c'est ausssi dans la norme "emmerdement maximum" mais c'est pas trop difficile à gérer.

    Il y a deux options :
    * soit tu arrondis les valeurs pour retrouver la précision que tu connais sur tes données
    * soit quand tu fais des tests, tu prends en compte que tu ne peux pas tester des égalités parfaites mais des intervalles.

    option 1 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    precision = 10^12 ;
    X = round(X .* precision) ./ precision ;
    option 2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    % au lieu de :
    if X==k
    ...
    end
     
    % préférer :
    epsilon = 10^-12 ;
    if abs(X - k) <= epsilon 
    ...
    end

  4. #4
    Rédacteur

    Homme Profil pro
    Comme retraité, des masses
    Inscrit en
    Avril 2007
    Messages
    2 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : Suisse

    Informations professionnelles :
    Activité : Comme retraité, des masses
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Par défaut
    Salut!
    C'est clair que si on t'avait offert un ordinateur sur lequel le processeur travaille avec des mots comportant une infinité de bits, le problème ne se poserait pas.
    Jean-Marc Blanc

  5. #5
    Membre émérite
    Avatar de ol9245
    Homme Profil pro
    Chercheur
    Inscrit en
    Avril 2007
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chercheur

    Informations forums :
    Inscription : Avril 2007
    Messages : 985
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par FR119492 Voir le message
    Salut!
    C'est clair que si on t'avait offert un ordinateur sur lequel le processeur travaille avec des mots comportant une infinité de bits, le problème ne se poserait pas.
    Jean-Marc Blanc
    ou qui fait du calcul formel
    (mais là on digresse hein )

Discussions similaires

  1. Problème liste qui se modifie "toute seule"
    Par Paul_05 dans le forum Général Python
    Réponses: 18
    Dernier message: 06/04/2015, 19h05
  2. Réponses: 13
    Dernier message: 11/06/2010, 23h21
  3. Réponses: 15
    Dernier message: 31/01/2007, 22h03
  4. [ContrôleBD] DBCtrlGrid qui se redimensionne tout seul !
    Par LadyWasky dans le forum Composants VCL
    Réponses: 8
    Dernier message: 01/07/2004, 23h08
  5. TCanvas et handle qui se désalloue tout seul
    Par efourmon dans le forum Langage
    Réponses: 3
    Dernier message: 14/01/2004, 11h07

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