関数を呼び出すときに問題がありmod
ます。2 次元ベクトルである変数 M があります。を印刷するとM
、 が表示されますM = [350,240.00]
。
ここに問題があります。入力すると、どちらが適切であるかがmod(M(1),10)
得られますが、入力すると得られます。0
10
mod(M(2),10)
誰かがこの種の問題に遭遇したことがあるかどうか、またはアイデアを持っているかどうかはわかりません。
浮動小数点数が の倍数であるかどうかを確認しようとしている場合は、使用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)