This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

rand function

I would like to control the output of the below random function. I want that it return a number between the min and the max parameters. but it didn't. can you tell what should I change to do that.
in the web, I found that 10000 should be the maximun that can be generated

I use a f340 with the tcp-ip conf wiz.

int random(int min, int max){ int res = min + (int)(my_rand()/10000*(max-1)); return res;
}

Parents
  • I understand what you said about probability of occuring. can you tell me the way to make it right?

    Somewhat better in terms of distribution would be:

    long tmp;
    
    tmp = my_rand();
    tmp = tmp * (max - min);
    tmp = (tmp + (MAX_RAND / 2)) / MAX_RAND;
    tmp = tmp + min;
    

    Of course, the price to pay is additional computational effort (multiplication and division take a while on a '51, especially with long integers).

Reply
  • I understand what you said about probability of occuring. can you tell me the way to make it right?

    Somewhat better in terms of distribution would be:

    long tmp;
    
    tmp = my_rand();
    tmp = tmp * (max - min);
    tmp = (tmp + (MAX_RAND / 2)) / MAX_RAND;
    tmp = tmp + min;
    

    Of course, the price to pay is additional computational effort (multiplication and division take a while on a '51, especially with long integers).

Children