Question : Manuscrit de Perl prenant trop longtemps

J'ai un manuscrit qui fait beaucoup de tri basé sur « une moyenne mobile simple » qui alternativement est basée sur 100 de rangées. Le programme dépense exécuter beaucoup de temps les maths. Je dois l'accélérer. Voici le code :
------------------FORCE du
package ;
use strict ;

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 mon $i (@price_array) {copie de
« je : $i \ n » ;
my du
} $sma = 0 ;
for (mon $count = 100000 ; >= 1 de $count ; $count--) {# bruits 4
de valeurs de « $length_ma " $sma = simple_moving_avg (\ @price_array, $length_of_sma) ;
/>print « : $sma \ n » ;
exit ; simple_moving_avg du

sub {
mon $pointer_array = $_ [0] ;
mon $length_ma = $_ [1] ;
mon $sum = 0 ;
mon @tmp = @$pointer_array ;
du
pour (mon $count = $length_ma ; >= 1 de $count ; $count--) {
mon $value = bruit (@tmp) ;
si ($value défini) {
$sum = $value + $sum ;
du
du
}} mon $ma = sprintf (« %.2f », ($sum/$length_ma));
$ma de retour ;
du
}--------------------------le
Here est le résultat de courir DProf : temps écoulé du

Total = 1.987965 temps de Seconds
User+System de = sec 2.194965 #Calls de Seconds
Exclusive Times
%Time ExclSec CumulS/appel Csec/c Name
108. 2.377 2.377 100000 0.0000 0.0000 FORCE : : simple_moving_avg
0.00 - -0.000 1 - - strict : : force de l'import
0.00 - -0.000 1 - - : : BEGIN
0.00 - -0.000 1 - - strict : : FORCE du bits
0.00 - -0.000 1 - - : : BEGIN
--------la question du
My est : Cette sous-routine de Perl peut-elle être améliorée au moment (l'ExclSec doit-il être coupé au moins de 50%) ? Je ne peux pas modifier la rangée étant passée dans le sous-marin. Si le code ne peut pas être sensiblement amélioré au moment il serait plus rapide pour appeler le programme de C.A. ++ est-ce que (j'apprends C++) ou l'assembleur ? Queest-ce que ce code serait ? Beaucoup de thanks.
class= de

Réponse : Manuscrit de Perl prenant trop longtemps

simple_moving_avg secondaire {
    mon ($pointer_array, $length_ma) [email protected]_ ;
    mon $sum = 0 ;
    _ de $sum += $ pour @ {$pointer_array} [0. $length_ma-1] ;
    sprintf de retour " %.2f ", $sum/$length_ma ;
}
Autres solutions  
  •  MS Excel 2007 et pdf - l'exportation vers le pdf prend de longues heures !
  •  Dans le Perl, comment j'ajoute une valeur à la liste, puis le contrôle pour voir si la valeur existent avant d'ajouter une nouvelle valeur
  •  Comment fais j'initialiser de la HP BL460c G6 de san et de la HP XP 240000
  •  Comment fais j'employer une clef de permis de volume sur un ordinateur de HP avec du CD de restauration
  •  Emplacement primaire de deux SCCM dans l'annuaire actif
  •  L'initiateur et la HP D2D de l'iSCSI R2 du serveur 2008 de Windows GERCENT l'issue
  •  Stocker le dossier dans le mysql using connector.net et le champ de goutte
  •  Carte vidéo d'USB - bit 32 sur le matériel travaillant au niveau du bit 64 ?
  •  asp.net que j'essaye de convertir une forme de HTML en forme d'aspx ou ? ce qui jamais. Aide du besoin sur la façon dont à à elle.
  •  Winzip 12 issues de secours du travail ?
  •  
    programming4us programming4us