function: gaussian-random (&optional min max)
If gaussian-random is called with a value for min and nil for max (or vice versa), the function could enter an infinite loop.
example (gaussian-random 100 nil) almost always causes an infinite loop.
If the first call to the local function "gauss" creates a value that does not satisify min, then the local function "guard" enters an infinite loop because guard is called with a value for max that is less than min.
Sincerely,
Andy Peterson
On Mon, Oct 01 2012, Andy Peterson andy.arvid@gmail.com wrote:
function: gaussian-random (&optional min max)
If gaussian-random is called with a value for min and nil for max (or vice versa), the function could enter an infinite loop.
example (gaussian-random 100 nil) almost always causes an infinite loop.
If the first call to the local function "gauss" creates a value that does not satisify min, then the local function "guard" enters an infinite loop because guard is called with a value for max that is less than min.
Hi Andy,
The algorithm used by alexandria is not suitable for this kind of thing. Think about it: you are talking about a 100 sigma event. Even for 10 sigmas, the probability is around 1e-25; for 100 sigmas it is below 1e-2000. Technically, you are not seeing an infinite loop, only a very long calculation using an unsuitable algorithm.
You need to use other algorithms, eg an accept-reject using a scaled exponential. My library cl-random has some code for this in the experimental branch, it has been unit-tested for up to ~7 sigmas (not more because the sampling properties of the distribution are tricky to calculate above that and I haven't had the need to implement it). Please let me know if you need it, I will clean it up and push to the repo (which is bound to happen in a few weeks anyway).
Best,
Tamas
alexandria-devel@common-lisp.net