37 lines
698 B
Perl
37 lines
698 B
Perl
{
|
|
package SDAccum;
|
|
sub new {
|
|
my $class = shift;
|
|
my $self = {};
|
|
$self->{sum} = 0.0;
|
|
$self->{sum2} = 0.0;
|
|
$self->{num} = 0;
|
|
bless $self, $class;
|
|
return $self;
|
|
}
|
|
sub count {
|
|
my $self = shift;
|
|
return $self->{num};
|
|
}
|
|
sub mean {
|
|
my $self = shift;
|
|
return ($self->{num}>0) ? $self->{sum}/$self->{num} : 0.0;
|
|
}
|
|
sub variance {
|
|
my $self = shift;
|
|
my $m = $self->mean;
|
|
return ($self->{num}>0) ? $self->{sum2}/$self->{num} - $m * $m : 0.0;
|
|
}
|
|
sub stddev {
|
|
my $self = shift;
|
|
return sqrt($self->variance);
|
|
}
|
|
sub value {
|
|
my $self = shift;
|
|
my $v = shift;
|
|
$self->{sum} += $v;
|
|
$self->{sum2} += $v * $v;
|
|
$self->{num}++;
|
|
return $self->stddev;
|
|
}
|
|
}
|