App-Sandy

 view release on metacpan or  search on metacpan

xs/RNG.xs  view on Meta::CPAN

#define PERL_NO_GET_CONTEXT
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "ppport.h"

#include "sandy_rng.h"
#include "RNG.h"

MODULE = App::Sandy::RNG		PACKAGE = App::Sandy::RNG

PROTOTYPES: DISABLED

RNGContext *
App::Sandy::RNG::new (unsigned long seed)
	PREINIT:
		RNGContext *ctx;
	CODE:
		Newx (ctx, 1, RNGContext);
		ctx->rng = gsl_rng_alloc (gsl_rng_ranlxd2);
		gsl_rng_set (ctx->rng, seed);
		RETVAL = ctx;
	OUTPUT:
		RETVAL

void
DESTROY (RNGContext *ctx)
	CODE:
		Safefree (ctx->rng);
		Safefree (ctx);

void
set (RNGContext *ctx, unsigned long seed)
	CODE:
		gsl_rng_set (ctx->rng, seed);

unsigned long
max (RNGContext *ctx)
	CODE:
		RETVAL = gsl_rng_max (ctx->rng);
	OUTPUT:
		RETVAL

unsigned long
min (RNGContext *ctx)
	CODE:
		RETVAL = gsl_rng_min (ctx->rng);
	OUTPUT:
		RETVAL

size_t
size (RNGContext *ctx)
	CODE:
		RETVAL = gsl_rng_size (ctx->rng);
	OUTPUT:
		RETVAL

char *
name (RNGContext *ctx)
	CODE:
		RETVAL = (char *) gsl_rng_name (ctx->rng);
	OUTPUT:
		RETVAL

unsigned long
get (RNGContext *ctx)
	CODE:
		RETVAL = gsl_rng_get (ctx->rng);
	OUTPUT:
		RETVAL

double
uniform (RNGContext *ctx)
	CODE:
		RETVAL = gsl_rng_uniform (ctx->rng);
	OUTPUT:
		RETVAL

double
uniform_pos (RNGContext *ctx)
	CODE:
		RETVAL = gsl_rng_uniform_pos (ctx->rng);
	OUTPUT:
		RETVAL

double
ran_gaussian (RNGContext *ctx, double sigma)
	CODE:
		RETVAL = gsl_ran_gaussian (ctx->rng, sigma);
	OUTPUT:
		RETVAL

double
ran_gaussian_ratio_method (RNGContext *ctx, double sigma)
	CODE:
		RETVAL = gsl_ran_gaussian_ratio_method (ctx->rng, sigma);
	OUTPUT:
		RETVAL

double
ran_gaussian_pdf (double x, double sigma)
	CODE:
		RETVAL = gsl_ran_gaussian_pdf (x, sigma);
	OUTPUT:
		RETVAL

double
ran_ugaussian (RNGContext *ctx)
	CODE:
		RETVAL = gsl_ran_ugaussian (ctx->rng);
	OUTPUT:
		RETVAL

double
ran_ugaussian_ratio_method (RNGContext *ctx)
	CODE:
		RETVAL = gsl_ran_ugaussian_ratio_method (ctx->rng);
	OUTPUT:
		RETVAL

double
ran_ugaussian_pdf (double x)
	CODE:
		RETVAL = gsl_ran_ugaussian_pdf (x);
	OUTPUT:
		RETVAL

unsigned long
get_n (RNGContext *ctx, unsigned long n)
	INIT:
		if (n <= 0)
			croak ("n must be greater than zero");
	CODE:
		RETVAL = gsl_rng_get (ctx->rng) % n;
	OUTPUT:
		RETVAL

double
get_norm (RNGContext *ctx, double mean, double stdd)
	CODE:
		RETVAL = mean + (int) (gsl_ran_gaussian (ctx->rng, stdd) + 0.5);
	OUTPUT:
		RETVAL



( run in 2.690 seconds using v1.01-cache-2.11-cpan-140bd7fdf52 )