X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=compat%2Fnrand48.c;h=ff4e9b138dd0a435ac285d31c9391b3fe751354c;hb=2c383bfcff7a1c54108a9fce254fe91c92ace979;hp=020417e4cb9f993a009d13427822c616960fd15a;hpb=df9356f54bd6396447e2a465b8efda2fdbd21147;p=vlc diff --git a/compat/nrand48.c b/compat/nrand48.c index 020417e4cb..ff4e9b138d 100644 --- a/compat/nrand48.c +++ b/compat/nrand48.c @@ -1,5 +1,5 @@ /***************************************************************************** - * nrand48.c: POSIX nrand48() replacement + * nrand48.c: POSIX erand48(), jrand48() and nrand48() replacements ***************************************************************************** * Copyright © 2010 Rémi Denis-Courmont * @@ -24,7 +24,7 @@ #include -long nrand48 (unsigned short subi[3]) +static uint64_t iterate48 (unsigned short subi[3]) { const uint64_t a = UINT64_C(0x5DEECE66D); const unsigned c = 13; @@ -42,5 +42,21 @@ long nrand48 (unsigned short subi[3]) subi[1] = (x >> 16) & 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; }