次のコードが実行されると、MATLAB は間違いを犯します。誰かがこれを確認できますか?
floor([0.1:0.1:2]/0.01)
では、129 はここで何をしているのですか??
ans = 10 20 30 40 50 60 70 80 90 100 110 120 129 140 150 160 170 180 190 200
これは、コロンで生成されたベクトルによる浮動小数点丸めエラーです。
ラスマンが言ったように、もしそうなら:
floor((0.1:0.1:2 + eps) / 0.01)
丸め誤差はありません。
ただし、コロン演算子の仕組みに基づいて、次のように同じ計算を行うことをお勧めします。
floor([(1:20)/10] / 0.01)
[編集:Rasmanのコメントに続いて、後者のアプローチは負の値でも機能することを追加しますが、追加eps
は時々失敗します]
要するに、丸め誤差を最小限に抑えるには、整数でコロン演算子を使用する方が良いということです。
おそらく浮動小数点計算を行っているため、不正確な値が 129.99999999999999... 130 ではなく、129 になります。
これは、配列の構築によってもたらされる丸め近似です。解決策は、eps を追加することです。
floor([0.1:0.1:2]/0.01+ eps([0.1:0.1:2]/0.01))