Floating Point Routines Single Precision
Diese Seite gibt es auch auf Deutsch.
Description
These floating point routines are exactly the same I used in Arcquake. They are not IEEE compliant. Some functions round correctly. Everyone feeling he needs them should click here.
Functions for Converting
int FIX_FLOAT_MEM_SL(float *f, int s); // (int)(f*2^s)
int FIXCEIL_FLOAT_MEM_SL(float *f, int s); // (int)ceil(f*2^s)
void FLOAT_FIX_MEM(int i, float *f); // f=(float)i;
Some Macros
void FLOAT_COPY(float *d, float *s); // d=s;
void FLOAT_ABS(float *d, float *s); // d=fabs(s);
void FLOAT_NEG(float *d, float *s); // d=-s;
Arithmetic Functions
int CMP_FLOAT_MEM(float *a, float *b); // int?0=a?b
void FLOAT_SL(float *d, float *s, int s); // d=s*2^s;
void FLOAT_SQRT(float *d, float *s); // d=sqrt(s);
void ADD_FLOAT_MEM(float *s, float *a, float *b); // s=a+b;
void SUB_FLOAT_MEM(float *s, float *a, float *b); // s=a-b;
void MUL_FLOAT_MEM(float *s, float *a, float *b); // s=a*b;
void DIV_FLOAT_MEM(float *s, float *a, float *b); // s=a/b;
void ADotProduct(float *a, float b[3], float c[3]); // a=b[0]*c[0]+...
void AVectorCopy(float a[3], float b[3]); // a[0]=b[0]; ...
Functions used by the above functions
int LMUL(int a, int b, int shift); // (a*b)>>shift
int FDIV(unsigned int a, unsigned int b); // a/b
int FDIVS(int a, int b); // a/b
int FDIV64(int l, int h, int d); // (h*2^32+l)/d
And back!
E-mail: mail@peter-teichmann.de