|  | 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] |