NAN 结果 Arduino Uno [关闭]
Posted
技术标签:
【中文标题】NAN 结果 Arduino Uno [关闭]【英文标题】:NAN result Adruino Uno [closed] 【发布时间】:2021-01-29 16:02:54 【问题描述】:我正在尝试在 Arduino 中做一些数学运算,结果是 NaN:
int Count1=1;
int Count1=1;
int Count2=2;
float Total= 0;
float n1= Count1;
float n2= Count2;
void setup()
Serial.begin(9600);
void loop()
Total = ((n1 / n2)*-100);
Serial.print(Total);
结果:总计 = Nan。
你能帮我一些提示吗?
【问题讨论】:
【参考方案1】:很难说你得到了什么编译器(我不在 Arduino 框架中编码)但我看到了这一行的问题:
Total = ((n1 / n2)*-100);
其中n1=1, n2=2
是float
s,但-100
是整数,因此您的编译器很可能将计算转换为整数(1/2 = 0)
,然后再转换回float
,这很慢并四舍五入您想要的结果...有办法解决这个问题
使用浮点数来避免整数数学
Total = ((n1 / n2)*-100.0);
Total = ((n1 / n2)*-100.0f);
先乘以保持准确性
Total = (-100*n1)/n2;
但是这很可能仍然使用整数,所以小数点后没有数字。
我更喜欢使用 #1,因为您的输出也是 float
...
然而,所有这一切都会导致结果0
而不是NAN
,因此可能还有不同的问题,例如您的Serial.print(Total);
期望的数据类型是真的float
还是它的double
?
试试这个:
double x;
x=Total;
Serial.print(x);
如果有什么不同的话。无论如何,您的代码不是 MCVE,因为我没有看到 main
,因此您未共享的部分代码也可能存在问题。
Arduino 上的另一个常见问题是 RAM 内存不足,具体取决于您拥有的 MCU,我希望您有 1 或 2 KB 的 RAM,因此如果您的代码使用更多,您可以轻松覆盖部分变量(特别是如果您包含 ADAFRUIT SSD1306 LCD驱动程序单独占用略高于 1KByte 的 RAM)。
【讨论】:
在合规编译器中n1 / n2
如果两者都是浮点数,则必须作为浮点数完成。我怀疑 OP 实际上使用了 int
s 而不是发布的代码中的浮点数
@phuclv 不期望 MCU 上完全兼容的编译器(你不会相信他们特别是 GCC 的能力)和 ARDUINO 框架不使用 C/C++ 编译器它是一种不同的语言(非常相似但有语法差异)。但是我敢打赌,问题在于 RAM 不足或缺少代码(未共享)。以上是关于NAN 结果 Arduino Uno [关闭]的主要内容,如果未能解决你的问题,请参考以下文章