1

関数を呼び出すときに問題がありmodます。2 次元ベクトルである変数 M があります。を印刷するとM、 が表示されますM = [350,240.00]

ここに問題があります。入力すると、どちらが適切であるかがmod(M(1),10)得られますが、入力すると得られます。010mod(M(2),10)

誰かがこの種の問題に遭遇したことがあるかどうか、またはアイデアを持っているかどうかはわかりません。

4

2 に答える 2

0

浮動小数点数が の倍数であるかどうかを確認しようとしている場合は、使用10する精度を選択する必要があります。たとえば、?240.000000000000000000000000000000000001の倍数10ですか? それはおそらくあなたの場合に当てはまるはずです。浮動小数点数は内部で 2 進数で格納されているため、常に 10 進数形式で正確に表現できるとは限らないため、注意が必要です。たとえば0.1、10 進数ではかなり正確に見えます。次のような0:0.1:100ことをすると、その系列のいくつかの数値が で完全に割り切れると予想され10ます。ただし0.1、バイナリでは0.0001100110011001100...まったく必要であり、コンピューターによってわずかな精度で切り捨てられます。それらをすべて追加し始めると、これらの小さな切り捨てエラーが複合し、次のようなものを保存する可能性があります10.00000000000000000008989883完全な 10 の代わりに。そのため、使用する最小精度を選択し、それ以下のエラーは無視する必要があります。

ある程度の精度に丸めてから、そこから倍数を確認することをお勧めします。

p = 1e8 %//Check to 8 decimal points
mod(floor(M(2)*p), 10*p)
于 2013-10-16T07:45:58.837 に答える