void choldc(double **a, int n, double p[]) { double** A; double *P; int i,j,k; /* if(!(A = (double **)(malloc(sizeof(double *) * (n+1))))) error("Memory allocation failed for A in choldc.c \n"); */ if(!(P = (double *)(R_alloc((n+1), sizeof(double) )))) error("Memory allocation failed for P in choldc.c \n"); /* for(i = 0; i <= n; i++) { if(!(A[i] = (double *)(malloc(sizeof(double) * (n+1))))) error("Memory allocation failed for A in choldc.c \n"); } */ for(i = 0; i < n; i++) { P[i+1] = (double)(p[i]); /* for(j = 0; j <n ; j++) A[i+1][j+1] = (double)(a[i][j]); */ } /* double_choldc(A,n,P); */ double_choldc(a,n,P); for(i = 0; i < n; i++) { p[i] = (double)(P[i+1]); /* for(j = 0; j <n ; j++) a[i][j] = (double)(A[i+1][j+1]); */ } }
void dp_choldc(Data_Obj *a_dp, Data_Obj *p_dp) { unsigned m, n; void *a_rowlist[MAX_DIM]; /* n=OBJ_ROWS(a_dp); if( n > MAX_DIM ){ NWARN("Sorry, MAX dimension exceeded in dp_choldc"); sprintf(DEFAULT_ERROR_STRING,"dp_choldc: MAX_DIM = %d, n = %d", MAX_DIM,n); NADVISE(DEFAULT_ERROR_STRING); return; } */ n=OBJ_COLS(a_dp); m=OBJ_ROWS(a_dp); if( n > MAX_DIM || m > MAX_DIM ){ NWARN("Sorry, MAX dimension exceeded in dp_choldc"); sprintf(DEFAULT_ERROR_STRING,"dp_choldc: MAX_DIM = %d, n = %d, m = %d", MAX_DIM,n,m); NADVISE(DEFAULT_ERROR_STRING); return; } printf("nrmenu:numrec.c data %f\n", *((float *)OBJ_DATA_PTR(a_dp))); if( OBJ_MACH_PREC(a_dp) == PREC_SP ){ float_init_rowlist((float **)(void *)a_rowlist,a_dp); float_choldc(((float **)(void *)a_rowlist)-1,n,((float *)OBJ_DATA_PTR(p_dp))-1); } else if( OBJ_MACH_PREC(a_dp) == PREC_DP ){ double_init_rowlist((double **)(void *)a_rowlist,a_dp); double_choldc(((double **)(void *)a_rowlist)-1,n,((double *)OBJ_DATA_PTR(p_dp))-1); } else { NWARN("bad machine precision in dp_choldc"); } }