int getTempo()
{
int tempo;
//User can enter tempo in bpm
tempo = (aserveGetControl(07) / 127) * 250;
//equation to convert tempo in bpm to an integer in ms to use with aserveSleep
return ((1000/tempo) * 60);
}
程序没有通过此函数,得到以下错误: 线程1:EXC_ARITHMETIC(代码= EXC_I386_DIV,子代码= 0x0)
答案 0 :(得分:4)
如果我假设aserveGetControl
返回0到127之间的整数,tempo
将始终为零(除非aserveGetControl
正好返回127),因为您正在执行整数除法,将结果截断为整数部分。你应该在你的表达式中反转除法和乘法,并且随时准备处理aserveGetcontrol
可能返回0的事实。
答案 1 :(得分:0)
当你使用整数数学时,你应该在除法之前进行乘法。
示例1(截断为零)
(100 / 127) * 250
= (0) * 250
= 0
另一方面
(100 * 256) / 127
= 25600 / 127
= 201
示例2(精度损失)
(1000 / 27) * 60
= (370) * 60
= 2220
另一方面
(1000 * 60) / 27
= (60000) / 127
= 2222
试试这个:
int getTempo()
{
int tempo;
//User can enter tempo in bpm
tempo = (aserveGetControl(07) * 250) / 127;
//equation to convert tempo in bpm to an integer in ms to use with aserveSleep
return (60 * 1000) / tempo ;
}