Comments 13
Теперь на 3ГГц на PHP :) это выполняется за 0.041секунды.
результаты других языков в студию!
результаты других языков в студию!
0
Java. Выполняется за 76 микросекунд на Core i5 3.4 GHz
Код
int cnt = 10000;
int top = 262144;
long time = System.currentTimeMillis();
for (int i = 0; i < cnt; i++) {
int delim = 1;
for (int j = 1; j < top; j++)
if (top % j == 0)
delim = j;
}
time = System.currentTimeMillis() - time;
System.out.println("Average execution time: " + ((float) time / cnt) + " ms");
Average execution time: 0.0766 ms
-1
А у вас оно точно что-то считало? Попробуйте результат каждой итерации сохранять куда-нибудь (например завести переменную, и на каждой итерации делать этой переменной += delim, и печатать «суммарное значение» в конце. А то похоже, что оно просто заоптимизировало цикл, т.к. результат вычисления все равно не используется.
Аналогичный код, но «сохранением результата», написанный на C, работает 1.4ms на Core 2 2.6GHz, а без печати результатов — 0.000ms. Как-то с трудом верится, что код на Java работает в 20 раз быстрее, не смотря на более мощный CPU.
P.S. Ваш код делает не совсем то, что делали авторы «малютки», там перебор шел в меньшую сторону. (Впрочем мой код — аналогично устроен, с которым я сравнивал, т.к. я допустил ту-же ошибку изначально).
Аналогичный код, но «сохранением результата», написанный на C, работает 1.4ms на Core 2 2.6GHz, а без печати результатов — 0.000ms. Как-то с трудом верится, что код на Java работает в 20 раз быстрее, не смотря на более мощный CPU.
P.S. Ваш код делает не совсем то, что делали авторы «малютки», там перебор шел в меньшую сторону. (Впрочем мой код — аналогично устроен, с которым я сравнивал, т.к. я допустил ту-же ошибку изначально).
+2
Да-да, поправил ошибки и добавил туда использования переменной. Результаты изменились, Вы правы, оптимизация цикла имела место быть. Новый код отрабатывает за 387 микросекунд, в пять раз дольше.
Новый код
int cnt = 10000;
int top = 262144;
long time = System.currentTimeMillis();
int uselessVar = 0;
for (int i = 0; i < cnt; i++) {
int delim = 1;
for (int j = top - 1; j > 0; j--)
if (top % j == 0) {
delim = j;
break;
}
uselessVar += delim;
}
time = System.currentTimeMillis() - time;
System.out.println("Value of useless var: " + uselessVar);
System.out.println("Average execution time: " + ((float) time / cnt) + " ms");
Value of useless var: 1310720000
Average execution time: 0.387 ms
0
JS 0.000608s
Код
131072
0.597
(function(){
var startDate = +new Date(), i, cnt, result;
for( cnt = 0; cnt < 1000; cnt++ )
for( i = 262144; --i;)
if( 262144 % i === 0 ){
result = i;
break;
}
console.log(result);
console.log((+new Date() - startDate)/cnt);
})();
131072
0.597
+2
SAS Base 0.0020 на Core i5 2.6 GHz
Код
data _null_;
format t 12.6;
t=time();
val=262146;
do i=val-1 to 1 by -1;
d=val/i;
if int(d) = d then
do;
t=time()-t;
put i= t=;
stop;
end;
end;
run;
format t 12.6;
t=time();
val=262146;
do i=val-1 to 1 by -1;
d=val/i;
if int(d) = d then
do;
t=time()-t;
put i= t=;
stop;
end;
end;
run;
0
С# Шел сверху вниз
const int top = 262144;
var start = DateTime.Now;
var answer = 0;
for (var i = 262143; i > 1; i--)
{
if (top%i != 0) continue;
answer = i;
break;
}
var time = DateTime.Now — start;
Console.WriteLine(«Average execution time: » + time + " Answer: " + answer);
«Average execution time: 00:00:00.0019992 Answer: 131072»
AMD FX 4100 Quad Core 4.62 Ghz
Сори, теги не работают.
const int top = 262144;
var start = DateTime.Now;
var answer = 0;
for (var i = 262143; i > 1; i--)
{
if (top%i != 0) continue;
answer = i;
break;
}
var time = DateTime.Now — start;
Console.WriteLine(«Average execution time: » + time + " Answer: " + answer);
«Average execution time: 00:00:00.0019992 Answer: 131072»
AMD FX 4100 Quad Core 4.62 Ghz
Сори, теги не работают.
0
Haskell, запускалось на ветеране Athlon XP 3000+
Время выполнения замерялось утилитой time:
%time ./test2
131072
0.046u 0.005s 0:00.06 66.6% 987+5901k 0+0io 0pf+0w
module Main where
top = 262144
main = putStrLn $ show $ findDelim top (top - 1)
findDelim num delim
| (mod num delim) == 0 = delim
| otherwise = findDelim num (delim - 1)
Время выполнения замерялось утилитой time:
%time ./test2
131072
0.046u 0.005s 0:00.06 66.6% 987+5901k 0+0io 0pf+0w
+1
Вот и я говорю — уж почти век прошел а нихрена нового в компах нет. Ну чуть быстрее считает, а толку то.
+3
А вот память на электронно-лучевых трубках — это нечто. Спасибо за инфу, впечатлился.
А теперь, внимание! DVD-Ram, DVD-RW...BlueRay… итп :)
И на засыпку — плотность записи зависит от ширины пучка и предела до которого его можно сфокусировать. Уже тогда были зачатки технологии, которую сейчас(кроме flash итп) пытаемся вывести в лидирующие… О как.
А теперь, внимание! DVD-Ram, DVD-RW...BlueRay… итп :)
И на засыпку — плотность записи зависит от ширины пучка и предела до которого его можно сфокусировать. Уже тогда были зачатки технологии, которую сейчас(кроме flash итп) пытаемся вывести в лидирующие… О как.
0
благодаря ссылкам автора завис, как всегда, в вики на полтора часа, добрался до второй мировой и атомных бомб)
+3
Sign up to leave a comment.
Манчестерской малой экспериментальной машине — 65 лет