Public Member Functions

eop_aux_randn< eT > Struct Template Reference
[Eop_aux]

#include <eop_aux.hpp>

List of all members.

Public Member Functions

 operator eT () const

Detailed Description

template<typename eT>
struct eop_aux_randn< eT >

Definition at line 47 of file eop_aux.hpp.


Member Function Documentation

template<typename eT >
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) );
    }