Pergunta : Certificado do Perl que toma demasiado por muito tempo

Eu tenho um certificado que faça muita classificação baseada “em uma média movente simples” que seja baseada por sua vez em 100 das disposições. O programa está gastando muito tempo a execução da matemática. Eu devo apressá-lo acima. Está aqui o código:
------------------CANO PRINCIPAL do
package;
use estrito;

sub simple_moving_avg;

my $length_of_sma = 4;

my @price_array = qw/
11.3
11.25
11.82
11.64
11.19
11.48
11.37
10.84
10.51
10.76
10.8
11.25
11.36
11.34
11.59
11.41
11.18
11.11
11.72
11.57
/;

foreach meu $i (@price_array) {cópia do
“mim: $i \ n”;
my do
} $sma = 0;
for (meu $count = 100000; >= 1 de $count; $count--) {# PNF 4 do
dos valores “$length_ma " $sma = simple_moving_avg (\ @price_array, $length_of_sma);
/>print “: $sma \ n”;
exit; simple_moving_avg do

sub {
meu $pointer_array = $_ [0];
meu $length_ma = $_ [1];
meu $sum = 0;
meus @tmp = @$pointer_array;
do
para (meu $count = $length_ma; >= 1 de $count; $count--) {
meu $value = PNF (@tmp);
se ($value definido) {
$sum = $value + $sum;
do
do
}} meu $ma = sprintf (“%.2f”, ($sum/$length_ma));
$ma do retorno;
do
}--------------------------o
Here é o resultado de funcionar DProf: tempo decorrido do

Total = 1.987965 tempo de Seconds
User+System = segundo de 2.194965 #Calls de Seconds
Exclusive Times
%Time ExclSec CumulS/chamada Csec/c Name
108. 2.377 2.377 100000 0.0000 0.0000 CANOS PRINCIPAIS:: simple_moving_avg
0.00 - -0.000 1 - - estrito:: cano principal do import
0.00 - -0.000 1 - -:: BEGIN
0.00 - -0.000 1 - - estrito:: CANO PRINCIPAL do bits
0.00 - -0.000 1 - -:: BEGIN
--------a pergunta do
My é: Pode esta sub-rotina do Perl ser melhorada upon (o ExclSec precisa de ser cortado pelo menos por 50%)? Eu sou incapaz de modificar a disposição que está sendo passada no submarino. Se o código não pode significativamente ser melhorado upon ele seria mais rápido chamar o programa da A.A. ++ (eu estou aprendendo C++) ou o ajuntador? Que esse código seria? Muitos thanks.
class= do

Resposta : Certificado do Perl que toma demasiado por muito tempo

simple_moving_avg secundário {
    meu ($pointer_array, $length_ma) =@_;
    meu $sum = 0;
    _ de $sum += $ para @ {$pointer_array} [0. $length_ma-1];
    sprintf do retorno " %.2f ", $sum/$length_ma;
}
Outras soluções  
 
programming4us programming4us