On Wednesday, May 30, 2001, at 03:35 PM, Damian Ivereigh wrote:
On Wednesday, May 30, 2001, at 02:21 PM, Anders Carlsson wrote:Really? I just based it on the g_rand_boolean macro: #define g_rand_boolean(rand) (g_rand_int ((rand)) & (1<<15)) Is that wrong too?On 30 May 2001 13:19:27 -0700, Darin Adler wrote: I think so.I don't think it makes much difference. If the g_rand_int() function where truly random (i.e. each number had an equal chance of occuring, regardless of what the last number was) then it would absolutely make no difference (all your doing is selecting which bit to use). However I would have thought that the least significant bit was more likely to have a better spectral spread than the most significant bit. This is all dragging up college math that is a bit rusty.
My suggested version: #define g_rand_boolean(rand) ((g_rand_int (rand) >> 15) & 1)The g_rand_int() function is not "truly random". It's a pseudorandom number generator. But this is beside the point, because both the existing macro any my proposed changed macro use the 16th significant bit. Whether to use the most or least significant bit is not what I'm criticizing.
The issue is whether 0x8000 is a good value for a function that returns a "boolean" to return. the original function returns 0 half of the time and 0x8000 the other half of the time. I prefer to use 0 and 1 for boolean values.
-- Darin
PS: The least significant bits are in pseudorandom number generators are
often not very random, so decisions should always be influenced primarily
by the most significant digits. This is mentioned in Chapter 3 of Knuth's
Art of Computer Programming in his [section 3.6, principle vi] and many
other places.