/usr/share/perl5/Statistics/Basic/Variance.pm is in libstatistics-basic-perl 1.6601-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | package Statistics::Basic::Variance;
use strict;
use warnings;
use Carp;
use base 'Statistics::Basic::_OneVectorBase';
sub new {
my $class = shift;
warn "[new $class]\n" if $Statistics::Basic::DEBUG >= 2;
my $this = bless {}, $class;
my $vector = eval { Statistics::Basic::Vector->new(@_) } or croak $@;
my $c = $vector->_get_computer("variance"); return $c if defined $c;
$this->{v} = $vector;
$this->{m} = eval { Statistics::Basic::Mean->new($vector) } or croak $@;
$vector->_set_computer( variance => $this );
return $this;
}
sub _recalc {
my $this = shift;
my $first = shift;
delete $this->{recalc_needed};
delete $this->{_value};
my $mean = $this->{m}->query;
return unless defined $mean;
my $v = $this->{v};
my $cardinality = $v->query_size;
$cardinality -- if $Statistics::Basic::UNBIAS;
return unless $cardinality > 0;
if( $Statistics::Basic::DEBUG >= 2 ) {
warn "[recalc " . ref($this) . "] ( $_ - $mean ) ** 2\n" for $v->query;
}
my $sum = 0; { no warnings 'uninitialized'; ## no critic
$sum += ( $_ - $mean ) ** 2 for $v->query;
}
$this->{_value} = ($sum / $cardinality);
warn "[recalc " . ref($this) . "] ($sum/$cardinality) = $this->{_value}\n" if $Statistics::Basic::DEBUG;
return;
}
sub query_mean { return $_[0]->{m} }
1;
|