rng.normal
Moderator: Moderator
rng.normal
I want to have damage in VR handled as a normal distribution and decided to see if T-Engine already had support for random numbers from normal distributions. I found rng.normal, or more specifically "static int rng_normal(lua_State *L)". Do you have any plans to support a floating point version? If I implement one would you add it to T-Engine? I have no experience in random number generators so it might take a while, but I understand if this isn't very high on your priority list. For now I am using rng.normal and it works, but is just discretized and looks a bit funny at times.
<DarkGod> lets say it's intended
Re: rng.normal
If you implement it I'll add it 

[tome] joylove: You can't just release an expansion like one would release a Kraken XD
--
[tome] phantomfrettchen: your ability not to tease anyone is simply stunning
--
[tome] phantomfrettchen: your ability not to tease anyone is simply stunning

Re: rng.normal
Well my first pass appears to work, with a histogram of 10,000 values looking normal (hehe). I added this function to rnglib under the name "normal_float". The Box-Muller transform creates pairs of values, so I am currently saving the extra one and supplying the saved value every other call. I have very little C experience, so if it is faster to drop the static boolean checking and simply throw away the z1 random number I can change it. Any comments or suggestions?
Code: Select all
/*
* Generate a random floating-point number of NORMAL distribution
*
* Uses the Box-Muller transform.
*
*/
static int rng_normal_float(lua_State *L)
{
static const double TWOPI = 6.2831853071795862;
static bool stored = FALSE;
static double z0;
static double z1;
double mean = luaL_checknumber(L, 1);
double std = luaL_checknumber(L, 2);
double u1;
double u2;
if (stored == FALSE)
{
u1 = genrand_real1();
u2 = genrand_real1();
u1 = sqrt(-2 * log(u1));
z0 = u1 * cos(TWOPI * u2);
z1 = u1 * sin(TWOPI * u2);
lua_pushnumber(L, (z0*std)+mean);
stored = TRUE;
}
else
{
lua_pushnumber(L, (z1*std)+mean);
stored = FALSE;
}
return 1;
}
<DarkGod> lets say it's intended
Re: rng.normal
Looks good, taken for beta9
[tome] joylove: You can't just release an expansion like one would release a Kraken XD
--
[tome] phantomfrettchen: your ability not to tease anyone is simply stunning
--
[tome] phantomfrettchen: your ability not to tease anyone is simply stunning

Re: rng.normal
under the name rng.normalFloat
[tome] joylove: You can't just release an expansion like one would release a Kraken XD
--
[tome] phantomfrettchen: your ability not to tease anyone is simply stunning
--
[tome] phantomfrettchen: your ability not to tease anyone is simply stunning
