MATLAB - フロア質問
-
20-08-2019 - |
質問
私は、MATLABの初心者です。ここに問題があります:
>> a = floor(7/2.5)
a =
2.00
>> b = rem(7,2.5)
b =
2.00
>> c = floor(b/2)
c =
0
cが右、1すべきですか?なぜそれが0 ???です。
B = 2が直接入力されたときに、次のようにこれは、異なる
>> b = 2
b =
2.00
>> c = floor(b/2)
c =
1.00
解決
二つの単語で:切り捨てエラー
そうだね、cが正確な演算で1.0でなければなりません。あなたはREMの引数にフロートを使用しかし、あなたはfloatとして答えを得ます。どうやら、bが正確に2ではありませんが、2.0、したがって、B / 2はあなたのように0を与えて、その値が1よりわずかに小さいどうやら、この場合には、二重の1.0となっ2.二重非常に近いことを意味しています整数値。あなたはこれを防ぎたい場合は、床と切り上げの両方を使用して、値を比較します。
あなたは、整数への答えを変換したい場合は、は、単に床の代わりにラウンド使用します。
他のヒント
あなたが行を追加する場合は、
d = b-a
あなたの例には、
の結果が表示されます d =
-4.4409e-016
の意味MATLABは近い数を計算し、ではなく、正確に、bについて2。これは、浮動小数点数での作業にかなりアップします。試してみてください。
help eps
詳細については、ます。
この種の
数値問題も<のhref =「http://matlabwiki.mathworks.com/MATLAB_FAQ#Why_is_0.3-0.2-0.1_not_equal_to_zero_.28or_similar.29.3F」のrel = "nofollowをnoreferrerで対処されています「> MATLABよくある質問の
うん、それは数値的な問題です。あなたは注意して、このようなものを使用する必要があります。あなたは、正確な計算をしたい場合は、例えば、あなたの番号は「SYM」を試してみてください。
b=rem(sym(7),sym(2.5))
そして、あなたはどのようなエラーではないでしょうが、あなたの計算が非常に遅くなります。
所属していません StackOverflow