home bbs files messages ]

Forums before death by AOL, social media and spammers... "We can't have nice things"

   comp.lang.c      Meh, in C you gotta define EVERYTHING      243,242 messages   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]

   Message 242,897 of 243,242   
   Keith Thompson to Tim Rentsch   
   Re: srand(0)   
   07 Jan 26 13:54:21   
   
   From: Keith.S.Thompson+u@gmail.com   
      
   Tim Rentsch  writes:   
   > John McCue  writes:   
   >> Michael Sanders  wrote:   
   >>> Is it incorrect to use 0 (zero) to seed srand()?   
   >>>   
   >>> int seed = (argc >= 2 && strlen(argv[1]) == 9)   
   >>>            ? atoi(argv[1])   
   >>>            : (int)(time(NULL) % 900000000 + 100000000);   
   >>>   
   >>> srand(seed);   
   >>   
   >> I like to just read /dev/urandom when I need a random   
   >> number.  Seem easier and more portable across Linux &   
   >> the *BSDs.   
   >>   
   >> int s;   
   >> read(fd, &s, sizeof(int));   
   >   
   > Apples and oranges.  Many applications that use random numbers   
   > need a stream of numbers that is deterministic and reproducible,   
   > which /dev/urandom is not.   
      
   And neither is the non-conforming rand() on OpenBSD.   
      
   The rand(1) man page on OpenBSD 7.8 says:   
      
        Standards insist that this interface return deterministic   
        results.  Unsafe usage is very common, so OpenBSD changed the   
        subsystem to return non-deterministic results by default.   
      
        To satisfy portable code, srand() may be called to initialize   
        the subsystem.  In OpenBSD the seed variable is ignored,   
        and strong random number results will be provided from   
        arc4random(3).  In other systems, the seed variable primes a   
        simplistic deterministic algorithm.   
      
   It does provide an srand_deterministic() function that behaves the way   
   srand() is supposed to.   
      
   And a program that calls rand() produces a link-time warning, even   
   though OpenBSD's rand() *doesn't* return deterministic values.   
      
   ld: warning: rand_test.c(rand_test.o:(main)): warning: rand() may return   
   deterministic values, is that what you want?   
      
   (In a similarly questionable decision, OpenBSD's printf triggers a   
   SIGABRT signal if the format string uses "%n".)   
      
   --   
   Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com   
   void Void(void) { Void(); } /* The recursive call of the void */   
      
   --- SoupGate-Win32 v1.05   
    * Origin: you cannot sedate... all the things you hate (1:229/2)   

[   << oldest   |   < older   |   list   |   newer >   |   newest >>   ]


(c) 1994,  bbs@darkrealms.ca