#include <eop_aux.hpp>
Public Member Functions | |
| operator eT () const | |
Definition at line 47 of file eop_aux.hpp.
| eop_aux_randn< eT >::operator eT | ( | ) | const [inline] |
Definition at line 74 of file eop_aux.hpp.
References log(), rand(), and sqrt().
{
// make sure we are internally using at least floats
typedef typename promote_type<eT,float>::result eTp;
eTp tmp1;
eTp tmp2;
eTp w;
do
{
tmp1 = eTp(2) * eTp(std::rand()) / eTp(RAND_MAX) - eTp(1);
tmp2 = eTp(2) * eTp(std::rand()) / eTp(RAND_MAX) - eTp(1);
w = tmp1*tmp1 + tmp2*tmp2;
}
while ( w >= eTp(1) );
return eT( tmp1 * std::sqrt( (eTp(-2) * std::log(w)) / w) );
}