/* | |
* jrand48.c | |
*/ | |
#include <stdlib.h> | |
#include <stdint.h> | |
long jrand48(unsigned short xsubi[3]) | |
{ | |
uint64_t x; | |
/* The xsubi[] array is littleendian by spec */ | |
x = (uint64_t)(uint16_t)xsubi[0] + | |
((uint64_t)(uint16_t)xsubi[1] << 16) + | |
((uint64_t)(uint16_t)xsubi[2] << 32); | |
x = (0x5deece66dULL * x) + 0xb; | |
xsubi[0] = (unsigned short)(uint16_t)x; | |
xsubi[1] = (unsigned short)(uint16_t)(x >> 16); | |
xsubi[2] = (unsigned short)(uint16_t)(x >> 32); | |
return (long)(int32_t)(x >> 16); | |
} |