Last change
on this file was
e16e8f2,
checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago
|
bootstuff
|
-
Property mode set to
100644
|
File size:
715 bytes
|
Rev | Line | |
---|
[e16e8f2] | 1 | /* |
---|
| 2 | * lrand48.c |
---|
| 3 | */ |
---|
| 4 | |
---|
| 5 | #include <stdlib.h> |
---|
| 6 | #include <stdint.h> |
---|
| 7 | |
---|
| 8 | unsigned short __rand48_seed[3]; |
---|
| 9 | |
---|
| 10 | long jrand48(unsigned short xsubi[3]) |
---|
| 11 | { |
---|
| 12 | uint64_t x; |
---|
| 13 | |
---|
| 14 | /* The xsubi[] array is littleendian by spec */ |
---|
| 15 | x = (uint64_t) xsubi[0] + |
---|
| 16 | ((uint64_t) xsubi[1] << 16) + ((uint64_t) xsubi[2] << 32); |
---|
| 17 | |
---|
| 18 | x = (0x5deece66dULL * x) + 0xb; |
---|
| 19 | |
---|
| 20 | xsubi[0] = (unsigned short)x; |
---|
| 21 | xsubi[1] = (unsigned short)(x >> 16); |
---|
| 22 | xsubi[2] = (unsigned short)(x >> 32); |
---|
| 23 | |
---|
| 24 | return (long)(int32_t) (x >> 16); |
---|
| 25 | } |
---|
| 26 | |
---|
| 27 | long mrand48(void) |
---|
| 28 | { |
---|
| 29 | return jrand48(__rand48_seed); |
---|
| 30 | } |
---|
| 31 | |
---|
| 32 | long nrand48(unsigned short xsubi[3]) |
---|
| 33 | { |
---|
| 34 | return (long)((uint32_t) jrand48(xsubi) >> 1); |
---|
| 35 | } |
---|
| 36 | |
---|
| 37 | long lrand48(void) |
---|
| 38 | { |
---|
| 39 | return (long)((uint32_t) mrand48() >> 1); |
---|
| 40 | } |
---|
Note: See
TracBrowser
for help on using the repository browser.