arc tangentテーブルの作成

コサインテーブルの作成は出来ているものとして*1

private final int tmax = 16;
private final int n = 8;
void makeAtanTable(){
    int cn = getCosTableSize();  //2^cnのコサインテーブル
    int atan_table = new int[1<<n];
    for(int i=1;i<(1<<(tmax-3));i++){
        int s = i>>(tmax-cn);
        atan_table[(sin(s)<<n)/cos(s)] = i;
    }
}

イメージ的にはこんな感じかな……。
コサインテーブルが十分に大きくないか、nが大きすぎる場合は、テーブルに穴が空く可能性があるので、その場合は、前の値で埋めるか、適当に計算で求めるべきだろう。

    //空いているところは前の値で埋める
    int num=1;
    for(int i=1;i<256;i++){
        if(atan_table[i] == 0){
            atan_table[i] = atan_table[num];
        }else{
            num = i;
        }
    }

makeAtanTable()の最後にこんな感じの処理を入れたらいいのかな。
ちなみに、Javaではint配列をnewしたときに、全て0で初期化されることが保証されていたと思うので、わざわざ0を代入する処理は入れてないです。
というか、もっと数学的に求めろよ自分(;つД`)

*1:コサインテーブルの作成については、http://melpon.tank.jp/pukiwiki/index.php?Index%2FMemo%2F%B7%C8%C2%D3%B4%D8%CF%A2%A5%E1%A5%E2を参照