C函数中的算术错误

时间:2014-11-30 15:48:46

标签: c

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)

2 个答案:

答案 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 ;
}