8   int choleski_solve(
double *a, 
double *b, 
int nsize, 
int flag);  
     9   int inverse (
double *a, 
int nsize);          
    10   int isymp(
int row, 
int col);  
    12   int indeces_from_set(
int *indeces,
int set, 
int set_size,
int n);
    13   int binomial_coeficient(
int n, 
int k);
    15   inline int isymp(
int row, 
int col)
    24     if(row < col)  k= row + col *(col -1)/2;
    25     else      k= col + row * (row - 1)/2;
    31   inline int binomial_coeficient(
int n, 
int k)
    83   inline int indeces_from_set(
int *indeces,
int set, 
int set_size,
int n)
    94     if( 
set > binomial_coeficient(n, set_size) )
    99     for( i =0,j=0;i<set_size-1;i++,j=indeces[i-1]+1)
   101       k = binomial_coeficient( n - j - 1, set_size - i - 1);
   106         k = binomial_coeficient( n - j - 1, set_size - i - 1);
   111     indeces[i] = j+
set-1;
   117   int decompose (
double *, 
int);
   118   int foresub (
double *,
double *, 
int);
   119   int backsub (
double *,
double *, 
int);
   122 #define NOT_SOLVABLE 0   126   inline int choleski_solve (
double *a, 
double *b, 
int nsize, 
int flag)
   135     if (flag < 1 && flag > 3)
   139     if (! decompose (a, nsize)) 
return NOT_SOLVABLE;
   141     if (flag == 1) 
return SOLVED;
   144     if (! foresub (a, b, nsize)) 
return NOT_SOLVABLE;
   148     if (! backsub (a, b, nsize)) 
return NOT_SOLVABLE;
   150     if (flag == 2) 
return SOLVED;
   160   inline int decompose (
double *a, 
int nsize)
   174     int i, j, k, m, n = 2;
   177     for (k = 0; k < nsize; k++)
   183       for (i = 0; i < k; i++)
   188         for (j = 0; j < i; j++)
   190           sum += *ap4++ * *ap5++;
   194         *ap3 = (*ap3 - sum) / *ap2;ap3++;
   199       for (j = 0; j < k; j++)
   201         sum += *ap1 * *ap1;ap1++;
   209       if ((*ap6 - sum) <= 0)
   210         *ap6 = sqrt(-(*ap6 - sum));
   212         *ap6  = sqrt(*ap6 - sum);
   224   inline int foresub (
double *a,
double *b,
int nsize)
   235     for (i = 1; i < nsize; i++)
   238       for (j = 0, bp2 = b; j < i; j++)
   240         sum += *ap1++ * *bp2++;
   244       *bp1 = (*bp1 - sum) / *ap1;bp1++;ap1++;
   252   inline int backsub (
double *a,
double *b,
int nsize)
   261     double *ap1 = a + (k + k * (k + 1) / 2);
   262     double *ap2 = ap1 - 1;
   270     *bp1 = *bp1 / *ap1;bp1--;
   271     for (i = k - 1; i >= 0; i--)
   275       for (j = nsize - 1, ap3 = ap2--, bp3 = bp2; j >= i + 1; j--)
   277         sum += *ap3 * *bp3--;
   283       *bp1 = (*bp1 - sum) / *ap1;bp1--;
   291   inline int inverse (
double *a, 
int nsize)
   305     while (ap1 < (a + (nsize * (nsize + 1)/2)))
   313     for (i = 1; i < nsize; i++)
   318       for (j = m; j <= nsize; j++)
   325           sum += *ap1 * *ap2++;
   329         *ap3 = -(*ap4) * sum;
   337     ap1 = ap2 = ap3 = ap4 = a;
   338     for (i = 0; i < nsize;)
   342       for (j = i; j < nsize;)
   345         ap1 = ap3 = ap5 + i + n;
   348         for (k = j; k < nsize;)
 Namespace for ISIS/Bullet specific routines.