[英]Octave mod function and integer
调用mod
函数时出现问题。 我有一个变量M,它是一个二维向量。 当我打印M
,我看到M = [350,240.00]
。
这是问题所在:当我键入mod(M(1),10)
,我得到0
很好,但是当我键入mod(M(2),10)
时得到10
。
我不知道是否有人遇到过这种问题或想法。
mod函数的文档说,它“被编写为针对整数类型返回正确的模数”。
因此,应在应用mod
之前将值转换为整数,例如:
>> M = int64(M)
现在
>> mod(M(2),10)
会给您正确答案,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)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.