/*************************************************************************/ /* */ /* Tabluate logs and log factorials (to improve speed) */ /* -------------------------------- */ /* */ /*************************************************************************/ #include "defns.i" #include "types.i" #include "extern.i" float *LogItemNo; double *LogFact; /*************************************************************************/ /* */ /* Set up the array LogItemNo to contain the logs of integers and */ /* the array LogFact to contain logs of factorials (all to base 2) */ /* */ /*************************************************************************/ GenerateLogs() /* ------------ */ { ItemNo i; LogItemNo = (float *) malloc((MaxItem+100) * sizeof(float)); LogFact = (double *) malloc((MaxItem+100) * sizeof(double)); LogItemNo[0] = -1E38; LogItemNo[1] = 0; LogFact[0] = LogFact[1] = 0; ForEach(i, 2, MaxItem+99) { LogItemNo[i] = log((float) i) / Log2; LogFact[i] = LogFact[i-1] + LogItemNo[i]; } }