rand.c 582 字节
Newer Older
1
#include <stdlib.h>
2
#include <stdint.h>
3 4
#include <sys/types.h>

5
static unsigned int _seed=1;
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25

/* Knuth's TAOCP section 3.6 */
#define	M	((1U<<31) -1)
#define	A	48271
#define	Q	44488		// M/A
#define	R	3399		// M%A; R < Q !!!

int rand_r(unsigned int* seed)
{   int32_t X;

    X = *seed;
    X = A*(X%Q) - R * (int32_t) (X/Q);
    if (X < 0)
	X += M;

    *seed = X;
    return X;
}

int rand(void) {
26
  return rand_r(&_seed);
27 28 29 30
}

void srand(unsigned int i)
{ 
31
	_seed=i;
32 33 34 35
}

int random(void) __attribute__((alias("rand")));
void srandom(unsigned int i) __attribute__((alias("srand")));