Код на F# выглядит следующим образом:
let x = [1..50];
let y = [100..-1..51];
let N = 1000000;
let f_mul x = List.map2 (fun x y -> x*y) x y |> ignore
let f_sub x = List.map2 (fun x y -> x - y) x y |> ignore
time (fun _ -> run f_mul y N)
time (fun _ -> run f_sub y N)
Сравниваются 2 арифметические операции. Собственно ничего интересного.let y = [100..-1..51];
let N = 1000000;
let f_mul x = List.map2 (fun x y -> x*y) x y |> ignore
let f_sub x = List.map2 (fun x y -> x - y) x y |> ignore
time (fun _ -> run f_mul y N)
time (fun _ -> run f_sub y N)
Для матлаба тоже ничего нового:
x = 1:50;
y = 100:-1:51;
f_mul = @(x,y)(x.*y);
f_sub = @(x,y)(x - y);
N = 10^6;
tic
for i=1:N
f_mul(x,y);
end
toc
tic
for i=1:N
f_sub(x,y);
end
toc
tic
for i=1:N
t = x .* y;
end
toc
tic
for i=1:N
t = x - y;
end
toc
А вот результаты уже интереснее:y = 100:-1:51;
f_mul = @(x,y)(x.*y);
f_sub = @(x,y)(x - y);
N = 10^6;
tic
for i=1:N
f_mul(x,y);
end
toc
tic
for i=1:N
f_sub(x,y);
end
toc
tic
for i=1:N
t = x .* y;
end
toc
tic
for i=1:N
t = x - y;
end
toc
F#:
2.72
2.65
Matlab:
5.967140 seconds.
5.990907 seconds.
0.385303 seconds.
0.372440 seconds.
Видно, насколько влияет использование указателей на функции. Так что злоупотреблять этим не стоит.
Ну а то, что F# оказался где-то посередине, это вполне очевидно. Матрицы для матлаба - все. Так что тягаться с ним бесполезно. Зато вот в другом плане... В общем все скоро будет)
ЗЫ: нашел много интересных ссылок по F#. Так что как их разгребу - опубликую. Думаю будет очень полезно. Хотя кто ищет - тот всегда найдет;)...
Комментариев нет:
Отправить комментарий