Climber писал(а):2. Если дело в этих трех операциях, тогда время выполнения кода на С должно быть 0.12 минимум (при условии, что умножение примерно равно по сложности делению и намного сложнее сложения - на самом деле я вообще не знаток, как эти операции реализованы).
Чрезвычайно краткий ликбез по скорости выполнения операций

1) Операции типа сложения-вычитания, логических, одноразрядных сдвигов (так называемые простые операции) практически на всех машинах во все века выполнялись с максимально возможной скоростью (быстрей могли быть только операции пересылки и сравнения, и то обычно время было одинаковым). Можем условно принять время, затрачиваемое на выполнение подобных операций, за 1.
2) Операции умножения на основной массе ранних (с нынешней точки зрения) процессоров либо вообще не были реализованы (их приходилось выполнять с помощью подпрограммы -- скорость понятно какая), либо присутствовали, но сводились к цепочке сложений и одноразрядных сдвигов. Время их выполнения тогда обычно было не меньше, чем разрядность операндов. Правда, уже тогда были машины, где для умножения применялись более хитрые и быстрые алгоритмы. В наши же дни почти на всех процессорах умножение выполняется со скоростью, близкой к сложению. Например, на 8-разрядных микроконтроллерах ATmega сложение и большинство других операций выполняются за 1 такт, а умножение -- за 2 такта. Для процессоров ПК точно сказать сложно, ибо участвует много факторов (на самом деле все процессоры, начиная с первого пентиума, умели выполнять в определённых условиях несколько команд одновременно). Так что грубо можем считать, что для ПК скорость умножения не слишком меньше скорости простых операций.
3) А вот с операцией деления полная задница. В отличие от умножения, её невозможно ускорить алгоритмически, поскольку каждый следующий шаг зависит от результатов предыдущего. В результате самые что ни на есть навороченные процессоры современных компутеров по относительной скорости если и быстрей делят, то ненамного, чем компутеры 1950-х годов (прирост скорости обеспечивается главным образом за счёт ускорения и совмещения вспомогательных операций, а не за счёт собственно деления). В случае с 32-разрядным кодом можем грубо считать, что деление выполняется в 15-30 раз медленней, чем умножение. Именно поэтому многие компиляторы заменяют деление на константу цепочкой умножений, сложений, сдвигов и логических операций: команд больше, но скорость всё равно выше. К сожалению, заменить деление на переменную невозможно.