2017-12-05 5 views
-1

を作るとき:Matlabの丸め演算エラーMatlabの2014bの下

round((0.1:0.2:1)/0.2) 

は私が取得:

1 2 3 3 5 

代わりに、このような奇妙な計算を修正する方法はあり

1 2 3 4 5 

の?なぜこれが起こるのですか?なぜそんなに変だ?これは、 n=0.2だけでなく、他の値に対しても繰り返されます。

EDIT:ceilを使用するとシナリオが変更されるため、浮動小数点しきい値は半整数(0.5、1.5、2.5)ではなく整数(1.0,2.0,3.0)になりますか? singleのような表現を使用するとどうなりますか?それとも他の予測可能なものか?

+3

'round((0.1:0.2 + eps:1)./ 0.2)' – bla

+1

浮動小数点精度を利用する... – bla

+0

['ceil'](https://www.mathworks.com) /help/matlab/ref/ceil.html)を 'round'の代わりに使用します。 – gnovice

答えて

1

質問が再開されたので、浮動小数点数を使って1.3 + 0.2を追加すると2.49999999999または2.5000000001などになることを簡単に言及します。roundは浮動小数点エラーに従って動作します。

+0

'ceil'はエラーを修正しましたが、これは明らかですか? 'ceil'が失敗した場合は見つかりません... – hyprfrcb