質問

私は、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))

そして、あなたはどのようなエラーではないでしょうが、あなたの計算が非常に遅くなります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top