2007-02-20  Brian Gough  <bjg@network-theory.co.uk>

	* gamma.c (gsl_ran_gamma): avoid an unnecessary function call to
	gsl_ran_gamma_mt, since that maps back to gsl_ran_gamma now

2007-02-14  Brian Gough  <bjg@network-theory.co.uk>

	* test.c (testPDF): reduce the test sensitivity to avoid failures
	caused by weaknesses in the underlying rng

2007-01-26  Brian Gough  <bjg@network-theory.co.uk>

	* gamma.c (gsl_ran_gamma): the Marsaglia Tsang method is now the
	default
	(gsl_ran_gamma_knuth): new function name, preserving the original
	gsl_ran_gamma

2006-08-30  Brian Gough  <bjg@network-theory.co.uk>

	* discrete.c (gsl_ran_discrete_preproc): use GSL_ENOMEM instead of
	ENOMEM

2006-04-18  Brian Gough  <bjg@network-theory.co.uk>

	* gausszig.c (gsl_ran_gaussian_ziggurat): fix prototype const

2006-03-26  Brian Gough  <bjg@network-theory.co.uk>

	* multinomial.c (gsl_ran_multinomial_lnpdf): use gsl_sf_lnfact
	instead of gsl_sf_lngamma for an integer argument

2006-03-17  Brian Gough  <bjg@network-theory.co.uk>

	* binomial_tpe.c (gsl_ran_binomial): cast return values to
	unsigned

2006-02-27  Brian Gough  <bjg@network-theory.co.uk>

	* beta.c (gsl_ran_beta_pdf): work with logs avoid
	underflow/overflow

2006-02-19  Brian Gough  <bjg@network-theory.co.uk>

	* gauss.c (gsl_ran_gaussian): reject case where x=-1 || y=-1
	for true symmetry
	(gsl_ran_gaussian_ratio_method): add Leva bounds

	* exppow.c (gsl_ran_exppow): added faster rejection methods

2006-02-01  Brian Gough  <bjg@network-theory.co.uk>

	* gausszig.c: added ziggurat gaussian (Jochen Voss)

2006-01-20  Brian Gough  <bjg@network-theory.co.uk>

	* binomial.c (gsl_ran_binomial_pdf): handle the cases p=0 and p=1
	(gsl_ran_binomial_pdf): use log1p to calculate more accurately
	near k=0,p=0

2005-08-31  Brian Gough  <bjg@network-theory.co.uk>

	* test.c (main): free allocated memory before exit

2005-08-22  Brian Gough  <bjg@network-theory.co.uk>

	* binomial_tpe.c (gsl_ran_binomial): switch to the TPE algorithm
	as the default

	* binomial.c (gsl_ran_binomial_knuth): rename the original
	binomial function to ..._knuth

2004-05-30  Brian Gough  <bjg@network-theory.co.uk>

	* landau.c (gsl_ran_landau): fix potential array bounds overflow
	by extending array.

2004-04-22  Brian Gough  <bjg@network-theory.co.uk>

	* sphere.c (gsl_ran_dir_3d): removed unnecessary check for s==0.0

2003-07-25  Brian Gough  <bjg@network-theory.co.uk>

	* dirichlet.c: include gsl_sf_gamma.h instead of gsl_sf.h

2003-07-24  Brian Gough  <bjg@network-theory.co.uk>

	* binomial_tpe.c (gsl_ran_binomial_tpe): convert to double to
	avoid possible signed/unsigned problems in comparison (ix > n)
	(Stirling): removed spurious trailing ;

2003-05-14  Brian Gough  <bjg@network-theory.co.uk>

	* binomial_tpe.c: fast binomial algorithm using TPE method

	* test.c: added the tests for the fast Binomial TPE routine

2003-02-09  Brian Gough  <bjg@network-theory.co.uk>

	* discrete.c (gsl_ran_discrete_preproc): fixed bug reported by
	ahoward <ahoward@pollux.usc.edu>

2003-01-25  Brian Gough  <brian.gough@network-theory.co.uk>

	* chisq.c: corrected comments

2002-12-10  Brian Gough  <bjg@network-theory.co.uk>

	* multinomial.c (gsl_ran_multinomial): added multinomial
	distribution

	* dirichlet.c (gsl_ran_dirichlet_lnpdf): added logpdf function for
	accuracy

Tue Aug 27 19:08:33 2002  Brian Gough  <bjg@network-theory.co.uk>

	* dirichlet.c: added dirichlet distribution

Sat Aug 18 22:21:07 2001  Brian Gough  <bjg@network-theory.co.uk>

	* gsl-randist.c: moved to top-level directory

Wed Jul 18 12:57:55 2001  Brian Gough  <bjg@network-theory.co.uk>

	* landau.c: added Landau distribution from Dave Morrison

Sat Jun 23 12:30:38 2001  Brian Gough  <bjg@network-theory.co.uk>

	* gausstail.c (gsl_ran_gaussian_tail): allow negative values for
 	the tail cutoff parameter.

Mon May 21 12:17:07 2001  Brian Gough  <bjg@network-theory.co.uk>

	* shuffle.c (gsl_ran_choose): removed void * return value
	(gsl_ran_sample): removed void * return value

Tue Apr 24 17:10:47 2001  Brian Gough  <bjg@network-theory.co.uk>

	* bernoulli.c (gsl_ran_bernoulli_pdf): removed unnecessary
 	reference to gsl_sf.h

Mon Apr 23 10:25:44 2001  Brian Gough  <bjg@network-theory.co.uk>

	* changed calls to old specfunc _impl functions to use new error
 	handling conventions

Tue Apr 17 19:57:59 2001  Brian Gough  <bjg@network-theory.co.uk>

	* weibull.c (gsl_ran_weibull): changed parameter mu to a, since it
 	is not the mean
	(gsl_ran_weibull_pdf): changed parameter mu to a, since it
 	is not the mean

	* logistic.c (gsl_ran_logistic): changed parameter mu to a, since it
 	is not the mean
	(gsl_ran_logistic_pdf): changed parameter mu to a, since it
 	is not the mean

	* laplace.c (gsl_ran_laplace): changed parameter mu to a, since it
 	is not the mean
	(gsl_ran_laplace_pdf): changed parameter mu to a, since it
 	is not the mean

	* exppow.c (gsl_ran_exppow): changed parameter mu to a, since it
 	is not the mean
	(gsl_ran_exppow_pdf): changed parameter mu to a, since it
 	is not the mean

	* cauchy.c (gsl_ran_cauchy): changed parameter mu to a, since it
 	is not the mean
	(gsl_ran_cauchy_pdf): changed parameter mu to a, since it
 	is not the mean

Tue Feb 20 11:14:00 2001  Brian Gough  <bjg@network-theory.co.uk>

	* levy.c: added the skew symmetric routine from Keith Briggs,
 	changed the definition of the original function to match and not
 	use mu as a scale parameter.

2000-10-17  Brian Gough  <bjg@inweb.aethos.co.uk>

	* shuffle.c (gsl_ran_shuffle): replaced calls of the form
	N*gsl_rng_uniform(r) with the integer form gsl_rng_uniform(r, N)

Thu Sep 21 18:41:53 2000  Brian Gough  <bjg@network-theory.co.uk>

	* pareto.c (gsl_ran_pareto): made arguments and documentation
 	consistent

Wed May 10 14:55:43 2000  Brian Gough  <bjg@network-theory.co.uk>

	* gsl-randist.c (main): fixed bug for lognormal (it was calling
 	exppow)  Tadhg O'Meara <tadhg@net-cs.ucd.ie>

	* gsl-randist.c (main): print out all the dimensions for dir-nd,
 	not just the first

Tue Apr 25 20:45:14 2000  Brian Gough  <bjg@network-theory.co.uk>

	* shuffle.c (gsl_ran_sample): lifted the restriction that sampling
 	with replacement could only be done less than n times for n objects.

Tue Mar 14 21:31:46 2000  Brian Gough  <bjg@network-theory.co.uk>

	* logistic.c (gsl_ran_logistic_pdf): prevent overflow in
 	computation of pdf for x < 0

Thu Oct  7 12:55:40 1999  Brian Gough  <bjg@network-theory.co.uk>

	* discrete.c (gsl_ran_discrete_free): removed unreachable code
 	"return 0";

Fri Aug  6 16:02:08 1999  Brian Gough  <bjg@network-theory.co.uk>

	* sphere.c (gsl_ran_dir_nd): number of dimensions is now unsigned
 	(size_t)

	* logarithmic.c (gsl_ran_logarithmic_pdf): removed warning about
 	passing arg 2 of `pow' as floating rather than integer due to
 	prototype

Sun Aug  1 20:29:43 1999  Brian Gough  <bjg@network-theory.co.uk>

	* discrete.c: converted to GSL_ERROR macros for error handling

Tue Jul 27 14:14:38 1999  Brian Gough  <bjg@network-theory.co.uk>

	* sphere.c (gsl_ran_dir_3d): use the Knop method only -- it is the
 	best.
	(gsl_ran_dir_2d_trig_method): split out the trig method as an
 	alternative for those platforms where it is faster

	* bigauss.c: split out the bivariate gaussian into its own source
	file

1999-06-30  Mark Galassi  <rosalia@lanl.gov>

	* discrete.c: (thanks to Frederick W. Wheeler
	<wheeler@cipr.rpi.edu>) changed the type stack_t to gsl_stack_t to
	avoid a conflict on HPUX.

Sun Feb 28 20:41:18 1999  Brian Gough  <bjg@netsci.freeserve.co.uk>

	* gsl-randist.c (main): change cfree() to free(), which is
 	standard.

	* discrete.c (gsl_ran_discrete_preproc): removed warning, pTotal
 	is now initialized to zero.

1999-01-31  James Theiler <jt@lanl.gov>
	* gauss.c added a new function gsl_ran_ugaussian_tail() which
	provides random numbers out on the tail of a gaussian.  I also
	added (but then #ifdef'd out) a second implementation of ordinary
	gaussian numbers.  This second implementation passes the tests
	okay, but it is a touch slower on my home Pentium.
	* gsl_randist.h added prototypes
	* test.c added tests for new gaussian tail function; also altered
	testMoment's ugaussian range (-1,1) value from .68 to a more
	accurate value.
	* ../doc/random.texi further updated 
	
1999-01-30  James Theiler <jt@lanl.gov>
	* discrete.c added implementation of Walker's algorithm for
	rapidly choosing a random integer k where the k's are distributed
	by a user-supplied array of probabilities P[k].  This includes
	functions gsl_ran_discrete(), gsl_ran_discrete_preproc(), 
	gsl_ran_discrete_free(), and gsl_ran_discrete_pdf().
	* gsl_randist.h added definition of structure gsl_ran_discrete_t,
	also prototypes of new functions defined in discrete.c
	* test.c added tests for gsl_ran_discrete(), also
	* test.c made some essentially cosmetic changes:
	1/ redefined FUNC and FUNC2 macros so now output looks like 
	"test gsl_ran_poisson" instead of "gsl_ran_test_poisson"
	2/ changed names of toplevel tests, eg test_moments->testMoments, 
	test_pdf->testPDF, etc, to distinguish them from all the individual 
	functions test_poisson, test_binomial, etc.
	hope that's ok.
	* ../doc/random.texi updated to reflect the new discrete functions,
	as well as the new implementations of the sphere.c routines.

1999-01-28  James Theiler <jt@lanl.gov>
	* sphere.c modified gsl_ran_dir_3d, to speed it up about 2x
	also modified gsl_ran_dir_2d, providing alternative algorithms 
	(#ifdef'd appropriately).  which is faster is machine dependent.
	also gsl_ran_dir_nd for n-dimensional direction, using
	gaussian random variables, normalized to the unit sphere
	also added ref's to Knuth and others describing the algorithms	
	* gsl_randist.h added gsl_ran_dir_nd() prototype
	* gsl-randist.c added dir-nd option

Tue Dec 15 23:08:57 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* updated all the functions depending on gsl_sf to use the new
 	special function interface, based on gsl_sf_result

Tue Nov 17 17:02:54 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* added #include <config.h> to all top-level source files

1998-11-06    <bjg@ancho.lanl.gov>

	* test.c: ensured that M_PI is available by #include <gsl_math.h>

Wed Sep 16 14:44:08 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* rayleigh.c: added rayleigh tail distribution

Sat Sep 12 13:03:19 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* rayleigh.c: added rayleigh distribution

Mon Aug 31                James Theiler <jt@lanl.gov>

	* Makefile.am: added ../utils/libutils.a to some LDADD's

Mon Aug 17 14:31:55 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* gsl_randist.h: renamed discrete probability distribution
 	parameters to use consistent k,n notation (k = sample, n = total,
 	e.g. p(k) = function(k,n) )

Wed Aug 12 14:02:31 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* lognormal.c: added zeta and sigma (location and scale parameters)

	* logarithmic.c (gsl_ran_logarithmic): added logarithmic distribution

Mon Aug 10 14:41:15 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* gsl-randist.c: added random direction functions

	* gamma.c: added the scale paramter for  the gamma distribution

Thu Aug  6 12:19:59 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* gauss.c (gsl_ran_bivariate_gaussian): added bivariate with
 	correlations.

	* hyperg.c: renamed variables, fixed bug

Wed Aug  5 11:21:45 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* gsl-dist.c: renamed gsl-dist.c to gsl-randist.c, for
 	consistency

Tue Aug  4 12:29:17 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* gsl-dist.c: a program for generating samples from the 
 	distributions

	* levy.c (gsl_ran_levy): take care of special case, a=1

	* logistic.c: allow scale parameter, mu

	* weibull.c: allow scale parameter, mu

	* pareto.c: allow scale parameter, mu

	* exppow.c: handle the case a<1 using a transformation of the
 	gamma distribution.

	* gamma.c (gsl_ran_gamma_int): removed the check for
 	GSL_LOGINIFINITY since underflow can't occur for 32-bit random
 	numbers in double precision.

Mon Aug  3 13:09:39 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* test.c: added tests for shuffle and choose

	* pascal.c: added the Pascal distribution

	* hyperg.c: added the hypergeometric distribution

Fri Jul 31 12:52:12 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* gsl_randist.h: renamed gsl_ran_two_sided_exponential to
 	gsl_ran_laplace

1998-07-26  Mark Galassi  <rosalia@cygnus.com>

	* Makefile.am (INCLUDES): added -I$(top_srcdir), since gsl_math.h
	is needed, and that is in the top level source directory.  This is
	necessary for using a separate build directory.

Tue Jul 14 12:39:30 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* nbinomial.c: added Negative Binomial distribution

	* bernoulli.c: added Bernoulli distribution

	* poisson.c (gsl_ran_poisson): fixed a serious bug in the unrolled
 	recursion which led to an incorrect result being returned for the
 	large t case. This shows the importance of tests that cover all
 	possible branches!!!

	* erlang.c (gsl_ran_erlang_pdf): renamed mu to a for consistency

Thu Jul  2 15:47:05 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* added some extra distributions, lognormal.c gaussian.c
 	logistic.c pareto.c geometric.c erlang.c chisq.c weibull.c,
	although they aren't finished yet

Wed Jul  1 11:56:06 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* replace do { u = gsl_rng_uniform(r) } while (u == 0) by a direct
 	call to gsl_rng_uniform_pos.

Sun Jun 28 14:21:13 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* converted everything to work with rng style generators

Sun Apr 19 19:06:59 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* made the 'gsl-dist' programs just output a single column of
 	their random numbers (previously some of the programs printed both
 	the uniform variate and the transformed number)

	* got rid of the 'bench-' programs. We will have a full testing
 	suite soon.

	* renamed the installed programs from 'dist' to 'gsl-dist' so that
 	they don't overwrite anything, e.g. it's possible the user might
 	have other programs called 'gauss' or 'gamma' installed in
 	/usr/local

Sat Mar 21 16:09:16 1998  Brian Gough  <bjg@vvv.lanl.gov>

	* laplace.c (gsl_ran_laplace): added a Laplace distribution
	(two-sided exponential)
	
	* lorentz.c (gsl_ran_lorentzian): added a Lorentz distribution
	
1998-01-30  Mark Galassi  <rosalia@cygnus.com>

	* Makefile.am (lib_LIBRARIES): now it creates libgslrandist.a so
	that we have gaussian and poisson distributions.

