apache / mynewt-documentation / 94c47ae2bc67c54a68d227abbb47c27ae97cc232 / . / versions / v1_4_0 / mynewt-core / libc / baselibc / src / jrand48.c

/* | |

* 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); | |

} |