xref: /netbsd/lib/libc/stdlib/erand48.c (revision e89a43e9)
1*e89a43e9Sdrochner /*	$NetBSD: erand48.c,v 1.9 2006/03/22 20:52:16 drochner Exp $	*/
24e067afcSperry 
3933a7b3aSbrezak /*
4933a7b3aSbrezak  * Copyright (c) 1993 Martin Birgmeier
5933a7b3aSbrezak  * All rights reserved.
6933a7b3aSbrezak  *
7933a7b3aSbrezak  * You may redistribute unmodified or modified versions of this source
8933a7b3aSbrezak  * code provided that the above copyright notice and this and the
9933a7b3aSbrezak  * following conditions are retained.
10933a7b3aSbrezak  *
11933a7b3aSbrezak  * This software is provided ``as is'', and comes with no warranties
12933a7b3aSbrezak  * of any kind. I shall in no event be liable for anything that happens
13933a7b3aSbrezak  * to anyone/anything when using this software.
14933a7b3aSbrezak  */
15933a7b3aSbrezak 
1688c3eadbSlukem #include <sys/cdefs.h>
1788c3eadbSlukem #if defined(LIBC_SCCS) && !defined(lint)
18*e89a43e9Sdrochner __RCSID("$NetBSD: erand48.c,v 1.9 2006/03/22 20:52:16 drochner Exp $");
1988c3eadbSlukem #endif /* LIBC_SCCS and not lint */
2088c3eadbSlukem 
2143fa6fe3Sjtc #include "namespace.h"
22b48252f3Slukem 
23b48252f3Slukem #include <assert.h>
24*e89a43e9Sdrochner #include <math.h>
25b48252f3Slukem 
26933a7b3aSbrezak #include "rand48.h"
27933a7b3aSbrezak 
2843fa6fe3Sjtc #ifdef __weak_alias
__weak_alias(erand48,_erand48)2960549036Smycroft __weak_alias(erand48,_erand48)
3043fa6fe3Sjtc #endif
3143fa6fe3Sjtc 
32933a7b3aSbrezak double
33933a7b3aSbrezak erand48(unsigned short xseed[3])
34933a7b3aSbrezak {
35b48252f3Slukem 
36b48252f3Slukem 	_DIAGASSERT(xseed != NULL);
37b48252f3Slukem 
38aa13ae60Sjtc 	__dorand48(xseed);
39933a7b3aSbrezak 	return ldexp((double) xseed[0], -48) +
40933a7b3aSbrezak 	       ldexp((double) xseed[1], -32) +
41933a7b3aSbrezak 	       ldexp((double) xseed[2], -16);
42933a7b3aSbrezak }
43