1

调用mod函数时出现问题。我有一个变量 M,它是一个二维向量。当我打印M时,我看到了M = [350,240.00]

问题是:当我输入时mod(M(1),10),我得到0了这很好,10但当我输入时我得到了mod(M(2),10)

我不知道是否有人遇到过这种问题或有想法。

4

2 回答 2

2

Documentation of the mod function says that it "[...]is written such that the correct modulus is returned for integer types."

Therefore you should cast the value to an integer before applying mod, for example:

>> M = int64(M)

now

>> mod(M(2),10)

will give you correct answer, 0.

于 2013-10-15T17:31:19.943 回答
0

如果您尝试检查浮点数是否是 的倍数,10那么您需要选择要使用的精度。例如是240.000000000000000000000000000000000001的倍数10?它可能应该适合你的情况。您需要小心,因为您的计算机不能总是以十进制格式准确表示浮点数,因为它在内部以二进制形式存储。例如0.1,十进制看起来非常精确,如果我做类似的事情,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 回答