/* 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; }
void Socket::init(const int isServer, const int isUinx) { setNonBlocking(); setReUseAddr(); isServer ? initAccept(isUinx) : initSndRcv(isUinx); }