[Top][All Lists]

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Help-gsl] Zipf Random Number Generator

From: Michael Dürr
Subject: Re: [Help-gsl] Zipf Random Number Generator
Date: Fri, 30 May 2008 12:02:07 +0200
User-agent: Thunderbird (X11/20080505)

Hi Martin,

thanks for your answer!
I had a look at the algorithm and implemented the following thing:

int RNG::zipfRandom(double skew) {
        double a = skew;
        double b = pow(2.0, a - 1.0);
        double X, T, U, V;
        do {
                U = randomDouble(); // produces double in range [0.0..1.0]
                V = randomDouble();
                X = floor(pow(U, -1.0/a - 1.0));
                T = pow(1.0 + 1.0/X, a - 1.0);
        } while (V*X*(T - 1.0)/(b - 1.0) > (T/b));
        return static_cast<int>(X);

I'm not that familiar with statistics, but I need this distribution to perform
some simulations and I want to be certain about the correct application of this
function. I attached the output for zipfRandom(1.4) as pdf. Do you recognize any
error in this function?

I've got two more questions:
- I read something a bout the Zipf Exponent which I have to set to 0.4. Do I
achieve this by setting the skew parameter to 1.4?
- How can I limit the number range to a certain interval e.g. [1..65636] without
violating the randomness in the distribution?

Again, excuse me for my rather silly questions...


Martin Jansche wrote:
Devroye gives a rejection method for sampling from the Zipf
distribution here:

-- mj

On Wed, May 28, 2008 at 4:25 PM, Michael Duerr <address@hidden> wrote:

I'm looking for a function that can produce random numbers that are
Something like:

int zipfian(double skew, int N),

where skew is the skew factor (e.g. 0.4) and N the upper limit of the range
(e.g. [0, N) )

Does gsl hold something similar or can you provide me a reference for a
sample implementation?


Help-gsl mailing list

Attachment: plot.pdf
Description: Adobe PDF document

reply via email to

[Prev in Thread] Current Thread [Next in Thread]