1*2fe8fb19SBen Gras /* $NetBSD: erand48.c,v 1.9 2006/03/22 20:52:16 drochner Exp $ */ 2*2fe8fb19SBen Gras 3*2fe8fb19SBen Gras /* 4*2fe8fb19SBen Gras * Copyright (c) 1993 Martin Birgmeier 5*2fe8fb19SBen Gras * All rights reserved. 6*2fe8fb19SBen Gras * 7*2fe8fb19SBen Gras * You may redistribute unmodified or modified versions of this source 8*2fe8fb19SBen Gras * code provided that the above copyright notice and this and the 9*2fe8fb19SBen Gras * following conditions are retained. 10*2fe8fb19SBen Gras * 11*2fe8fb19SBen Gras * This software is provided ``as is'', and comes with no warranties 12*2fe8fb19SBen Gras * of any kind. I shall in no event be liable for anything that happens 13*2fe8fb19SBen Gras * to anyone/anything when using this software. 14*2fe8fb19SBen Gras */ 15*2fe8fb19SBen Gras 16*2fe8fb19SBen Gras #include <sys/cdefs.h> 17*2fe8fb19SBen Gras #if defined(LIBC_SCCS) && !defined(lint) 18*2fe8fb19SBen Gras __RCSID("$NetBSD: erand48.c,v 1.9 2006/03/22 20:52:16 drochner Exp $"); 19*2fe8fb19SBen Gras #endif /* LIBC_SCCS and not lint */ 20*2fe8fb19SBen Gras 21*2fe8fb19SBen Gras #include "namespace.h" 22*2fe8fb19SBen Gras 23*2fe8fb19SBen Gras #include <assert.h> 24*2fe8fb19SBen Gras #include <math.h> 25*2fe8fb19SBen Gras 26*2fe8fb19SBen Gras #include "rand48.h" 27*2fe8fb19SBen Gras 28*2fe8fb19SBen Gras #ifdef __weak_alias __weak_alias(erand48,_erand48)29*2fe8fb19SBen Gras__weak_alias(erand48,_erand48) 30*2fe8fb19SBen Gras #endif 31*2fe8fb19SBen Gras 32*2fe8fb19SBen Gras double 33*2fe8fb19SBen Gras erand48(unsigned short xseed[3]) 34*2fe8fb19SBen Gras { 35*2fe8fb19SBen Gras 36*2fe8fb19SBen Gras _DIAGASSERT(xseed != NULL); 37*2fe8fb19SBen Gras 38*2fe8fb19SBen Gras __dorand48(xseed); 39*2fe8fb19SBen Gras return ldexp((double) xseed[0], -48) + 40*2fe8fb19SBen Gras ldexp((double) xseed[1], -32) + 41*2fe8fb19SBen Gras ldexp((double) xseed[2], -16); 42*2fe8fb19SBen Gras } 43