3

for ループで反復変数の値をテストしようとしていますが、期待どおりの結果が得られないため、matlab の動作方法について何か誤解している、および/または恐ろしいことをしていると想定しています。違う....

x が 0.2 に達したときに、このコードの if ステートメントが true にならない理由を誰か説明できますか?:

start = -1;
stop = 1;
interval = 0.01;

for x = start:interval:stop
    if x == 0.20
        disp('it worked')
    end
end

しかし、このコードは true をテストします:

start = 0;
stop = 1;
interval = 0.01;

for x = start:interval:stop
    if x == 0.20
        disp('it worked')
    end
end

さまざまな開始値を試してみましたが、機能するかどうかはランダムに見えます..開始値を変更すると出力が変わるのはなぜですか?

テストした値を変更した場合 (つまり、0.2 から 0.8 など) にも同様の矛盾が見られます。

私は何が欠けていますか?

4

1 に答える 1

4

で浮動小数点数をテストしてい==ます。-1+120*.01==0.2浮動小数点表現では等しくないため、 は false で あることに注意してください。0.01*20==0.2たまたま真実です。代わりに、許容範囲を使用してif abs(x-0.20)<1e-10ください。

于 2013-03-20T03:11:10.953 に答える