pythonでFFT(高速フーリエ変換)を実装しようと思っています
コードはご覧の通りです

(FFT_sort.py)

import numpy as np

def sort(N):

    flag = ~(N & (N - 1))
    if flag != -1:
        return None

    result = np.zeros(N, dtype=np.int64)

    result[0] = 0
    result[1] = N / 2

    result[N / 2] = 1
    result[N / 2 + 1] = N / 2 + 1

    T = n  = N / 2
    oldN = n
    oldCat = 0
    cat = 1

    count = 1
    judge = 0
    next = 2

    linspace = np.array([i for i in range(N)])

    while(n != 2):

        n /= 2
        cat *= 2

        judge += cat

        normal = 2 ** (count + 1))
        for i in range(cat / 2):

            j = 1 + i * 2
            index = j * N / normal

            result[index] = next
            result[index + 1] = next + T

            result[index + T] = next + 1
            result[index + T + 1] = next + T + 1

            next += 2

        count += 1
        oldN = n 

    return result

(FFT.py)

import FFT_sort as fs
import numpy as np
from numpy import pi

import matplotlib.pyplot as plt

N = input()

x = np.linspace(0, 2 * np.pi, N)
y = np.sin(x)

data = fs.sort(N)

if data is None:
    print("error")
    quit()
else:
    print(data)

result = np.zeros(N, dtype=np.complex)
result[:] = y[:]

num = 1

while(num != N):

    count = 0

    T = num
    F = N / (num * 2)

    print("F:", F)

    for i in range(N):

        judge = i / num

        if judge % 2 == 0:
            k = i + T

        else:
            k = i - T

        iF = i * F % N

        w = np.exp(float(i) * iF * -1j * 2 * pi / float(N))

        print("iF:", iF)
        print("w:", w)

        n = data[k]

        result[i] += w * result[n]

    count += 1
    num *= 2

print(result)
answer = np.fft.fft(y)
print(answer)

コードの入力はFFTのサンプリングの数で
アウトプットは
私のFFTの結果とnumpyでやった正規のFFTの結果です

ここで質問ですが
私のコードでやったFFTと
本家numpyのFFTの結果が全然違います

[ 6.23785596 -4.42077404j  5.0713722  -3.1314097 j
 -3.8474327  -1.99237623j  2.05949337 -0.61485772j
  5.84009223 -4.84151225j -2.02845113 -0.82589246j
 -1.36232081 -8.6730753 j  1.26764366 -7.27397125j
 -0.01871131 -4.59613684j  1.0188491  -4.96565877j
  3.58757676-10.1782615 j  2.92161011 -6.39504849j
 -2.59079252 -3.55000541j  2.78417111-13.26650134j
 -6.0297906  -1.17150871j -4.92477154 -4.98328949j]
[-2.49800181e-16+0.        j  1.49800460e+00-7.53097769j
 -2.88537029e-01+0.69659001j -2.36488255e-01+0.35392969j
 -2.22614343e-01+0.22261434j -2.16932373e-01+0.14494958j
 -2.14217111e-01+0.08873163j -2.12937210e-01+0.04235584j
 -2.12556562e-01+0.        j -2.12937210e-01-0.04235584j
 -2.14217111e-01-0.08873163j -2.16932373e-01-0.14494958j
 -2.22614343e-01-0.22261434j -2.36488255e-01-0.35392969j
 -2.88537029e-01-0.69659001j  1.49800460e+00+7.53097769j]

このような結果になるのは何故でしょうか
コードのどの部分に問題があるのでしょうか?

上の括弧がサンプル点が8つと仮定した時の結果が私のFFTの結果で
下の括弧が本家のnp.fft.fftのアルゴリズムの結果です

ご覧の通り、結果は全然違います

自分では何回も検査しましたが、なかなかみつかりません
バタフライ演算の方向もあっていますし
wの値のとり方に問題がありそうですが
自力では見つかりません

理由を教えて貰えないでしょうか?