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

@ -1,3 +1,11 @@
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.
Thu Jun 8 21:18:00 2000 Ranjith Kumaran <ranjith@cygnus.com> Thu Jun 8 21:18:00 2000 Ranjith Kumaran <ranjith@cygnus.com>
* libc/include/stdlib.h: Set RAND_MAX to __RAND_MAX. * libc/include/stdlib.h: Set RAND_MAX to __RAND_MAX.

View File

@ -177,11 +177,13 @@ struct _reent
{ {
struct struct
{ {
unsigned int _rand_next; unsigned int _unused_rand;
char * _strtok_last; char * _strtok_last;
char _asctime_buf[26]; char _asctime_buf[26];
struct tm _localtime_buf; struct tm _localtime_buf;
int _gamma_signgam; int _gamma_signgam;
unsigned long long _rand_next;
} _reent; } _reent;
/* Two next two fields were once used by malloc. They are no longer /* Two next two fields were once used by malloc. They are no longer
used. They are used to preserve the space used before so as to used. They are used to preserve the space used before so as to
@ -210,8 +212,8 @@ struct _reent
#define _REENT_INIT(var) \ #define _REENT_INIT(var) \
{ 0, &var.__sf[0], &var.__sf[1], &var.__sf[2], 0, "", 0, "C", \ { 0, &var.__sf[0], &var.__sf[1], &var.__sf[2], 0, "", 0, "C", \
0, NULL, NULL, 0, NULL, NULL, 0, NULL, { {1, NULL, "", \ 0, NULL, NULL, 0, NULL, NULL, 0, NULL, { {0, NULL, "", \
{ 0,0,0,0,0,0,0,0}, 0 } } } { 0,0,0,0,0,0,0,0}, 0, 1} } }
/* /*
* All references to struct _reent are via this pointer. * All references to struct _reent are via this pointer.

View File

@ -78,9 +78,12 @@ _DEFUN (srand, (seed), unsigned int seed)
int int
_DEFUN_VOID (rand) _DEFUN_VOID (rand)
{ {
return ((_REENT->_new._reent._rand_next = /* This multiplier was obtained from Knuth, D.E., "The Art of
_REENT->_new._reent._rand_next * 1103515245 + 12345 ) Computer Programming," Vol 2, Seminumerical Algorithms, Third
& RAND_MAX ); 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 */ #endif /* _REENT_ONLY */