// (c)2008 Stefan Hollos and Richard Hollos

function sim_fbet(nb,retv,prbv,ff)
{var n=nb+1;var a=new Array(n);var i;var rv=random_var_create(prbv);a[0]=1;for(i=1,a0=1;i<n;++i){a0*=1+ff*retv[rv()];a[i]=a0;}
return a;}
function sim_fbet_double(nb,ret1v,prb1v,ret2v,prb2v,ff1,ff2)
{var n=nb+1;var a=new Array(n);var i;var rv1=random_var_create(prb1v);var rv2=random_var_create(prb2v);a[0]=1;for(i=1,a0=1;i<n;++i){a0*=1+ff1*ret1v[rv1()]+ff2*ret2v[rv2()];a[i]=a0;}
return a;}
function sim_fbet_bond(nb,retv,prbv,ff,retb)
{var n=nb+1;var a=new Array(n);var i;var rv=random_var_create(prbv);a[0]=1;for(i=1,a0=1;i<n;++i){a0*=1+retb+ff*(retv[rv()]-retb);a[i]=a0;}
return a;}
function random_var_create(prbv)
{var passback=function(){var i,x;var urv=Math.random();for(i=0,x=0;;++i){x+=prbv[i];if(urv<x)return i;}}
return passback;}
function random_var_hist(x,n,nhv)
{var histv=new Array(n);var i;for(i=0;i<n;++i)
histv[i]=0;for(i=0;i<nhv;++i)
histv[x()]+=1;for(i=0;i<n;++i)
histv[i]/=nhv;return histv;}