AOT計算で呼び出し自体を早くする三角関数

Dependents:   NuMidi401 NuFM401

AOTTrigon.h

Committer:
kb10uy
Date:
2014-12-25
Revision:
3:ba78a1dd8b55
Parent:
2:d8c9637a5f09
Child:
4:c15b45812c25

File content as of revision 3:ba78a1dd8b55:

#pragma once
#include "math.h"

/** AOTTrigon class
 * AOT計算によって三角関数の計算を高速化します。
 */
class AOTTrigon
{
public:
    /** AOTTrigon コンストラクター
     * @param divide 分割数
     */
    AOTTrigon(int divide=256);

    inline double sin(double);
    inline double cos(double);
    inline double tan(double);

private:
    double *t_sin;
    int division;
    double rate;
    const double pi;
};

inline double AOTTrigon::sin(double x)
{
    return t_sin[((int)(x * rate)) & (division - 1)];
}
inline double AOTTrigon::cos(double x)
{
    return sin(x + pi / 2.0);
}
inline double AOTTrigon::tan(double x)
{
    return sin(x) / cos(x);
}