我正在为我正在研究的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的结果。
答案 0 :(得分:3)
取决于您所使用的板卡,size of an int将是两个或四个字节。
将两个2字节整数相乘会产生另一个2字节整数,如果超出范围,则overflows;这就是您所看到的行为。
答案 1 :(得分:2)
int
类型最多可以容纳数字。
在您的情况下,似乎是2 ^ 16 = 65536个数字,这意味着您可以在[-32,768,32,767]范围内使用数字。
您可以使用long
类型来解决此问题。
快速注释:
short
= 2字节
long
= 4字节
int
= 2字节或4字节(取决于架构)
感谢ChiefTwoPencils指出歧义!