TIP: Click on subject to list as thread! ANSI
echo: os2prog
to: Jonathan de Boyne Pollard
from: Mike Bilow
date: 1996-05-22 21:17:02
subject: Random Seed

Jonathan de Boyne Pollard wrote in a message to Mike Bilow:

  >    #include 
  >    #include      // for UINT_MAX
  >    #include 
  >
  >    srand((unsigned int)(time(NULL) % UINT_MAX));

 JdBP>   There is no need for , UINT_MAX, or the modulo
 JdBP> operator. 

 JdBP>   In ISO Standard C++ the integral conversions guarantee
 JdBP> that if the   source type is an integral type and the
 JdBP> destination type is an unsigned   integral type (as it is
 JdBP> here) then modulo 2^n is automatically applied. 

 JdBP>   So

 JdBP>        srand(time(0))

 JdBP>   will do just fine on all of the C and C++ compilers
 JdBP> available for OS/2. 

There are complications here.  On a 16-bit compiler, time() returns a
time_t, which is an unsigned long, but srand() takes an unsigned int.  So
calling srand(time(0)) as you suggest will produce a compiler warning,
although as you note this is legal C/C++.  This should be fixed with an
explicit cast.

When such a cast is performed, either explicitly or implicitly, the
automatic conversion is:

   srand((unsigned int)(time(NULL) % (UINT_MAX + 1));

The difference may or may not be significant in a specific case.  This is a
math issue, not a C/C++ issue.  Remember also that time() returns
(time_t)(-1) if the system time is not available (which never happens under
OS/2).
 
-- Mike


--- 
* Origin: N1BEE BBS +1 401 944 8498 V.34/V.FC/V.32bis/HST16.8 (1:323/107)
SEEN-BY: 50/99 270/101 620/243 711/401 409 410 413 430 808 809 934 955
SEEN-BY: 712/407 515 517 628 713/888 800/1
@PATH: 323/107 396/1 270/101 712/515 711/808 934

SOURCE: echomail via fidonet.ozzmosis.com

Email questions or comments to sysop@ipingthereforeiam.com
All parts of this website painstakingly hand-crafted in the U.S.A.!
IPTIA BBS/MUD/Terminal/Game Server List, © 2025 IPTIA Consulting™.