返回一个随机的偶数

Lab*_*bra 4 java

我有以下方法.方法rnd,返回两个边界之间的单个随机整数:

  /* Create next batch of 55 random numbers */
  void advance_random (){
int j1;
double new_random;
for(j1=0; j1<24; j1++){
  new_random = oldrand[j1]-oldrand[j1+31];
  if(new_random<0.0){
    new_random = new_random+1.0;
  }
  oldrand[j1] = new_random;
}
for(j1=24; j1<55; j1++){
  new_random = oldrand[j1]-oldrand[j1-24];
  if(new_random<0.0){
    new_random = new_random+1.0;
  }
  oldrand[j1] = new_random;
}
 } //advance_ramdom

  /* Fetch a single random number between 0.0 and 1.0 */
  double randomperc(){
jrand++;
if(jrand>=55){
  jrand = 1;
  advance_random();
}
return((double)oldrand[jrand]);
  } //randomPerc

  /* Fetch a single random integer between low and high including the bounds */
  synchronized int rnd (int low, int high){
int res;
if (low >= high){
  res = low;
} else {
  res = low + (int)(randomperc()*(high-low+1));
  if (res > high){
    res = high;
  }
}
return (res);
  } // rnd
Run Code Online (Sandbox Code Playgroud)

如何修改它以使返回的数字mod2 = 0?

谢谢

Arm*_*yan 8

如果你可以得到一个范围内的随机数,[a, b]那么你所要做的就是得到一个范围内的随机数,[(a+1)/2, b/2]然后乘以2得到一个随机偶数范围[a, b]


Oli*_*rth 5

使用位掩码强制最低有效位为零:

x = x & ~1;
Run Code Online (Sandbox Code Playgroud)

  • 请注意,应该在调整范围之前确保随机分布.例如,如果范围是[2,4],那么你将获得两倍于4s的两倍.因此,您应该将范围扩展到[2,5]以获得2到4之间的随机分布.当然,对于非常大的范围,这可以忽略不计.如果范围是[3,n],你会得到一些2,这超出了范围. (2认同)