MATLAB: comportement étrange de l’instruction if

Bonjour à tous, j’ai ce morceau de code
 
for r = 1:20
T0 = mod(r,round(1/0.05));
T1 = 0.05/(1-(0.05*T0));
[T1,r]
if T1 == 1
disp('Inside IF');
end
end
 
À r = 19, l’instruction if devrait s’exécuter et afficher le message, mais ce n’est pas le cas, des indices ??

Meilleure réponse

  • sifonctionne bien. Le problème est que vous vous attendez à ce que T1telle qu’elle est stockée dans l’ordinateur doit être exactementégal à un.
    Les ordinateurs ne peuvent pas stocker tous les nombres exactement, de la même manière qu’en décimal, vous ne pouvez pas écrire exactement tous les chiffres de 1/3 (0,3333333 … vous devrez vous arrêter quelque part, donc lorsque vous multipliez par 3, vous obtenez 0,999999 au lieu de 1 ).
    Vous ne pouvez pas comparer les nombres à virgule flottante provenant du calcul à l’aide de ==. Vous devez comparer la différence absolue entre le nombre et la valeur attendue à une valeur suffisamment petite pour votre application.
     

    if abs(T1 - 1) < 1e-8