コード例 #1
0
float bez_spline::BEZ(int k, int n, float u)
{
	float a = (float)COMB(n, k);
	float b = (float)pow(u, (float)k);
	float c = (float)pow(1.0f - u, (float)(n - k));

	return a * b * c;
}
コード例 #2
0
static PyObject *cosine_sim_expand_dkeys_cpu(PyObject *self, PyObject *args){
    PyArrayObject *keys_in, *mem_in, *numpy_buffer_temp;
	float *keys, *mem, keys_sq_sum, *mem_sq_sum;
	float *comb;
	
	if (!PyArg_ParseTuple(args, "O!O!", &PyArray_Type, &keys_in, &PyArray_Type, &mem_in)) 
		return NULL;
    
	int n_controllers = PyArray_DIM(keys_in, 0);
	int mem_length = PyArray_DIM(keys_in, 1);
	int M = PyArray_DIM(mem_in, 0); // num mem slots
	
	keys = (float *) PyArray_DATA(keys_in);
	mem = (float *) PyArray_DATA(mem_in);
	
	/////////////////////////  output buffer
	int dims[5];
	dims[0] = n_controllers;
	dims[1] = M;
	dims[2] = n_controllers;
	dims[3] = mem_length;
	numpy_buffer_temp = (PyArrayObject *) PyArray_FromDims(4, dims, NPY_FLOAT);
	comb = (float *) PyArray_DATA(numpy_buffer_temp);
	
	//////////////////////// keys_sq_sum, mem_sq_sum
	MALLOC(mem_sq_sum, M  * sizeof(DATA_TYPE))
	memset(mem_sq_sum, 0, M * sizeof(DATA_TYPE));
	
	for(int j = 0; j < M; j++){
		for(int k = 0; k < mem_length; k++){
			mem_sq_sum[j] += MEM(j,k) * MEM(j,k);
		}
		mem_sq_sum[j] = sqrt(mem_sq_sum[j]);
	}
	
	/////////////////////////
	// mem*denom - temp (keys*numer*mem_sq_sum)
	float numer, denom;
	for(int i = 0; i < n_controllers; i++){ // [1]
		keys_sq_sum = 0;
		for(int k = 0; k < mem_length; k++){
			keys_sq_sum += KEYS(i,k) * KEYS(i,k);
		}
		keys_sq_sum = sqrt(keys_sq_sum);
		
		for(int j = 0; j < M; j++){
			denom = keys_sq_sum * mem_sq_sum[j];
			numer = 0;
			for(int k = 0; k < mem_length; k++){
				numer += KEYS(i,k) * MEM(j,k);
				COMB(i,j,i,k) = MEM(j,k) / denom;
			}
			numer /= keys_sq_sum * denom * denom / mem_sq_sum[j];
			
			for(int k = 0; k < mem_length; k++){ // [2]
				COMB(i,j,i,k) -= KEYS(i,k) * numer;
			}
		}
	}
	
	free(mem_sq_sum);
	
	return PyArray_Return(numpy_buffer_temp);
}
コード例 #3
0
void Reassign_Weight() {
  int i,j;
  int is,id;
  double sumprob,maxprob,minprob;

  for (i=1;i<(nbin+1);i++) {
    if (tmpnpar[i]!=0) {
      sumprob=0;
      for (j=1;j<(tmpnpar[i]+1);j++) {
        sumprob+=tmppar[i][j].prob;
      }
      if (sumprob!=0) {
        maxprob=sumprob/npar[i]*sqrt(mmratio);
        minprob=sumprob/npar[i]/sqrt(mmratio);
        Min1(i);
        while (tmppar[i][tmpnpar[i]].prob<minprob) {
          Min2(i);
          COMB(i);
          Min1(i);
        }
        Max(i);
        while (tmppar[i][1].prob>maxprob) {
          SPLIT(i);
          Max(i);
        }
        while (tmpnpar[i]>npar[i]) {
          Min1(i);
          Min2(i);
          COMB(i);
        }
        while (tmpnpar[i]<npar[i]) {
          Max(i);
          SPLIT(i);
        }
        for (j=1;j<(npar[i]+1);j++) {
          par[i][j].prob=tmppar[i][j].prob;
          par[i][j].coord=tmppar[i][j].coord;
          par[i][j].numb=tmppar[i][j].numb;
          par[i][j].tb0=tmppar[i][j].tb0;
          par[i][j].distA=tmppar[i][j].distA;
          par[i][j].distB=tmppar[i][j].distB;
        }
      }
    }
    else {
      for (j=1;j<(npar[i]+1);j++) {
        if (Fava[0]!=0) {
          par[i][j].numb=Fava[Fava[0]];
          Fava[0]-=1;
        }
        else {
          Fexc[0].i+=1;
          Fexc[0].j+=1;
          Fexc[Fexc[0].i].i=i;
          Fexc[Fexc[0].i].j=j;
          par[i][j].numb=Fexc[0].i+nallpar;
        }
       }
      Make_Ghost(i);
    }
  }

  while(Fexc[0].i!=0) {
    if (Fexc[0].i!=Fava[0]) {
      printf("Fava=%d\tFexc=%d!\n",Fava[0],Fexc[0].i);
      for (j=1;j<(Fava[0]+1);j++) {
        printf("Fava[%d]=%d\n",j,Fava[j]);
      }
      printf("Something is wrong!\n");
      exit(1);
    }
    is=Fexc[0].i;
    id=Fava[is];
    par[Fexc[is].i][Fexc[is].j].numb=id;
    is+=nallpar;
    free(rx_states[id-1]);
    rx_states[id-1]=(int *)malloc(nspecies*sizeof(int));
    memcpy(rx_states[id-1],rx_states[is-1],nspecies*sizeof(int));
    free(rx_states[is-1]);
    rx_states[is-1]=(int *)malloc(nspecies*sizeof(int));

    Fexc[0].i-=1;
    Fexc[0].j-=1;
    Fava[0]-=1;
  }
  return;
}
コード例 #4
0
ファイル: bits.c プロジェクト: ethans/demos-linux
int main(int argc, char** argv, char** envp) {
	printf("COMB(0x800,%d) is %d\n", cone, COMB(0x800, cone));
	printf("COMB(0x801,%d) is %d\n", cone, COMB(0x801, cone));
	printf("COMB(%d,%d) is %d\n", one, two, COMB(one, two));
	return(0);
}