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);
解决方案
你检查过结果是否正确吗?它们对于那个值来说太小了
我可以从现场看到它不适合 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 ...
推荐阅读
- apache-pulsar - 消费者只收到发布到主题的消息的 50%
- javascript - 无法在 expressjs 中使用 node-html-parser 在字符串上创建属性“parentNode”
- java - 为什么动态方法调度不适用于属性?
- python - 大型数据集上的 np_expand 和 np.concatenate
- r - 如何重新编码r中行中的重复,三重或更多元素
- linux - 为什么pcie上的MMIO需要中断?
- jmespath - JMESPath:条件字符串替换
- c# - 为什么托管服务需要其依赖服务为 AddScoped()?
- django - 自定义模板过滤器和查询
- angular - 重新渲染后如何设置列标题的名称?