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 )