Re: [Yade-users] [Question #253257]: generate a random number in the C++ code

2014-08-19 Thread Raphaël Maurin
Question #253257 on Yade changed:
https://answers.launchpad.net/yade/+question/253257

Raphaël Maurin posted a new comment:
Thank you for your replies.

I just had a quick look at a review about random number generator in the
chapter 7 of [1]. It is very interesting, and well detailed. They
underline the fact that some usual generator proposed can be pretty bad,
because the parametrization of the generators can be very important for
the randomness.

In my case, the random number generation is important but not crucial so
I am not looking for something perfect but good enough.  It seems that
the linear congruential generators, as the one you use Klaus are adapted
to my use. The parametrization the generators  minstd_rand0 proposed in
boost library (variation of the one you are using : minstd_rand) is
based on the parametrization proposed by Park and Miller, which is cited
as an efficient parametrization by [1]. It is described as a a good
minimal standard random number generator.

For people interested in more efficient generator, I think it is worth
having a look at [1].

One last question Klaus, how did you test the random number generator
exactly ?

Thank you all for the help !

Raphaël


[1] p.274 Numerical Recipes in C: The Art of Scientific Computing, Second 
Edition, William H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. 
Vetterling. (1992)
http://www2.units.it/ipl/students_area/imm2/files/Numerical_Recipes.pdf

-- 
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-users] [Question #253257]: generate a random number in the C++ code

2014-08-19 Thread Klaus Thoeni
Question #253257 on Yade changed:
https://answers.launchpad.net/yade/+question/253257

Klaus Thoeni posted a new comment:
Hi,

as far as I remember I did some simple tests by generating several set
of numbers using different number generators and seed numbers. Then I
did some simple statistics for each set in order to check their
distributions.

HTH Klaus

-- 
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp


[Yade-users] [Question #253257]: generate a random number in the C++ code

2014-08-18 Thread Raphaël Maurin
New question #253257 on Yade:
https://answers.launchpad.net/yade/+question/253257

Hi all, 
I need to generate a random number from a gaussian distribution in the C++ code 
of Yade. 
For that, basing myself on 
http://www.cplusplus.com/reference/random/normal_distribution/
I wrote in the cpp file : 
#includerandom
std::default_random_engine generator;
std::normal_distributiondouble distribution(0.0,1.0);
double number = distribution(generator);

When compiling, I get an error which I do not understand :

In file included from /usr/include/c++/4.6/random:35:0,
 from 
/home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:13:
/usr/include/c++/4.6/bits/c++0x_warning.h:32:2: erreur: #error This file 
requires compiler and library support for the upcoming ISO C++ standard, C++0x. 
This support is currently experimental, and must be enabled with the -std=c++0x 
or -std=gnu++0x compiler options.
/home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp: In member 
function ‘virtual void HydroForceEngine::action()’:
/home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:94:3: erreur: 
‘default_random_engine’ is not a member of ‘std’
/home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:94:30: erreur: 
expected ‘;’ before ‘generator’
/home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:95:3: erreur: 
‘normal_distribution’ is not a member of ‘std’
/home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:95:28: erreur: 
expected primary-expression before ‘double’
/home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:95:28: erreur: 
expected ‘;’ before ‘double’
/home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:109:27: erreur: 
‘generator’ was not declared in this scope
/home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:109:36: erreur: 
‘distribution’ was not declared in this scope
make[2]: *** [CMakeFiles/yade.dir/pkg/common/ForceEngine.cpp.o] Erreur 1
make[2]: *** Attente des tâches non terminées
make[1]: *** [CMakeFiles/yade.dir/all] Erreur 2
make: *** [all] Erreur 2


Do you have an idea from where this error come from ? 
If necessary I can put the whole code but I don't think it will bring 
something. 

Raphaël

-- 
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-users] [Question #253257]: generate a random number in the C++ code

2014-08-18 Thread Anton Gladky
Hi,

are you using the latest trunk version?
There we have already enabled C++11, which you seems need for
the compilation of this code.

Cheers,

Anton


2014-08-18 13:56 GMT+02:00 Raphaël Maurin
question253...@answers.launchpad.net:
 New question #253257 on Yade:
 https://answers.launchpad.net/yade/+question/253257

 Hi all,
 I need to generate a random number from a gaussian distribution in the C++ 
 code of Yade.
 For that, basing myself on 
 http://www.cplusplus.com/reference/random/normal_distribution/
 I wrote in the cpp file :
 #includerandom
 std::default_random_engine generator;
 std::normal_distributiondouble distribution(0.0,1.0);
 double number = distribution(generator);

 When compiling, I get an error which I do not understand :

 In file included from /usr/include/c++/4.6/random:35:0,
  from 
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:13:
 /usr/include/c++/4.6/bits/c++0x_warning.h:32:2: erreur: #error This file 
 requires compiler and library support for the upcoming ISO C++ standard, 
 C++0x. This support is currently experimental, and must be enabled with the 
 -std=c++0x or -std=gnu++0x compiler options.
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp: In member 
 function ‘virtual void HydroForceEngine::action()’:
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:94:3: erreur: 
 ‘default_random_engine’ is not a member of ‘std’
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:94:30: erreur: 
 expected ‘;’ before ‘generator’
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:95:3: erreur: 
 ‘normal_distribution’ is not a member of ‘std’
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:95:28: erreur: 
 expected primary-expression before ‘double’
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:95:28: erreur: 
 expected ‘;’ before ‘double’
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:109:27: 
 erreur: ‘generator’ was not declared in this scope
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:109:36: 
 erreur: ‘distribution’ was not declared in this scope
 make[2]: *** [CMakeFiles/yade.dir/pkg/common/ForceEngine.cpp.o] Erreur 1
 make[2]: *** Attente des tâches non terminées
 make[1]: *** [CMakeFiles/yade.dir/all] Erreur 2
 make: *** [all] Erreur 2


 Do you have an idea from where this error come from ?
 If necessary I can put the whole code but I don't think it will bring 
 something.

 Raphaël

 --
 You received this question notification because you are a member of
 yade-users, which is an answer contact for Yade.

 ___
 Mailing list: https://launchpad.net/~yade-users
 Post to : yade-users@lists.launchpad.net
 Unsubscribe : https://launchpad.net/~yade-users
 More help   : https://help.launchpad.net/ListHelp

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-users] [Question #253257]: generate a random number in the C++ code

2014-08-18 Thread Anton Gladky
Question #253257 on Yade changed:
https://answers.launchpad.net/yade/+question/253257

Status: Open = Answered

Anton Gladky proposed the following answer:
Hi,

are you using the latest trunk version?
There we have already enabled C++11, which you seems need for
the compilation of this code.

Cheers,

Anton


2014-08-18 13:56 GMT+02:00 Raphaël Maurin
question253...@answers.launchpad.net:
 New question #253257 on Yade:
 https://answers.launchpad.net/yade/+question/253257

 Hi all,
 I need to generate a random number from a gaussian distribution in the C++ 
 code of Yade.
 For that, basing myself on 
 http://www.cplusplus.com/reference/random/normal_distribution/
 I wrote in the cpp file :
 #includerandom
 std::default_random_engine generator;
 std::normal_distributiondouble distribution(0.0,1.0);
 double number = distribution(generator);

 When compiling, I get an error which I do not understand :

 In file included from /usr/include/c++/4.6/random:35:0,
  from 
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:13:
 /usr/include/c++/4.6/bits/c++0x_warning.h:32:2: erreur: #error This file 
 requires compiler and library support for the upcoming ISO C++ standard, 
 C++0x. This support is currently experimental, and must be enabled with the 
 -std=c++0x or -std=gnu++0x compiler options.
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp: In member 
 function ‘virtual void HydroForceEngine::action()’:
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:94:3: erreur: 
 ‘default_random_engine’ is not a member of ‘std’
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:94:30: erreur: 
 expected ‘;’ before ‘generator’
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:95:3: erreur: 
 ‘normal_distribution’ is not a member of ‘std’
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:95:28: erreur: 
 expected primary-expression before ‘double’
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:95:28: erreur: 
 expected ‘;’ before ‘double’
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:109:27: 
 erreur: ‘generator’ was not declared in this scope
 /home/raphael/these/code/Yade/trunk/pkg/common/ForceEngine.cpp:109:36: 
 erreur: ‘distribution’ was not declared in this scope
 make[2]: *** [CMakeFiles/yade.dir/pkg/common/ForceEngine.cpp.o] Erreur 1
 make[2]: *** Attente des tâches non terminées
 make[1]: *** [CMakeFiles/yade.dir/all] Erreur 2
 make: *** [all] Erreur 2


 Do you have an idea from where this error come from ?
 If necessary I can put the whole code but I don't think it will bring 
 something.

 Raphaël

 --
 You received this question notification because you are a member of
 yade-users, which is an answer contact for Yade.

 ___
 Mailing list: https://launchpad.net/~yade-users
 Post to : yade-users@lists.launchpad.net
 Unsubscribe : https://launchpad.net/~yade-users
 More help   : https://help.launchpad.net/ListHelp

-- 
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-users] [Question #253257]: generate a random number in the C++ code

2014-08-18 Thread Raphaël Maurin
Question #253257 on Yade changed:
https://answers.launchpad.net/yade/+question/253257

Status: Answered = Solved

Raphaël Maurin confirmed that the question is solved:
Hi Anton, 
I was using the 29/06/2014 version, I updated and it solved the problem.  
Thank you !
Raphaël

-- 
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-users] [Question #253257]: generate a random number in the C++ code

2014-08-18 Thread Raphaël Maurin
Question #253257 on Yade changed:
https://answers.launchpad.net/yade/+question/253257

Raphaël Maurin confirmed that the question is solved:
Thanks Anton Gladky, that solved my question.

-- 
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-users] [Question #253257]: generate a random number in the C++ code

2014-08-18 Thread Raphaël Maurin
Question #253257 on Yade changed:
https://answers.launchpad.net/yade/+question/253257

Raphaël Maurin posted a new comment:
One last thing, the random number generator using 
#includerandom
std::default_random_engine generator;
std::normal_distributiondouble distribution(0.0,1.0);
double number = distribution(generator);

is pretty bad, I am able to see by eyes some number which are repeated
many times...I don't like it much. Does someone knows a better way to
generate random numbers in C++ ?

Thanks !

Raphaël

-- 
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-users] [Question #253257]: generate a random number in the C++ code

2014-08-18 Thread Jan Stránský
Question #253257 on Yade changed:
https://answers.launchpad.net/yade/+question/253257

Jan Stránský posted a new comment:
Hi Raphael,

to generate random number in the interval 0 to 1, I use

double random() { return (double)rand()/(double)RAND_MAX; }

for normal distribution I use Box-Muller method (see also [1,2])

// function generating normally distributed random numbers using Box-Muller
method
double randNormal (double mean, double stddev, double min=-1e200, double
max=1e200) {
   double r, u, v, c, ret;
   do {
  do {
 u = 2*(double)rand() / (double)RAND_MAX-1;
 v = 2*(double)rand() / (double)RAND_MAX-1;
 r = u*u + v*v;
  } while (r==0. || r1.);
  c = sqrt(-2*log(r)/r);
  ret = mean + u*c*stddev;
   } while (ret = min || ret = max);
   return ret;
}

cheers
Jan

[1] http://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform
[2]
http://math60082.blogspot.cz/2013/03/c-coding-random-numbers-and-monte-carlo.html



2014-08-18 19:36 GMT+02:00 Raphaël Maurin 
question253...@answers.launchpad.net:

 Question #253257 on Yade changed:
 https://answers.launchpad.net/yade/+question/253257

 Raphaël Maurin posted a new comment:
 One last thing, the random number generator using
 #includerandom
 std::default_random_engine generator;
 std::normal_distributiondouble distribution(0.0,1.0);
 double number = distribution(generator);

 is pretty bad, I am able to see by eyes some number which are repeated
 many times...I don't like it much. Does someone knows a better way to
 generate random numbers in C++ ?

 Thanks !

 Raphaël

 --
 You received this question notification because you are a member of
 yade-users, which is an answer contact for Yade.

 ___
 Mailing list: https://launchpad.net/~yade-users
 Post to : yade-users@lists.launchpad.net
 Unsubscribe : https://launchpad.net/~yade-users
 More help   : https://help.launchpad.net/ListHelp


-- 
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-users] [Question #253257]: generate a random number in the C++ code

2014-08-18 Thread Bruno Chareyre
Question #253257 on Yade changed:
https://answers.launchpad.net/yade/+question/253257

Bruno Chareyre posted a new comment:
I suspect the problem is in the generator, not in the distribution.
In other words, Box-Muller based on std::default_random_engine would be bad as 
well.

I guess you have seen the list of available generators [1]. Not sure which one 
is best but, for the one you tried it says:
provides at least acceptable engine behavior for relatively casual, inexpert, 
and/or lightweight use...

I have no idea what is used for std::rand(). It seems it is
implementation dependent. It could be a wrapper of
std::default_random_engine...

[1] http://www.cplusplus.com/reference/random/

-- 
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp


Re: [Yade-users] [Question #253257]: generate a random number in the C++ code

2014-08-18 Thread Klaus Thoeni
Question #253257 on Yade changed:
https://answers.launchpad.net/yade/+question/253257

Klaus Thoeni posted a new comment:
Hi,

 I am using boost's random number generators. I tested them and I am
very happy. Have a look in the code [1] and here [2].

Cheers,
Klaus

[1] https://github.com/yade/trunk/blob/master/pkg/dem/WirePM.cpp
[2] http://www.boost.org/doc/libs/1_55_0/doc/html/boost_random.html

-- 
You received this question notification because you are a member of
yade-users, which is an answer contact for Yade.

___
Mailing list: https://launchpad.net/~yade-users
Post to : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp