开发者

Generating random numbers from -n to n in C

I want to generate random numbers from -n to n excluding 0. Can someone 开发者_如何学编程provide me the code in C? How to exclude 0?


One idea might be to generate a random number x in the range [1,2n], inclusive. Then return -(x - n) for x larger than n, else just return x.

This should work:

int my_random(int n)
{
  const int x = 1 + rand() / (RAND_MAX / (2 * n) + 1);

  return x > n ? -(x - n) : x;
}

See the comp.lang.c FAQ for more information about how to use rand() safely; it explains the above usage.


The simplest thing I can suggest to do is to generate a Random number between 0 and 2n and then to do the math trick:

result= n - randomNumber 

Although 0 might be very unlikely you can check for that using an If and redo the random number generation.


int random(int N) 
{ 
  int x;
  do{
    x=rand()%(N*2+1)-N;
  }while(x==0);
  return x;
}

It chooses a number from -N to N, but keeps on doing it if it is 0.

An alternative, as suggested in the comments, generates a number between -N and N-1 and increments it if its positive or 0:

int random(int N) 
{ 
  int x;      
  x=rand()%(N*2)-N;
  if(x>=0) x++;
  return x;
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜