Hello Jim and Kai and Ruben and Friends!

I see something similar to Jim's bug in <tr1/random>, but
not in <random>.

On Wed, Mar 14, 2012 at 2:22 AM, Jim Michaels <[email protected]> wrote:
> /*
> Author: Jim Michaels
> ...
> #include <tr1/random>
> ...
> //problem: this hovers way too long around
> /*
> sample output:
> 18446744072913795932
> 18446744073304931054
> 18446744073000918905
> 18446744073575839711
> 18446744073337503749
> ...

First, Jim's observation does look like a bug to me.  I don't see anything
in his code that looks wrong (but I often overlook things).

Also, when I run a similar test program, I see a similar problem when I
use <tr1/random>:

   00000000003499211612
   00000000000581869302
   00000000003890346734
   00000000003586334585
   00000000000545404204

 but not when I use <random>.

   15028999435905310454
   16708911996216745849
   02342493223442167775
   16848810653347327969
   11664969248402573611

(One speculation on the difference between Jim's bug observation
and mine:  Maybe the high-order word isn't getting set by uniform_int,
and for some reason Jim is getting garbage in the high-order word,
while I am getting zero.)

My complete program and output follow, below.

Note, I am using one of Ruben's std::thread-enabled 4.7.0 64-bit
builds.

I suppose that there is a bug, but if I'm right that it's only in
<tr1/random>, I'm not sure how much we care.  Maybe the
bug fix should be to junk tr1.  I don't have much appetite for
investigating tr1 any further as c++11's <random> seems to
be working correctly in this regard.

> ...
> Jim Michaels
> ...

Thanks for bringing this up, and Happy Hacking!

K. Frank

--- program details ---

C:\random_test>type uniform_test.cpp
#include <iostream>
#include <random>
#include <tr1/random>

int main () {
  std::cout << "<random>..." << std::endl;
  std::mt19937 mte;
  std::uniform_int_distribution<unsigned long long> ull_dist {0ULL,
0xffffffffffffffffULL};

  for (unsigned i = 0; i < 10; i++) {
    std::cout.fill('0');
    std::cout.width(20);
    std::cout << ull_dist (mte) << std::endl;
  }

  std::cout << "<tr1/random>..." << std::endl;
  std::tr1::mt19937 mte2;
  std::tr1::uniform_int<unsigned long long> ull_dist2 {0ULL,
0xffffffffffffffffULL};

  for (unsigned i = 0; i < 10; i++) {
    std::cout.fill('0');
    std::cout.width(20);
    std::cout << ull_dist2 (mte2) << std::endl;
  }

  return 0;
}

C:\random_test>g++ --version
g++ (GCC) 4.7.0 20110829 (experimental)
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.


C:\random_test>g++ -std=c++0x -o uniform_test uniform_test.cpp

C:\random_test>uniform_test
<random>...
15028999435905310454
16708911996216745849
02342493223442167775
16848810653347327969
11664969248402573611
01799302827895858725
05137385360522333466
10088183424363624464
17662883439475955428
17799051847008967418
<tr1/random>...
00000000003499211612
00000000000581869302
00000000003890346734
00000000003586334585
00000000000545404204
00000000004161255391
00000000003922919429
00000000000949333985
00000000002715962298
00000000001323567403

C:\random_test>

------------------------------------------------------------------------------
This SF email is sponsosred by:
Try Windows Azure free for 90 days Click Here 
http://p.sf.net/sfu/sfd2d-msazure
_______________________________________________
Mingw-w64-public mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mingw-w64-public

Reply via email to