add rand function in minilibc.
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@1011 bbd45198-f89e-11dd-88c7-29a3b14d5316
This commit is contained in:
parent
9e324032b6
commit
0395886e11
|
@ -29,4 +29,9 @@ int isalpha(int ch)
|
|||
return (unsigned int)((ch | 0x20) - 'a') < 26u;
|
||||
}
|
||||
|
||||
int isdigit (int ch)
|
||||
{
|
||||
return (unsigned int)(ch - '0') < 10u;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -16,5 +16,6 @@
|
|||
|
||||
int isprint(int c) __attribute__ ((__const__));
|
||||
int isalpha (int c) __attribute__ ((__const__));
|
||||
int isdigit (int ch) __attribute__ ((__const__));
|
||||
|
||||
#endif
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
#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")));
|
|
@ -24,4 +24,8 @@ int atoi(const char *nptr);
|
|||
#define realloc rt_realloc
|
||||
#define calloc rt_calloc
|
||||
|
||||
int rand(void);
|
||||
int rand_r(unsigned int *seed);
|
||||
void srand(unsigned int seed);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -14,6 +14,9 @@ typedef rt_uint32_t u_long;
|
|||
typedef rt_uint8_t u_int8_t;
|
||||
typedef rt_uint16_t u_int16_t;
|
||||
typedef rt_uint32_t u_int32_t;
|
||||
typedef rt_int8_t int8_t;
|
||||
typedef rt_int16_t int16_t;
|
||||
typedef rt_int32_t int32_t;
|
||||
|
||||
typedef rt_time_t time_t;
|
||||
|
||||
|
|
Loading…
Reference in New Issue