|
Posted by Jerry Stuckle on 02/01/08 19:35
Fred wrote:
> 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
>
I would have - had you been clear about what you wanted!
--
==================
Remove the "x" from my email address
Jerry Stuckle
JDS Computer Training Corp.
jstucklex@attglobal.net
==================
Navigation:
[Reply to this message]
|