函数内外相同操作结果不同

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);