【MATLAB】解决mod函数、逻辑判断的误差问题
问题描述
希望当时间t为T的整数倍时,输出1,其他时刻输出0。理论上,用mod(t,T)==0即可,但t是很小的数,T也是很小的数,在mod时会产生误差。
问题解决
时间t在递增时,不知道什么原因产生了误差
- 理论值:1e-7,2e-7,3e-7……;
- 实际值:1e-7,2e-7,2.9999e-7……
最后,用mod(2.9999e-7,1e-7)会得到0.999e-7。
可以用round函数,进行四舍五入
abs(t-T*round(t/T))<1e-8
解释:
- 当t=2.9999e-7,T=1e-7时,t/T=2.9999,round(t/T)=3
- T*round(t/T)=3e-7,也就是理论值
- abs(t-T*round(t/T))=0.0001e-7,用实际值-理论值再取绝对值,就是误差
- 当误差小于某个值时,认为理论值=实际值,即可输出1。因此1e-8就是误差线,可以灵活调整。