Fri Jun 9 14:28:00 2000 Jeff Johnston <jjohnstn@cygnus.com>

* libc/include/sys/reent.h (_rand_next): Changed to
        unsigned long long and moved to end of _reent struct in _new union.
        (_REENT_INIT): Changed to move _rand_next initialization.
        * libc/stdlib/rand.c (rand): Changed to use unsigned long long
        linear congruential algorithm that is used by DJGPP.
This commit is contained in:
Jeff Johnston
2000-06-09 18:50:05 +00:00
parent b6c40e83e9
commit 46a43a99c6
3 changed files with 19 additions and 6 deletions

View File

@ -78,9 +78,12 @@ _DEFUN (srand, (seed), unsigned int seed)
int
_DEFUN_VOID (rand)
{
return ((_REENT->_new._reent._rand_next =
_REENT->_new._reent._rand_next * 1103515245 + 12345 )
& RAND_MAX );
/* This multiplier was obtained from Knuth, D.E., "The Art of
Computer Programming," Vol 2, Seminumerical Algorithms, Third
Edition, Addison-Wesley, 1998, p. 106 (line 26) & p. 108 */
_REENT->_new._reent._rand_next =
_REENT->_new._reent._rand_next * 6364136223846793005LL + 1;
return (int)((_REENT->_new._reent._rand_next >> 32) & RAND_MAX);
}
#endif /* _REENT_ONLY */