1234567891011121314151617181920212223242526272829303132333435363738394041424344454647# 1 "src/base/stats/owl_base_stats_dist_gaussian.ml"(*
* OWL - OCaml Scientific and Engineering Computing
* Copyright (c) 2016-2019 Liang Wang <liang.wang@cl.cam.ac.uk>
*)let_u1=ref0.let_u2=ref0.let_case=reffalselet_z0=ref0.let_z1=ref1.letstd_gaussian_rvs()=if!_casethen(_case:=false;!_z1)else(_case:=true;_u1:=Random.float1.;_u2:=Random.float1.;_z0:=(sqrt((~-.2.)*.(log(!_u1))))*.(cos(2.*.Owl_const.pi*.(!_u2)));_z1:=(sqrt((~-.2.)*.(log(!_u1))))*.(sin(2.*.Owl_const.pi*.(!_u2)));!_z0)(* TODO: use the polar, is more efficient *)letgaussian_rvs~mu~sigma=if!_casethen(_case:=false;mu+.sigma*.!_z1)else(_case:=true;_u1:=Random.float1.;_u2:=Random.float1.;_z0:=(sqrt((~-.2.)*.(log(!_u1))))*.(cos(2.*.Owl_const.pi*.(!_u2)));_z1:=(sqrt((~-.2.)*.(log(!_u1))))*.(sin(2.*.Owl_const.pi*.(!_u2)));mu+.sigma*.!_z0)