arks and execution scripts for testing spatial isolation and SMT interference in MC^2
summaryrefslogblamecommitdiffstats
path: root/dis/Neighborhood/DISstressmarkRNG.h
blob: 6243606d05161afeb85ddaaaa9d8e461e384f1fc (plain) (tree)
1
                   





























































































































































































                                                                                
#include <assert.h>
#include <math.h>

#define IA 16807
#define IM 2147483647
#define AM (1.0/IM)
#define IQ 127773
#define IR 2836
#define NTAB 32
#define NDIV (1+(IM-1)/NTAB)
#define EPS 1.2e-7
#define RNMX (1.0-EPS)

static long iy=0;
static long iv[NTAB];
static long iseed;

int ABS(int x){
  if (x>= 0) return x;
  else
    return (-x);
}

int sign(int x){
  if (x >= 0) return 1;
  else
    return (-1);
}

int MAX(int x, int y){
  if (x>= y) return x;
  else
    return y;
}

int MIN(int x, int y){
  if (x<= y) return x;
  else
    return y;
}

void randInit(long idum)
{
  long j;
  long k;

  assert (idum <= 0);
  assert (iy == 0);

  iseed = idum;
  if (-(iseed)<1){
    iseed = 1;
  }
  else {
    iseed = -(iseed);
  }
  for (j=NTAB+7; j>=0; j--){
    k = (iseed)/IQ;
    iseed = IA*(iseed-k*IQ)-IR*k;
    if (iseed < 0){
      iseed += IM;
    }
    if (j < NTAB){
      iv[j] = iseed;
    }
  }
  iy = iv[0];
}

float randNum()
{
  long j;
  long k;
  float temp;

  assert (iy != 0);
  
  k = (iseed)/IQ;
  iseed = IA*(iseed-k*IQ)-IR*k;

  if (iseed < 0){
    iseed += IM;
  }
  j = iy/NDIV; 
  iy = iv[j];
  iv[j] = iseed;

  temp = AM * iy;

  if (temp > RNMX){
    return RNMX;
  }
  else {
    return temp;
  }
}


float randomFloat(float lowest_float, float highest_float)
{
 float value;
 float range;

assert (lowest_float < highest_float);

range = highest_float - lowest_float;
value = randNum()*(highest_float - lowest_float) + lowest_float;
assert(value >= lowest_float);
assert(value <= highest_float);

return value;

}

float randomNonZeroFloat(float lowest_float, float highest_float, float epsilon)
{

  double range;
  float value;


  assert (lowest_float < 0);
  assert (highest_float > 0);
  assert (epsilon > 0);
  assert ((epsilon < -lowest_float) && (epsilon < highest_float));
  
  range = highest_float - lowest_float;
  value = (randNum() * range)+lowest_float;