/* The algorithm compute best exact number configuration.
 * d is denominator configuration of size NUM_DENOM. c/b is price
 * configuration of size MAX_PRICE. e/g/f is number configuration of size
 * MAX_PRICE*/
int bestExactNumber(int *rd, int *rc, int *rb, int *re, int *rg, int*rf, double N){
  int c[MAX_PRICE];
  int b[MAX_PRICE];
  int d[NUM_DENOM];
  int e[MAX_PRICE];
  int f[MAX_PRICE];
  int g[MAX_PRICE];
  int ret, i = 0, j = 0;
  double pcost = DBL_MAX, cost;

  //Initialization
  ret = initAccept();
  for(j = 0; j < NUM_DENOM; j = j + 1){
    d[j] = j + 1;
    rd[j] = d[j];
  }

  while(nextDenom(d) == SC_SUCCESS){
//    printf("%d %d %d %d %d\n",d[0],d[1],d[2],d[3],d[4]);
    if(acceptDenom(d) != SC_SUCCESS){
      continue;
    }
    ret = exactChange(d,c,b);
    /*ret = exactNumber(c,e,g,f);
      cost = costExactChange(e, N);*/
    cost = prunedExactNumber(c,e, g, f, N, pcost);
    if (cost < pcost){
      pcost = cost;
      for(j = 0; j < NUM_DENOM; j = j + 1){
	rd[j] = d[j];
      }
      for(i = 0; i < MAX_PRICE; i = i + 1){
	rc[i] = c[i];
	rb[i] = b[i];
	re[i] = e[i];
	rg[i] = g[i];
	rf[i] = f[i];
      }
    }
  }

  return SC_SUCCESS;
}
示例#2
0
void Socket::init(const int isServer, const int isUinx)
{
    setNonBlocking();
    setReUseAddr();
    isServer ? initAccept(isUinx) : initSndRcv(isUinx);
}