4
0
mirror of https://github.com/RT-Thread/rt-thread.git synced 2025-01-28 16:20:24 +08:00
bernard.xiong@gmail.com 0395886e11 add rand function in minilibc.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1011 bbd45198-f89e-11dd-88c7-29a3b14d5316
2010-10-15 23:31:11 +00:00

36 lines
600 B
C

#include <stdlib.h>
#include <sys/types.h>
static unsigned int seed=1;
/* 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 !!!
// FIXME: ISO C/SuS want a longer period
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) {
return rand_r(&seed);
}
void srand(unsigned int i)
{
seed=i;
}
int random(void) __attribute__((alias("rand")));
void srandom(unsigned int i) __attribute__((alias("srand")));