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

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

  I didn't want to spoil the inpact of my previous message by complicating
  the issue too far.

    srand(time(0))

  is correct and well-formed for all OS/2 C and C++ compilers.

  However, I just need to refute your claim that the above is portable. (-:

  It isn't portable.  ISO Standard C says that time_t is an arithmetic
  type, you see.  On a (hypothetical) platform where time_t was a
  non-integral arithmetic type, such as float or double, the code violates
  a diagnosable semantic restriction, and possibly invokes undefined
  behaviour.

  In ISO Standard C++ the operands of the `%' operator *must* be of
  integral type.  Applying the `%' operator to the return value of
  time_t() on such a platform results in a violation of a semantic
  restriction, and a diagnostic message.

  In ISO Standard C++ converting an floating point value to an integral
  value results in undefined behaviour if the floating point value happens
  to be too large.

  To summarise :

      srand(time(0)) works on all C and C++ compilers for OS/2, where
      time_t is an integral type.  Your code is superfluous.

      Where time_t isn't an integral type, your code is wrong anyway.

  Ah pedantry.  (-:

  > JdeBP <
___
 X MegaMail 2.10 #0:Dr Who is back on U.K. television!
--- Maximus/2 3.01
* Origin: DoNoR/2,Woking UK (44-1483-725167) (2:440/4)
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: 440/4 141/209 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™.