|
Posted by Fred on 02/01/08 19:17
On 31 jan, 21:39, Jerry Stuckle <jstuck...@attglobal.net> wrote:
> Fred wrote:
> > On 31 jan, 14:29, The Natural Philosopher <a...@b.c> wrote:
> >> Fred wrote:
> >>> Hi guys,
> >>> I was wondering how could i get a random number exemple between 1 and
> >>> 100 but with n% of getting some value over a number x.
> >>> Thanks a lot in advance.
> >>> Fred
> >> Never mind Jerry, No one else does.
>
> >> So you want a random number from a weighted distribution?
>
> >> Your spec doesn't contain quite enough data to formulate the formula,
> >> since there are an infinite number of distributions that have N% over
> >> value X..
>
> >> One example, is that you first of all get a random number between 0 and
> >> 100: If this is greater than N, then select a random number greater than
> >> X, else select one less than X.
>
> >> So in pseudo code where RAND(X) returns a number between 0 and X-1...
>
> >> if ((RAND(100))<N) THEN RETURN RAND(X) ELSE RETURN(X+RAND(100-X));
>
> > Thanks for the info, i wont mind on him then =)
>
> > Almost there with the code,
>
> > Let me add some real number in the exemple :
>
> > i know before the random what number i must have over let take 50 for
> > the exemple,
> > i also need the random to still pick between 0 and 100, but with a
> > chance of 60% (exemple) to draw something over 50 .
>
> > Thanks
>
> Actually, the troll "Natural Philosopher" is one one who should be
> ignored. He seldom has anything to say that is correct. I was just
> pointing out you really aren't looking for a random number, from your
> description. Maybe a minor point to you, but very important when
> creating an algorithm.
>
> The real question here is, what kind of distribution do you want? For
> example, do you want a linear distribution, an exponential or
> logarithmic distribution, or like you said here, a 60% chance of being
> over 50?
>
> In the case you cited, you want 1-50 to occur 40% of the time, and
> 51-100 to occur 60% of the time (approximately). Something like this
> might work (not tested but the algorithm should work):
>
> function notReallyRand() (
> $temp = mt_rand(0,999);
> if ($temp < 400)
> return intval($temp/8);
> else
> return intval((($temp-400) / 12) + 50);
>
> }
>
> It gets a random number between 0 and 999. If the random number is
> between 0 and 399 (inclusive), it returns value / 8 as an int (0-49).
>
> If the value is >= 400, it subtracts 400 from the value (0-599) and
> divides by 12 (0-49.xx). It add 50 to this and returns the int value
> (50-99).
>
> You can adjust values as necessary.
>
> --
> ==================
> Remove the "x" from my email address
> Jerry Stuckle
> JDS Computer Training Corp.
> jstuck...@attglobal.net
> ==================
Thats exaclty the kind of algorythm i needed thanks a lot man , you
should have said that first =)
Ive tweak it a bit and its doiing a great job !
Thanks again !
Fred
Navigation:
[Reply to this message]
|