十分注意して作成していますが, ご自身の責任の下で使用して下さい! |
---|
#include <stdio.h> #include <stdlib.h> #include <math.h> #include "sincos_table.h" int SinCos_num=-1; double *SinCos_table=NULL; /* SinCos_init: 90度分の cos() テーブルを作成する */ void SinCos_init(int num) { int i; SinCos_table=malloc(sizeof(double)*num); SinCos_num=num; for (i=0; i<num; i++) SinCos_table[i]=cos(i*M_PI/2/num); } |
/* Cos() 関数 */ double Cos(double x) { double sign=1; int i; if (x<0) x=-x; /* cos(x)=cos(-x) */ x/=M_PI; x=(x-(int)(x/2)*2); /* cos(x)=cos(x+2*PI) */ if (x>1) x=2-x; /* cos(x)=cos(x-PI) */ if (x>.5) {x=1-x; sign=-1;} /* -cos(x)=cos(PI-x) */ i=(int)(x*2*SinCos_num); return (sign*SinCos_table[i]); } |
/* Sin() 関数: sin(x)=cos(x-M_PI/2) */ #define Sin(x) (Cos(x-M_PI/2)) |
gcc -O3 -c sincos_table.c |
また眼目の処理速度については15億回の関数呼び出しについて手元のコンピュー タでは
関数 | 時間(s) |
---|---|
cos() | 30 |
Cos() | 1 |
gcc -O3 -DSINCOS_TABLE_TEST -o sincos_table sincos_table.c -lm |