mirror of
				https://github.com/saitohirga/WSJT-X.git
				synced 2025-10-30 20:40:28 -04:00 
			
		
		
		
	
		
			
	
	
		
			55 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			55 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /* RAND.H - Interface to random number generation procedures. */ | ||
|  | 
 | ||
|  | /* Copyright (c) 1995-2012 by Radford M. Neal.
 | ||
|  |  * | ||
|  |  * Permission is granted for anyone to copy, use, modify, and distribute | ||
|  |  * these programs and accompanying documents for any purpose, provided | ||
|  |  * this copyright notice is retained and prominently displayed, and note | ||
|  |  * is made of any changes made to these programs.  These programs and | ||
|  |  * documents are distributed without any warranty, express or implied. | ||
|  |  * As the programs were written for research purposes only, they have not | ||
|  |  * been tested to the degree that would be advisable in any important | ||
|  |  * application.  All use of these programs is entirely at the user's own | ||
|  |  * risk. | ||
|  |  */ | ||
|  | 
 | ||
|  | 
 | ||
|  | /* STATE OF RANDOM NUMBER GENERATOR. */ | ||
|  | 
 | ||
|  | #define N_tables 5		/* Number of tables of real random numbers */
 | ||
|  | 
 | ||
|  | typedef struct | ||
|  | { int seed;			/* Seed state derives from */ | ||
|  |   int ptr[N_tables];		/* Pointers for tables of real random numbers */ | ||
|  |   unsigned short state48[3];	/* State of 'rand48' pseudo-random generator */ | ||
|  | } rand_state; | ||
|  | 
 | ||
|  | 
 | ||
|  | /* BASIC PSEUDO-RANDOM GENERATION PROCEDURES. */ | ||
|  | 
 | ||
|  | void rand_seed (int);		/* Initialize current state structure by seed */ | ||
|  | 
 | ||
|  | void rand_use_state (rand_state *); /* Start using given state structure */ | ||
|  | rand_state *rand_get_state (void);  /* Return pointer to current state */ | ||
|  | 
 | ||
|  | int rand_word (void);		/* Generate random 31-bit positive integer */ | ||
|  | 
 | ||
|  | 
 | ||
|  | /* GENERATORS FOR VARIOUS DISTRIBUTIONS. */ | ||
|  | 
 | ||
|  | double rand_uniform (void);	/* Uniform from [0,1) */ | ||
|  | double rand_uniopen (void);	/* Uniform from (0,1) */ | ||
|  | 
 | ||
|  | int rand_int (int);		/* Uniform from 0, 1, ... (n-1) */ | ||
|  | int rand_pickd (double *, int);	/* From 0 ... (n-1), with given distribution */ | ||
|  | int rand_pickf (float *, int);	/* Same as above, but with floats */ | ||
|  | void rand_permutation (int *, int); /* Random permutation */ | ||
|  | 
 | ||
|  | int rand_poisson (double);	/* Poisson with given mean */ | ||
|  | double rand_gaussian (void);	/* Gaussian with mean zero and unit variance */ | ||
|  | double rand_logistic (void);	/* Logistic centred at zero with unit width */ | ||
|  | double rand_cauchy (void);	/* Cauchy centred at zero with unit width */ | ||
|  | double rand_gamma (double);	/* Gamma with given shape parameter */ | ||
|  | double rand_exp (void);		/* Exponential with mean one */ | ||
|  | double rand_beta (double, double); /* Beta with given parameters */ |