On Fri, Sep 08, 2017 at 07:56:23AM -0400, Tom Worster wrote: > From: Nikita Popov <nikita....@gmail.com> > > > >Sorry for the long delay. I've just applied > >https://github.com/php/php-src/commit/fd07302024bc47082b13b32217147fd39d1e9e61 > >to the 7.2 branch. > > > >Davey, Joe, do we want to take action here for 7.1? It's a pretty > >severe > >bias, but fixing it is going to change seed sequences. I think at this > >point we're too far in the 7.1 cycle to apply this kind of change. > > I think it is very unlikely that anyone has PHP software that relies on > predictable output given a 64-bit seed. And, yes, the bias is bad so I > would not worry about fixing it asap.
This sounds confused. There's no 64-bit seed - PHP's mt_srand() only supports 32-bit seeds. Then you say "the bias is bad" and at the same time "would not worry about fixing it asap", which look inconsistent. The original problem I reported applies to 64-bit builds of PHP - which is probably most builds these days - when mt_rand() is invoked with a range that fits in 32 bits - which again is the typical case for the use of ranges. However, the bias can be large only for large ranges (yet not exceeding 32 bits). For typically used small ranges, the bias is small. Also, fixing the bug doesn't fully change the sequence of generated random numbers - for typically used small ranges, the probability that the fix changes a random number to another (for the same seed) is small. So the sequences will change, but not fully. I'm not sure if this is good or bad, as sometimes complete failure of something that worked for someone before is preferable; I merely point out what will actually happen. Later in the discussion, Nikita pointed out an extra problem (also causing biases) that affected the rarely-used 64-bit ranges. Similarly, fixing it doesn't fully change the sequence of generated random numbers - again, for typically used small ranges (this time relative to the 64-bit space), the probability that the fix changes a random number to another (for the same seed) is small. Another detail is that these fixes make 32- and 64-bit builds of PHP consistent, which isn't the case for 7.1.x now. So retaining the bugs in 7.1.x for consistent behavior doesn't exactly achieve that - it does for consistency within 7.1.x series, but not across 32- vs. 64-bit builds. Fixing the bugs would achieve the latter, but break the former. I have no strong preference here. I merely point out the confusion and try to correct it. Alexander -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php