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