| TIP: Click on subject to list as thread! | ANSI |
| echo: | |
|---|---|
| to: | |
| from: | |
| date: | |
| 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™.