This is sinTab.c in view mode; [Download] [Up]
#include "../sms.h" static double fSineScale; static int nSineTabSize; /* clear sine table */ void ClearSine() { if(pFSTab) free(pFSTab); pFSTab = 0; } /* prepares the sine table, returns 1 if allocations made, 0 on failure * int nTableSize; size of table */ int PrepSine (int nTableSize) { register int i; double fTheta; if((pFSTab = (double *)malloc(nTableSize*sizeof(double))) == 0) return (0); nSineTabSize = nTableSize; fSineScale = (double)(TWO_PI) / (double)(nSineTabSize - 1); fTheta = 0.0; for(i = 0; i < nSineTabSize; i++) { fTheta = fSineScale * (double)i; pFSTab[i] = sin(fTheta); } return (1); } /* function that returns approximately sin(fTheta) * double fTheta; angle in radians */ double SinTab (double fTheta) { double fSign = 1.0, fT; int i; fTheta = fTheta - floor(fTheta / TWO_PI) * TWO_PI; if(fTheta < 0) { fSign = -1; fTheta = -fTheta; } i = fTheta / fSineScale + .5; fT = pFSTab[i]; if (fSign == 1) return(fT); else return(-fT); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.