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().

00075     {
00076     // make sure we are internally using at least floats
00077     typedef typename promote_type<eT,float>::result eTp;
00078     
00079     eTp tmp1;
00080     eTp tmp2;
00081     eTp w;
00082     
00083     do
00084       {
00085       tmp1 = eTp(2) * eTp(std::rand()) / eTp(RAND_MAX) - eTp(1);
00086       tmp2 = eTp(2) * eTp(std::rand()) / eTp(RAND_MAX) - eTp(1);
00087       w = tmp1*tmp1 + tmp2*tmp2;
00088       }
00089     while ( w >= eTp(1) );
00090     
00091     return eT( tmp1 * std::sqrt( (eTp(-2) * std::log(w)) / w) );
00092     }