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 :

Nombre de chiffres affichés


Sujet :

MATLAB

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 46
    Points
    46
    Par défaut Nombre de chiffres affichés
    Bonjour,
    Matlab affiche 5 chiffres par défaut pour chaque résultat. Je peux en avoir 16 en tapant "format long" mais j'en voudrais beaucoup plus (Maple le permet). Est-ce possible ?
    Merci.

  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 : 53 166
    Points
    53 166
    Par défaut
    Par défaut, MATLAB effectue les calculs en virgules flottantes sur 64bits par défaut.

    Ce qui donne une précision de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >> eps
     
    ans =
     
      2.2204e-016
    donc :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >> fprintf('%.50f\n',pi)
    3.14159265358979310000000000000000000000000000000000
    Je te laisse y réfléchir.

    Je ne suis pas un grand spécialiste de ce type de calcul, mais connaissant l'auteur de la contribution, je ne peux que te conseiller d'étudier ceci : HPF - a big decimal class by John D'Errico

    Very often I see people asking for a tool that offers more than 16 digits or so of accuracy. MATLAB itself only allows you to use doubles or singles in standard arithmetic, so that is the normal limit. The fact is, most of the time, if you can't do it with a double, you are doing something wrong. Good practices of numerical analysis are worth far more than any high precision tool. Even so, there are times when you will have a use for a bit of extra precision.
    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 du Club
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 46
    Points
    46
    Par défaut
    Le problème c'est que ce n'est pas précis après 16 décimales. Pi ne s'écrit pas avec tous ces zéros.

  4. #4
    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 : 53 166
    Points
    53 166
    Par défaut
    Citation Envoyé par binome-x Voir le message
    Pi ne s'écrit pas avec tous ces zéros.
    Sans rire

    Tu devrais mieux lire mon précédent message surtout dans son intégralité
    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)

  5. #5
    Membre du Club
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 46
    Points
    46
    Par défaut
    Ben oui je vois bien mais ya pas moyen d'augmenter cette précision ?
    Il faut que j'utilise un autre logiciel, genre Maple ?

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 37
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    C'est surprenant que tu aies besoin de plus de 16 chiffres après la virgule de précision !
    Es-tu sûr de ne pas pouvoir optimiser ton code, càd limiter le nombre d'opérations pour arriver au résultat ?

    Edit: en fait ça rejoint le commentaire de Dut. La première question à se poser, c'est pourquoi tu as besoin d'augmenter ta précision. Est-ce parce que tes calculs la dégradent, ou bien parce que ton résultat final doit être à plus de 16 chiffres.

    Cdt,
    Lhermine

  7. #7
    Membre du Club
    Homme Profil pro
    Ingénieur/Chercheur
    Inscrit en
    Novembre 2007
    Messages
    122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur/Chercheur

    Informations forums :
    Inscription : Novembre 2007
    Messages : 122
    Points : 46
    Points
    46
    Par défaut
    Ah non, c'est pas après la virgule, il me faut tous les chiffres de 2^163, or ça se finit par pleins de zéros et c'est pas ça.

  8. #8
    FLB
    FLB est déconnecté
    Modérateur
    Avatar de FLB
    Homme Profil pro
    Ing. Aérospatiale
    Inscrit en
    Juin 2003
    Messages
    770
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ing. Aérospatiale
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juin 2003
    Messages : 770
    Points : 1 185
    Points
    1 185
    Par défaut
    Pour les calculs de grand nombre, soit tu trouves une bibliothèque qui sait gérer ces calculs soit tu ruses :
    2^163 possède log10(2^163)+1 chiffres, soit une 50aine.
    Tu commences par allouer un tableau de la taille qui va bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    resArray = zeros(1,50);
    Tu crées une fonction de somme de 2 tableaux de même dimensions
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    arr = sumArray(arr1,arr2)
      arr = arr1+arr2;
      % ajoute ici de quoi traiter le cas où le contenu de chaque cas de arr doit être < 10, et qui cascade les unités en dizaine etc
    end
    Ensuite tu crées une fonction récursive powerOfTwo(n) qui va calculer le nombre en question, en utilisant 2^N-1=somme(2^i, i:0->N-1).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    resArray  = powerOfTwo(n,resArray)
       if 1==n
         arr = zeros(size(resArray));
         arr(end) = 2;
         resArray = sumArray(arr,resArray);
      else
         for k = 1:n-1
            resArray = sumArray(resArray,powerOfTwo(k,resArray ))
         end
         arr = zeros(size(resArray));
         arr(end) = 1;
         resArray = sumArray(arr,resArray);
      end
    end
    powerOfTwo(163,resArray) devrais te renvoyer le tableau tant attendu de valeurs.

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/05/2012, 09h36
  2. Décomposer nombre en chiffres puis afficher images
    Par mikael2235 dans le forum Langage
    Réponses: 5
    Dernier message: 11/12/2011, 19h55
  3. forcer le nombre de chiffres à afficher
    Par vlebourl dans le forum R
    Réponses: 4
    Dernier message: 16/08/2011, 10h14
  4. arrondir un nombre à 2 chiffres après la virgule
    Par El Saigneur dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 01/02/2005, 08h36
  5. [MFC] Nombre de chiffres après la virgule
    Par karl3i dans le forum MFC
    Réponses: 3
    Dernier message: 27/01/2004, 13h04

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