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
|
Line | |
---|
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.