You are here: Re: Need help to custom the rand function , « PHP Programming Language « IT news, forums, messages
Re: Need help to custom the rand function ,

Posted by Jerry Stuckle on 02/01/08 02:39

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.
jstucklex@attglobal.net
==================

 

Navigation:

[Reply to this message]


Удаленная работа для программистов  •  Как заработать на Google AdSense  •  England, UK  •  статьи на английском  •  PHP MySQL CMS Apache Oscommerce  •  Online Business Knowledge Base  •  DVD MP3 AVI MP4 players codecs conversion help
Home  •  Search  •  Site Map  •  Set as Homepage  •  Add to Favourites

Copyright © 2005-2006 Powered by Custom PHP Programming

Сайт изготовлен в Студии Валентина Петручека
изготовление и поддержка веб-сайтов, разработка программного обеспечения, поисковая оптимизация