繁体   English   中英

八度Mod功能和整数

[英]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.00000000000000000000000000000000000110的倍数吗? 这可能应该适合您的情况。 您需要小心,因为您的计算机不能始终以十进制格式精确表示浮点数,因为它在内部以二进制形式存储。 例如, 0.1十进制看起来非常精确,如果我做类似0:0.1:100那么您希望该系列中的一些数字可以被10整除。 但是,二进制文件中的0.10.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM