site_archiver@lists.apple.com Delivered-To: darwin-dev@lists.apple.com User-agent: Mutt/1.5.18 (2008-05-17) On Wed, Nov 25, 2009 at 10:45:42AM -0800, Jens Alfke scratched on the wall:
On Nov 25, 2009, at 9:26 AM, Derek Gaston wrote:
Hello everyone... I've been struggling with rand and srand on OSX 10.6 and 10.5. It seems to me that something is terribly broken.
You shouldn't be using rand; it's not a good PRNG and it was obsoleted ages ago by random(). Even the man page tells you not to use it:
RAND(3) BSD Library Functions Manual RAND(3)
NAME rand, rand_r, srand, sranddev -- bad random number generator ... DESCRIPTION These interfaces are obsoleted by random(3).
This is, I suspect, part of the problem. When random() replaced rand() in the BSD sources ages ago, I'm guessing nobody ever went back and made rand() better. It was understood that you just didn't use rand() and "fixing" it by changing the algorithm would break applications like yours. This is less true in Linux. For one thing, the source code has a much younger lineage, and I'm guessing someone decided it was a good idea to "improve" rand() at some point, even if that meant breaking backwards compatibility. Have you tried you test on a BSD-based system? Regardless, in that situation I'd write my own PRNG. That way you can exactly control the balance between performance and quality and, more importantly, you'll have cross-platform compatibility. From what you're doing, you don't really need a "random" number, you just need a good hash that will go from regular numbers (row/column) to a good coverage of the number domain. Even something like a CRC might be a good choice... unlike many crypto hashes, it does well with just a few bytes of data to chew on. -j -- Jay A. Kreibich < J A Y @ K R E I B I.C H > "Our opponent is an alien starship packed with atomic bombs. We have a protractor." "I'll go home and see if I can scrounge up a ruler and a piece of string." --from Anathem by Neal Stephenson _______________________________________________ Do not post admin requests to the list. They will be ignored. Darwin-dev mailing list (Darwin-dev@lists.apple.com) Help/Unsubscribe/Update your Subscription: http://lists.apple.com/mailman/options/darwin-dev/site_archiver%40lists.appl... This email sent to site_archiver@lists.apple.com