Arduino双减法错误地返回0

时间:2017-01-26 00:59:29

标签: c++ arduino double

我有一个函数,它将参数设置为double并对其进行减法运算。但是当某个参数之一因为某种原因而为0时,我得到0的结果。

int calcPID(double current, double desired, double k){

  double diff;

  diff = desired - current;

  Serial.print("desired = ");
  Serial.print(desired);
  Serial.print(" ,current = ");
  Serial.print(current);
  Serial.print(",diff = ");
  Serial.println(diff);

  int r = (int)diff;
  return r;
}

输出

desired = 250.00 ,current = 1.69,diff = 248.31
desired = 250.00 ,current = 0.00,diff = 0.00

当电流为0.00时,结果(差异)也是0.00,当它应该是250时。有人可以告诉我发生了什么吗?

编辑:

发现我得到的垃圾值当前某种程度上并不是一个双倍(如果条件是当前> 1并且当前< = 1并且它们都不是真的我写了2)。

2 个答案:

答案 0 :(得分:1)

这确实很奇怪。

我建议创建一个像这样的第二个最小函数:

int calcPID2(double current, double desired){

    Serial.println(desired - current);

    return(1);
}

然后逐渐将其更改为原始版本,并查看其出错的位置(如果出错了..)。

过去我的Arduino软件也有一些奇怪的东西。也许你应该检查一下你是否有最新的版本。

您可能还想检查是否没有内存或堆栈问题(即如果剩余的可用内存不足)。

答案 1 :(得分:0)

我认为这与浮点计算有关。看看这个:https://www.arduino.cc/en/Reference/Float或google它,你会找到相当不错的答案:)