sm64

A Super Mario 64 decompilation
Log | Files | Refs | README | LICENSE

codebook.c (2513B)


      1 #include <stdlib.h>
      2 #include "tabledesign.h"
      3 
      4 void split(double **table, double *delta, int order, int npredictors, double scale)
      5 {
      6     int i, j;
      7 
      8     for (i = 0; i < npredictors; i++)
      9     {
     10         for (j = 0; j <= order; j++)
     11         {
     12             table[i + npredictors][j] = table[i][j] + delta[j] * scale;
     13         }
     14     }
     15 }
     16 
     17 void refine(double **table, int order, int npredictors, double **data, int dataSize, int refineIters, UNUSED double unused)
     18 {
     19     int iter; // spD8
     20     double **rsums;
     21     int *counts; // spD0
     22     double *temp_s7;
     23     double dist;
     24     double dummy; // spC0
     25     double bestValue;
     26     int bestIndex;
     27     int i, j;
     28 
     29     rsums = malloc(npredictors * sizeof(double*));
     30     for (i = 0; i < npredictors; i++)
     31     {
     32         rsums[i] = malloc((order + 1) * sizeof(double));
     33     }
     34 
     35     counts = malloc(npredictors * sizeof(int));
     36     temp_s7 = malloc((order + 1) * sizeof(double));
     37 
     38     for (iter = 0; iter < refineIters; iter++)
     39     {
     40         for (i = 0; i < npredictors; i++)
     41         {
     42             counts[i] = 0;
     43             for (j = 0; j <= order; j++)
     44             {
     45                 rsums[i][j] = 0.0;
     46             }
     47         }
     48 
     49         for (i = 0; i < dataSize; i++)
     50         {
     51             bestValue = 1e30;
     52             bestIndex = 0;
     53 
     54             for (j = 0; j < npredictors; j++)
     55             {
     56                 dist = model_dist(table[j], data[i], order);
     57                 if (dist < bestValue)
     58                 {
     59                     bestValue = dist;
     60                     bestIndex = j;
     61                 }
     62             }
     63 
     64             counts[bestIndex]++;
     65             rfroma(data[i], order, temp_s7);
     66             for (j = 0; j <= order; j++)
     67             {
     68                 rsums[bestIndex][j] += temp_s7[j];
     69             }
     70         }
     71 
     72         for (i = 0; i < npredictors; i++)
     73         {
     74             if (counts[i] > 0)
     75             {
     76                 for (j = 0; j <= order; j++)
     77                 {
     78                     rsums[i][j] /= counts[i];
     79                 }
     80             }
     81         }
     82 
     83         for (i = 0; i < npredictors; i++)
     84         {
     85             durbin(rsums[i], order, temp_s7, table[i], &dummy);
     86 
     87             for (j = 1; j <= order; j++)
     88             {
     89                 if (temp_s7[j] >=  1.0) temp_s7[j] =  0.9999999999;
     90                 if (temp_s7[j] <= -1.0) temp_s7[j] = -0.9999999999;
     91             }
     92 
     93             afromk(temp_s7, table[i], order);
     94         }
     95     }
     96 
     97     free(counts);
     98     for (i = 0; i < npredictors; i++)
     99     {
    100         free(rsums[i]);
    101     }
    102     free(rsums);
    103     free(temp_s7);
    104 }