>>x = linspace(-0.1,0.1,5);
>>x
x =
-0.1000 -0.0500 0 0.0500 0.1000
>> x(4) - 0.05
ans =
1.3878e-017
>> ??? Pourquoi n'obtient on pas 0???
Je suis sous WindowsXP avec Matlab v7 (R14)
Merci de me répondre!
>>x = linspace(-0.1,0.1,5);
>>x
x =
-0.1000 -0.0500 0 0.0500 0.1000
>> x(4) - 0.05
ans =
1.3878e-017
>> ??? Pourquoi n'obtient on pas 0???
Je suis sous WindowsXP avec Matlab v7 (R14)
Merci de me répondre!
Bonjour,
c'est une tres bonne remarque. j'ai tapé open linspace pour voir comment ca fonctionne, et j'ai fait des petits testes de calcul pour localiser la source d'erreur, et j'ai realisé que ca vient de l'operation * (produit)
par ex :
et j'ai remarqué que ce n'est pas pour tout les entiers c.à.d le probleme apparait avec quelque entier tel que:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 >> x=3*.1 x = 0.3000 >> x-0.3000 ans = 5.5511e-017 >>
malgré ca marche avec 11 et 13. ben..c'est là ma limite
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6x=3*.1; x=7*.1; x=17*.1; x=19*.1; ....
MATLAB 7.4 (R2007a) WIN XP SP2
-------------------------------------
Bonjour,Envoyé par raphael_barry
c'est le problème numéro 1 en calcul informatique :
la précision des nombres à virgule flottante
http://fr.wikipedia.org/wiki/Nombre_flottant
Sous Matlab, il est très facile de s'en apercevoir :
Il n'existe malheureusement aucune solution infaillible.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 a=0:.1:1; sprintf('%f\n',a) % Ici tout va bien sprintf('%.20f\n',a) % Alors qu'ici !
Il faut juste être au courant de cette limitation et trouver des solutions adéquates pour chaque cas.
Bienvenu dans le monde de l'imprécision.
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)
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager