Arduino 为什么我偶尔会得到最大值?

Arduino 为什么我偶尔会得到最大值?,arduino,Arduino,我有一个连接到wemos d1 mini的加速计,当我试图计算震级时,偶尔会有2^31。 这是什么原因造成的?我如何修复它? 谢谢大家! int avgAcX = totalAcX/count; int avgAcY = totalAcY/count; int avgAcZ = totalAcZ/count; int oldAvgAcXYZ = sqrt(avgAcX*avgAcX + avgAcY*avgAcY + avgAcZ*avgAcZ); 您检查过结果是否正确了吗?它

我有一个连接到wemos d1 mini的加速计,当我试图计算震级时,偶尔会有2^31。 这是什么原因造成的?我如何修复它? 谢谢大家!

  int avgAcX = totalAcX/count;
  int avgAcY = totalAcY/count;
  int avgAcZ = totalAcZ/count;
  int oldAvgAcXYZ = sqrt(avgAcX*avgAcX + avgAcY*avgAcY + avgAcZ*avgAcZ);

您检查过结果是否正确了吗?它们太小了,不适合那个值

我可以从现场看出,它无法与int32_t类型匹配:

hex(17510*17510 + 64370*64370 + 58803*58803) = 0x1D758D291  (int32_t = 0xD758D291 which is negative)
   correct value: 88926

hex(17510*17510 + 64370*64370 + 65803*65803) = 0x20B562DE1  (int32_t = 0x0B562DE1 eg positive)
   correct value: 93702  (yours are around 11000)

因为sqrt只为正数和零定义,所以它返回一个浮点值,转换为int32…

在某些情况下,在sqrt表达式中,您将两个值相乘,每个值都大于2^16,因此乘积溢出。在相乘之前,您可能需要缩小它们的比例或使它们浮动。我怎么没有看到这个。。。我只是将这些值除以10,虽然它会降低一些分辨率,但它已经足够好了,并且是固定的