Использование деления, инкременты-декременты переменных когда можно подставить константу - отстой. Неудивительно что оно тормозит.
Сделай ещё чтобы оно выводило сколько тактов в среднем требуется для умножения, это интересно.
@engineer
>Использование деления
Компилятор переведет деление signed числа на 2^n в арифметические сдвиги. Использование ">>" применительно к signed типам - implementation defined http://stackoverflow.com/questions/4009885/arithmetic-bit-shift-on-a-signed-integer/4009922#4009922
>когда можно подставить константу
GCC так и делает. Он там много где подставляет константы, если вчитаться в ассемблерный выхлоп.
>Сделай ещё чтобы оно выводило сколько тактов в среднем требуется для умножения
Каким образом?
@j123123 Проведи 100000 операций, замерь время, подели на 100000, умножь на скорость CPU [такты\время]
>GCC так и делает.
Вот эти вот n++ n-- ? Подозрительно.
@engineer От того что я подставил константу, оно стало на 2 секунды быстрее работать, только и всего. Разница несущественна. Компилятору хватает мозгов использовать константы. Там в цикле оно делает кучу сравнений обычного умножения и сдвигового
http://ideone.com/zmAVpd с константами
time ./multiply2_upd_const; time ./multiply2_upd
0* 0
Done!
real 2m17.531s
user 2m17.174s
sys 0m0.272s
0* 0
Done!
real 2m19.608s
user 2m19.227s