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