You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

do while循环判断测量值稳定时异常提前跳出问题求助

问题根因与修复方案
  • 核心故障是while条件的逻辑运算符使用错误:你当前写的&&逻辑要求两个差值mess.x2 - mess.Acal[mess.j][0] >= 0.000001和mess.Acal[mess.j][0] - mess.x2 >=0.000001同时成立,这两个表达式互为相反数,不可能同时大于等于正数0.000001,所以while条件永远为假,do-while循环只会执行一次就直接跳出,和你两次采样的实际差值没有任何关系。
  • 正确的写法有两种可选:
    1. 把逻辑与&&改成逻辑或||,只要任意一个差值大于等于阈值,就说明两次采样差超过阈值,需要继续循环:
    do {
      mess.Acal[mess.j][0] = analoginput();
      HAL_Delay(100);
      mess.x2 = analoginput();
    } while (mess.x2 - mess.Acal[mess.j][0] >= 0.000001 || mess.Acal[mess.j][0] - mess.x2 >=0.000001 );
    
    1. 更简洁直观的写法,调用fabs()函数求两次采样差值的绝对值再和阈值比较:
    #include <math.h> // 需引入math头文件使用fabs函数
    do {
      mess.Acal[mess.j][0] = analoginput();
      HAL_Delay(100);
      mess.x2 = analoginput();
    } while (fabs(mess.x2 - mess.Acal[mess.j][0]) >= 0.000001);
    
  • 关于你提到的极小数值运算精度问题:你当前用到的1e-6阈值远高于double类型的最小精度范围,这个场景下不存在减法运算的精度误差问题,故障完全是逻辑写法错误导致的。

内容的提问来源于stack exchange,提问作者Marc Hammer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 01:27:04