8

私は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
4

4 に答える 4

11

つまり、切り捨てエラーです。

そうです、正確な算術ではcは1.0でなければなりません。ただし、remの引数でfloatを使用したため、floatとして答えが得られます。明らかに、bは正確には2ではありませんが、2.0です。これは、2に非常に近いdoubleであることを意味します。したがって、b / 2はdouble1.0になります。この場合、明らかにその値は1よりわずかに小さく、0は次のようになります。整数値。これを防ぎたい場合は、床と天井の両方を使用して、値を比較してください。

答えを整数に変換したい場合は、floorの代わりにroundを使用してください。

于 2009-06-26T06:31:35.327 に答える
6

行を追加する場合

d = b-a

あなたの例では、結果が表示されます

    d =

 -4.4409e-016

つまり、Matlabは、bについて2に近い数を計算しましたが、正確ではありません。これは、浮動小数点数を操作する際にかなり発生します。試す

help eps

詳細については。

于 2009-06-26T07:09:07.863 に答える
2

この種の数値問題は、 MATLABFAQでも扱われます。

于 2009-06-26T10:50:58.773 に答える
0

ええ、それは数値的な問題です。そのようなものは注意して使用する必要があります。正確な算術演算が必要な場合は、数値に「sym」を試してください。

b=rem(sym(7),sym(2.5))

そうすれば、そのようなエラーは発生しませんが、計算ははるかに遅くなります。

于 2012-03-30T12:12:30.647 に答える