1234567891011121314151617181920212223242526272829303132333435 |
- #include <stdlib.h>
- #include <stdint.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 !!!
- 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")));
|