www.pudn.com > bp_cpp.zip > prob.c


/* 
 * public/prob.c 
 * 2004-04-25 by ShanLanshan 
 * 
 * probability library 
 */ 
#include  
#include  
#include  
#include "public/prob.h" 
 
/* 
 * prob_set_seed 
 * set random seed 
 * -1 for random seed 
 */ 
void prob_set_seed(unsigned int seed) 
{ 
	if (seed == 0) 
		seed = (unsigned int)time(NULL); 
 
	printf("Set random seed [%d]\n", seed); 
	srand(seed); 
} 
 
/* 
 * prob_get_number 
 * get random number from 0 to 0xffffffff 
 */ 
unsigned int prob_get_number() 
{ 
	return rand(); 
	/* 
	register unsigned int ret; 
 
	ret = rand(); 
	ret <<= 15; 
	ret &= rand(); 
	ret ^= (rand() % 4) << 30; 
 
	return ret; 
	*/ 
} 
 
/* 
 * prob_get_range 
 * get a random number in appointed range 
 */ 
int prob_get_range(int start, int to) 
{ 
	assert(to >= start); 
	return  start + (prob_get_number() % (to - start + 1)); 
} 
 
/* 
 * prob_check 
 * check probablilty in power / base 
 * 
 * Return: 
 * 	1 if probablity happened, else return 0 
 */ 
#define PROB_CHECK(n, b, p) (((n) % (b)) < (p)) 
int prob_check(unsigned int power, unsigned int base) 
{ 
	return PROB_CHECK(prob_get_number(), base, power); 
} 
 
/* 
 * prob_select 
 * select in array, the probability depends on the array element's value 
 * 
 * Return: 
 * 	return the selected array element index 
 */ 
int prob_select(unsigned int a[], int len) 
{ 
	int i; 
	unsigned int all; 
	unsigned int n; 
 
	assert(a != NULL); 
	assert(len > 0); 
 
	for (i=all=0; i