Commit d663d29a authored by Rémi Denis-Courmont's avatar Rémi Denis-Courmont

Also provide erand48 and jrand48, they come almost for free

parent df9356f5
/***************************************************************************** /*****************************************************************************
* nrand48.c: POSIX nrand48() replacement * nrand48.c: POSIX erand48(), jrand48() and nrand48() replacements
***************************************************************************** *****************************************************************************
* Copyright © 2010 Rémi Denis-Courmont * Copyright © 2010 Rémi Denis-Courmont
* *
...@@ -24,7 +24,7 @@ ...@@ -24,7 +24,7 @@
#include <inttypes.h> #include <inttypes.h>
long nrand48 (unsigned short subi[3]) static uint64_t iterate48 (unsigned short subi[3])
{ {
const uint64_t a = UINT64_C(0x5DEECE66D); const uint64_t a = UINT64_C(0x5DEECE66D);
const unsigned c = 13; const unsigned c = 13;
...@@ -42,5 +42,21 @@ long nrand48 (unsigned short subi[3]) ...@@ -42,5 +42,21 @@ long nrand48 (unsigned short subi[3])
subi[1] = (x >> 16) & 0xFFFF; subi[1] = (x >> 16) & 0xFFFF;
subi[2] = (x >> 0) & 0XFFFF; subi[2] = (x >> 0) & 0XFFFF;
return x >> 17; return x;
}
double erand48 (unsigned short subi[3])
{
uint64_t r = iterate48 (subi);
return ((double)r) / 281474976710655.;
}
long jrand48 (unsigned short subi[3])
{
return ((int64_t)iterate48 (subi)) >> 16;
}
long nrand48 (unsigned short subi[3])
{
return iterate48 (subi) >> 17;
} }
...@@ -241,6 +241,8 @@ struct pollfd ...@@ -241,6 +241,8 @@ struct pollfd
/* Random numbers */ /* Random numbers */
#ifndef HAVE_NRAND48 #ifndef HAVE_NRAND48
double erand48 (unsigned short subi[3]);
long jrand48 (unsigned short subi[3]);
long nrand48 (unsigned short subi[3]); long nrand48 (unsigned short subi[3]);
#endif #endif
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment