乘法返回我不正确的值

时间:2018-06-27 23:50:47

标签: c++ arduino

我正在为我正在研究的Arduino项目编写一些代码,并且乘法运算返回的值不正确,我不知道为什么。

String calculateShutterSpeed(float fs, int i, int l){
float fstop = fs;
int iso = i;
int lux = l;
float c = 1.00;
float shutterspeedTop = 0;
double shutterspeedBottom = 0;

shutterspeedTop = pow(fs, 2)*c;
shutterspeedBottom = lux*iso;

shutterspeedBottom = shutterspeedBottom/shutterspeedTop;

给我错误的代码是我将勒克斯乘以iso的行,在某些情况下(数字较小),它可以正常工作,但是一旦我使用较大的数字,它就会开始给我错误的数字,例如勒克斯的4833和200的iso将给我-16440的结果。

2 个答案:

答案 0 :(得分:3)

取决于您所使用的板卡,size of an int将是两个或四个字节。

将两个2字节整数相乘会产生另一个2字节整数,如果超出范围,则overflows;这就是您所看到的行为。

您必须去long,或者也可能去double

答案 1 :(得分:2)

int类型最多可以容纳数字。 在您的情况下,似乎是2 ^ 16 = 65536个数字,这意味着您可以在[-32,768,32,767]范围内使用数字。 您可以使用long类型来解决此问题。

快速注释: short = 2字节 long = 4字节 int = 2字节或4字节(取决于架构)

感谢ChiefTwoPencils指出歧义!