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 :

Probleme de mantisse nombre flottant


Sujet :

MATLAB

  1. #1
    Membre habitué Avatar de abidineb
    Inscrit en
    Septembre 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 298
    Points : 132
    Points
    132
    Par défaut Probleme de mantisse nombre flottant
    Bonjour
    Je veut simplement savoir comment Matlab fait les calculs avec des nombres a virgule flottante, il prend combien de chiffre après la virgule, et comment peut on changez cela, c'est dire on veut que Matlab prend 16 chiffres après la virgule pour faire les opérations. merci, c'est très important.
    Cordialement

  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 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Alors... sous MATLAB, les valeurs réels sont codées selon le standard IEEE 754

    Pour le nombre de chiffres après la virgule, on peut dire approximativement 15 (voir la documentation de la fonction EPS)

    Cette précision n'est pas modifiable...

    Lire à ce sujet l'article de Cleve Moler => Floating points : IEEE Standard unifies arithmetic model

    Lire aussi dans la documentation de MATLAB => Numeric Classes
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  3. #3
    Membre habitué Avatar de abidineb
    Inscrit en
    Septembre 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 298
    Points : 132
    Points
    132
    Par défaut
    Merci beaucoup pour le lien,
    Je comprend pas pourquoi m =0.3000000200 dans Matlab, il m'ont déjà envoyé un lien dans ce forum, mais c'est quoi la cause réelle?
    Merci a l'avance.

  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 : 83
    Localisation : Suisse

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

    Informations forums :
    Inscription : Avril 2007
    Messages : 2 978
    Points : 5 179
    Points
    5 179
    Par défaut
    Salut!
    c'est quoi la cause réelle?
    C'est que ton processeur travaille avec un nombre fini de bits, et ça n'a rien à voir avec Matlab.
    Jean-Marc Blanc
    Calcul numérique de processus industriels
    Formation, conseil, développement

    Point n'est besoin d'espérer pour entreprendre, ni de réussir pour persévérer. (Guillaume le Taiseux)

  5. #5
    Membre habitué Avatar de abidineb
    Inscrit en
    Septembre 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 298
    Points : 132
    Points
    132
    Par défaut
    Bonsoir
    Oui, tout a fait mais cela arrive (nombre fini de bits) dans le cas des arrondis des chiffres. Je ne voit pourquoi Matlab ou plutôt mon processeur n'arrive pas afficher avec précision le chiffre m=0.3, il n'as pas besoin de beaucoup de bit, un seul chiffre significatif. Donc est ce que le probleme ne provient pas plutôt de Matlab??
    Cordialement

  6. #6
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 302
    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 302
    Points : 52 882
    Points
    52 882
    Par défaut
    Pour simplifier, ce qui suit s'éloigne légèrement du standard IEEE 754... mais pas trop quand même

    Je ne suis pas non plus un spécialiste du domaine donc mes explications ne seront peut être pas du goût des puristes

    Pour convertir la partie décimale d'un nombre réel du système décimal vers le système binaire, on multiplie la partie décimale par 2, on stocke la partie entière du résultat (0 ou 1) et on recommence en multipliant par 2 la partie décimale du résultat. On continue jusqu'à tomber sur 0. La valeur binaire est obtenue en juxtaposant les parties entières stockées à chaque itération (cette notation n'est pas normée je crois).

    Par exemple pour 0.25 :

    0.25x2 = 0.5 => partie entière 0 et partie décimale 0.5
    0.5x2 = 1 => partie entière 1 et partie décimale 0 => stop

    0.25 peut donc être écrit 0.01 en binaire
    Et la conversion binaire vers décimal donne bien 0x2⁰ + 0x2⁻¹ + 1x2⁻² = 0.25

    Appliquons la même méthode pour 0.3 :

    0.3x2 = 0.6 => partie entière 0 et partie décimale 0.6
    0.6x2 = 1.2 => partie entière 1 et partie décimale 0.2
    0.2x2 = 0.4 => partie entière 0 et partie décimale 0.4
    0.4x2 = 0.8 => partie entière 0 et partie décimale 0.8
    0.8x2 = 1.6 => partie entière 1 et partie décimale 0.6
    0.6x2 = 1.2 => partie entière 1 et partie décimale 0.2
    0.2x2 = 0.4 => ...

    Cette conversion n'a pas de fin

    Or comme l'a écrit Jean-Marc :
    Citation Envoyé par FR119492 Voir le message
    ton processeur travaille avec un nombre fini de bits
    Donc 0.3 ne pourra jamais être exactement stocké numériquement de cette façon.

    C'est exactement comme si on te demandait d'écrire le résultat exact de la division d'un nombre quelconque (non multiple de 7) par 7 sur une feuille de papier A4... c'est impossible car cette division est périodique (...142857...)

    Voila, j'espère ne pas avoir dit trop de bêtises
    Ingénieur indépendant en mécatronique - Conseil, conception et formation
    • Conception mécanique (Autodesk Fusion 360)
    • Impression 3D (Ultimaker)
    • Développement informatique (Python, MATLAB, C)
    • Programmation de microcontrôleur (Microchip PIC, ESP32, Raspberry Pi, Arduino…)

    « J'étais le meilleur ami que le vieux Jim avait au monde. Il fallait choisir. J'ai réfléchi un moment, puis je me suis dit : "Tant pis ! J'irai en enfer" » (Saint Huck)

  7. #7
    Membre habitué Avatar de abidineb
    Inscrit en
    Septembre 2008
    Messages
    298
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 298
    Points : 132
    Points
    132
    Par défaut
    Merci Beaucoup.
    Problème résolu.
    Cordialement

Discussions similaires

  1. [MySQL] Probleme avec les nombres flottants
    Par Seth77 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 04/07/2006, 10h20
  2. PHP & MySQL : Problème pour compter nombre de tuples ?
    Par ExSter dans le forum Requêtes
    Réponses: 6
    Dernier message: 09/05/2006, 23h03
  3. probleme Format de nombre
    Par Bason_sensei dans le forum C
    Réponses: 6
    Dernier message: 30/11/2005, 10h49
  4. nombres flottants arrondis aux 5 centimes
    Par nstubi dans le forum Langage
    Réponses: 3
    Dernier message: 17/09/2004, 09h02
  5. [Kylix] Probleme de nombre flottant!!
    Par yopziggy dans le forum EDI
    Réponses: 5
    Dernier message: 02/05/2002, 10h13

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