函数内外相同操作结果不同
Different results of the same operation inside and outside function
在 loop()
循环中,我使用以下代码从模拟输入中获取值(效果很好):
int temperatura = (int) odczytajTemperature();
函数odczytajTemperature()
:
float odczytajTemperature(){
return ((analogRead(termometr)*5/1024.0) - 0.5) / 0.01;
}
...但是当我尝试避免使用此函数时,我只是直接在 loop()
中计算值(如下所示),我得到随机值。
int temperatura = (int) ((analogRead(termometr)*5/1024.0) - 0.5) / 0.01;
这两段代码之间的实际区别是什么?为什么整个程序的总大小对于无功能版本要大 2 个字节?它不应该更轻吗?
转换为 (int) 时出现问题。
你的函数 odczytajTemperature() returns 一个浮点数,所有的算术都是作为浮点数完成的,这很好。
但是当你这样做的时候
int temperatura = (int) ((analogRead(termometr)*5/1024.0) - 0.5) / 0.01;
您正在将第一部分转换为 int
(int) ((analogRead(termometr)*5/1024.0) - 0.5)
然后将您的整数除以 0.01。有时这可能是一件有效的事情,但它与 odczytajTemperature() 所做的不同。
这是 odczytajTemperature() 的忠实替代品:
int temperatura = (int) (((analogRead(termometr)*5/1024.0) - 0.5) / 0.01);
在 loop()
循环中,我使用以下代码从模拟输入中获取值(效果很好):
int temperatura = (int) odczytajTemperature();
函数odczytajTemperature()
:
float odczytajTemperature(){
return ((analogRead(termometr)*5/1024.0) - 0.5) / 0.01;
}
...但是当我尝试避免使用此函数时,我只是直接在 loop()
中计算值(如下所示),我得到随机值。
int temperatura = (int) ((analogRead(termometr)*5/1024.0) - 0.5) / 0.01;
这两段代码之间的实际区别是什么?为什么整个程序的总大小对于无功能版本要大 2 个字节?它不应该更轻吗?
转换为 (int) 时出现问题。
你的函数 odczytajTemperature() returns 一个浮点数,所有的算术都是作为浮点数完成的,这很好。
但是当你这样做的时候
int temperatura = (int) ((analogRead(termometr)*5/1024.0) - 0.5) / 0.01;
您正在将第一部分转换为 int
(int) ((analogRead(termometr)*5/1024.0) - 0.5)
然后将您的整数除以 0.01。有时这可能是一件有效的事情,但它与 odczytajTemperature() 所做的不同。
这是 odczytajTemperature() 的忠实替代品:
int temperatura = (int) (((analogRead(termometr)*5/1024.0) - 0.5) / 0.01);