Ответ: В общем это деление столбиком, что на бумажке делают.
В dsp есть, как правило, к-да, которая одну элементарную операцию такого деления делает (то, что внутри цикла).
В примере возвращается частное. Остаток, reminder, тоже вычисляется, а как его вытащить, решите сами.
Ограничения - старшие 16 разрядов делимого должны быть меньше, чем делитель. Иначе случится переполнение.
Да, и делимое и делитель положительные.
Т.к. у меня периодически возникают глюки при написании, то прощу прощения заранее, если что не так. По смыслу, по крайней мере,
все правильно :-)
int div3216(long dividend, int divisor)
{
int i;
int quotien,reminder;
long tmp;
for(i=0;i<16;i++)
{
tmp=dividend-(((long)divisor)<<16);
if(tmp>=0) dividend=((tmp<<1))+1L;
else dividend<<=1;
}
quotien=(int)(dividend&0xffffL);
dividend>>=16;
reminder=(int)(dividend&0xffffL);
return quotien;
}