Different random shuffles generated when compiled with gdc than with dmd

Andrew Brown via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sun Jun 1 06:15:57 PDT 2014


Thank you for hunting down the difference, in my case it's not a 
deal breaking problem. I can just specify the compiler and 
language version, then the results become reproducible. And I'm 
sure I'll appreciate the performance boost!

On Sunday, 1 June 2014 at 12:11:22 UTC, Ivan Kazmenko wrote:
> On Saturday, 31 May 2014 at 21:22:48 UTC, Joseph Rushton 
> Wakeling via Digitalmars-d-learn wrote:
>> On 31/05/14 22:37, Joseph Rushton Wakeling via 
>> Digitalmars-d-learn wrote:
>>> On 30/05/14 22:45, monarch_dodra via Digitalmars-d-learn 
>>> wrote:
>>>> Didn't you make changes to how and when the global PRNG is 
>>>> popped and accessed
>>>> in randomShuffle? I figured it *could* be an explanation.
>>>
>>> I think it's more likely that the culprit is either your set 
>>> of patches to the
>>> Mersenne Twister, or the patches made to uniform() (which is 
>>> called by
>>> partialShuffle).  I'll look more deeply into this.
>>
>> It's due to the the updated uniform() provided in this pull 
>> request:
>> https://github.com/D-Programming-Language/phobos/commit/fc48d56284f19bf171780554b63b4ae83808b894
>
> I second the thought that reproducibility across different 
> versions is an important feature of any random generation 
> library.  Sadly, I didn't use a language yet which supported 
> such a flavor of reproducibility for a significant period of 
> time in its default random library, so I have to use my own 
> randomness routines when it matters.  I've reported my concern 
> [1] at the moment of breakage, but apparently it didn't 
> convince people.  Perhaps I should make a more significant 
> effort next time (like a pull request) for the things that 
> matter to me.  Well, now I know it does matter for others, at 
> least.
>
> In short, if uniform() has to be tweaked, the sooner it 
> happens, the better.
>
> Alternatively, the library design could allow different 
> uniform() implementations to be plugged in, and provide legacy 
> implementations along with the current (default) one.  In that 
> case, all one has to do to reproduce the old behavior is to 
> plug the appropriate one in.
>
> [1] 
> http://forum.dlang.org/thread/vgmdoyyqhcqurpmobyuy@forum.dlang.org#post-gjuprkxzmcbdixtbucea:40forum.dlang.org



More information about the Digitalmars-d-learn mailing list