provide trigonometric functions with LUT.

LUTTrigonometric.h

Committer:
kb10uy
Date:
2015-03-23
Revision:
1:825f5c2e80b4
Parent:
0:5472db659233

File content as of revision 1:825f5c2e80b4:

#pragma once

#include "math.h"

//double precision version

class LUTTrigonometric
{
public:
    LUTTrigonometric(int division = 256);
    
    inline double sin(double x);
    inline double cos(double x);
    inline double tan(double x);
    
private:
    double *table;
    int div;
    const double pi;
    double rate;
};

double LUTTrigonometric::sin(double x) {
    return table[(int)(x * rate) % div];
}


double LUTTrigonometric::cos(double x) {
    return table[(int)((x + pi / 2.0) * rate) % div];
}

double LUTTrigonometric::tan(double x) {
    return sin(x) / cos(x);
}

//single precision version

class LUTSingleTrigonometric
{
public:
    LUTSingleTrigonometric(int division = 256);
    
    inline float sin(float x);
    inline float cos(float x);
    inline float tan(float x);
    
private:
    float *table;
    int div;
    const float pi;
    float rate;
};

float LUTSingleTrigonometric::sin(float x) {
    return table[(int)(x * rate) % div];
}


float LUTSingleTrigonometric::cos(float x) {
    return table[(int)((x + pi / 2.0) * rate) % div];
}

float LUTSingleTrigonometric::tan(float x) {
    return sin(x) / cos(x);
}