Statistics-GammaDistribution
view release on metacpan or search on metacpan
lib/Statistics/GammaDistribution.pm view on Meta::CPAN
package Statistics::GammaDistribution;
use strict;
use warnings;
use vars qw ( $VERSION );
$VERSION = 0.02;
sub PI(){ 3.14159265358979323846264338328; }
sub E() { 2.71828182845904523536028747135; }
sub new
{
my ($caller,%args) = @_;
my $class = ref($caller) || $caller;
my $self = bless {}, $class;
$self->_init(%args);
return $self;
}
sub _init
{
my ($self,%args) = @_;
return $self;
}
sub get_order
{
my ($self) = @_;
return $self->{_a};
}
sub set_order
{
my ($self,$order) = @_;
$self->{_a} = $order;
$self->{_na} = int($order);
return $self->{_a};
}
sub rand
{
my ($self,$scale) = shift;
$scale = 1 unless defined $scale;
my $order = $self->{_a};
my $n_order = $self->{_na};
die('Statistics::GammaDistribution::rand() - order of distribution must be set greater than zero using set_order()')
unless ((defined $order) && ($order>0));
if ($order == $n_order){
return $scale * _gamma_int($n_order);
} elsif ($n_order == 0) {
return $scale * _gamma_frac($order);
} else {
return $scale * (_gamma_int($n_order) + _gamma_frac($order-$n_order));
}
}
# random number between zero and one,
# NOT including zero
sub _rand_nonzero
{
my $rand;
while(!($rand = CORE::rand()))
{
# loop
}
return $rand;
( run in 0.433 second using v1.01-cache-2.11-cpan-524268b4103 )