i want to write a random function that returns different values in every run.and also takes a variable that defines the limits of the random number.
ex:
random1(100)
it returns a floating points from 0 to 100
Printable View
i want to write a random function that returns different values in every run.and also takes a variable that defines the limits of the random number.
ex:
random1(100)
it returns a floating points from 0 to 100
Perhaps you could find answers to this common question by searching these boards.
-Prelude
Just create a random number of any any value and then use the modulas operator (%) to mod it by 101. Very simple.
ps. If you don't know how to create a random number, there us function is the standard library calle rand() that wiil do this. (it is not a truely random number though)
>Just create a random number of any any value and then use the
>modulas operator (%) to mod it by 101. Very simple.
Assuming you're talking about something like this:
r = rand() % 101;
If not, ignore the rest of this post. There's a problem when using % with rand, it's not very random with lower ranges when you use the low order bits that a construct like this works with. So when you're not working with very large ranges of values, you should use the high order bits by dividing from RAND_MAX. Run this a few times and you'll see that using % with rand isn't quite as random as you may prefer.
-PreludeCode:#include <time.h>
#include <stdio.h>
#include <stdlib.h>
int main ( void )
{
int x;
srand ( (unsigned)time ( NULL ) );
for ( x = 0; x < 10; x++ ) {
printf ( "%d\t", ( rand() * 5 ) / RAND_MAX );
printf ( "%d\n", rand() % 5 );
}
return EXIT_SUCCESS;
}
>r = rand() % 101;
That is exactly what I meant.
Sorry for the bad advice.
Here is a function that should work i think. I found it in an old
homework assignment of mine. Right now it returns an integer value, so I will leave changing it to a float up to him.
Code:int RandomInt(int low, int high)
{
if (low > high) {
printf("RandomInt: low cannot be greater than high.\n");
exit(0);
}
return (high - low + 1) * (rand() / (double) INT_MAX) + low;
}