1 | /*␊ |
2 | * jrand48.c␊ |
3 | */␊ |
4 | ␊ |
5 | #include <stdlib.h>␊ |
6 | #include <stdint.h>␊ |
7 | ␊ |
8 | long jrand48(unsigned short xsubi[3])␊ |
9 | {␊ |
10 | ␉uint64_t x;␊ |
11 | ␊ |
12 | ␉/* The xsubi[] array is littleendian by spec */␊ |
13 | ␉x = (uint64_t) (uint16_t) xsubi[0] +␊ |
14 | ␉ ((uint64_t) (uint16_t) xsubi[1] << 16) +␊ |
15 | ␉ ((uint64_t) (uint16_t) xsubi[2] << 32);␊ |
16 | ␊ |
17 | ␉x = (0x5deece66dULL * x) + 0xb;␊ |
18 | ␊ |
19 | ␉xsubi[0] = (unsigned short)(uint16_t) x;␊ |
20 | ␉xsubi[1] = (unsigned short)(uint16_t) (x >> 16);␊ |
21 | ␉xsubi[2] = (unsigned short)(uint16_t) (x >> 32);␊ |
22 | ␊ |
23 | ␉return (long)(int32_t) (x >> 16);␊ |
24 | }␊ |
25 | |