首页 > 解决方案 > 为什么我偶尔会获得最大值?

问题描述

我有一个连接到 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);

在此处输入图像描述

标签: arduino

解决方案


你检查过结果是否正确吗?它们对于那个值来说太小了

我可以从现场看到它不适合 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 只为正数和零定义,所以它返回 NaN 浮点值,转换为 int32 ...


推荐阅读