1*0fa1c6e6Sguenther /* $OpenBSD: drand48.c,v 1.7 2015/09/14 13:30:17 guenther Exp $ */ 2df930be7Sderaadt /* 3df930be7Sderaadt * Copyright (c) 1993 Martin Birgmeier 4df930be7Sderaadt * All rights reserved. 5df930be7Sderaadt * 6df930be7Sderaadt * You may redistribute unmodified or modified versions of this source 7df930be7Sderaadt * code provided that the above copyright notice and this and the 8df930be7Sderaadt * following conditions are retained. 9df930be7Sderaadt * 10df930be7Sderaadt * This software is provided ``as is'', and comes with no warranties 11df930be7Sderaadt * of any kind. I shall in no event be liable for anything that happens 12df930be7Sderaadt * to anyone/anything when using this software. 13df930be7Sderaadt */ 14df930be7Sderaadt 15*0fa1c6e6Sguenther #include <math.h> 16df930be7Sderaadt #include "rand48.h" 17df930be7Sderaadt 18df930be7Sderaadt double drand48(void)19df930be7Sderaadtdrand48(void) 20df930be7Sderaadt { 21f7510a6eSderaadt if (__rand48_deterministic == 0) { 227478a1eaSderaadt unsigned short rseed[3]; 23f7510a6eSderaadt 24f7510a6eSderaadt arc4random_buf(rseed, sizeof rseed); 25f7510a6eSderaadt return ldexp((double) rseed[0], -48) + 26f7510a6eSderaadt ldexp((double) rseed[1], -32) + 27f7510a6eSderaadt ldexp((double) rseed[2], -16); 28f7510a6eSderaadt } 29df930be7Sderaadt return erand48(__rand48_seed); 30df930be7Sderaadt } 31