Цитата(ukpyr @ Apr 26 2011, 16:07)

n = n1 * 65536 + n2; // представляем как 2 16-битных
n/10 = (n1 * 65536)/10 + (n2 / 10) = (n1 * 32768)/5 + (n2 >> 1)/5 = (n1 / 5) << 15 + (n2 >> 1)/5
деление на 5 16-битного целого можно сделать так: (((U32)data * 0x3333) + 0x3333) >> 16
Спасибо за гениальную

идею поделить сначала на 2

а уже потом на 5,
а то у меня никак разрядности не хватало.
Если нигде не ошибся то код для деления на 10 такой:
Код
DWORD N = ...; // делимое
DWORD result;
N >>= 1;
result = (((N >> 16) + 1) * 0x3333) & 0xFFFF0000;
result |= ((N - result * 5 + 1) * 0x3333) >> 16;
итого примерно 100 тактов против 600 у обычного деления.
Теперь нужно /100 , хотя конечно можно 2 раза поделить на 5...