CORDIC алгоритм, возвращающий плохие числа

Я начал реализовывать CORDIC алгоритм с нуля, и я не знаю, что мне не хватает, вот что у меня есть до сих пор.

import math
from __future__ import division

# angles
n = 5
angles = []
for i in range (0, n):
    angles.append(math.atan(1/math.pow(2,i)))    

# constants
kn = []
fator = 1.0
for i in range (0, n):
    fator = fator * (1 / math.pow(1 + (2**(-i))**2, (1/2)))
    kn.append(fator)


# taking an initial point p = (x,y) = (1,0)
z = math.pi/2 # Angle to be calculated

x = 1
y = 0
for i in range (0, n):
    if (z < 0):
        x = x + y*(2**(-1*i))
        y = y - x*(2**(-1*i))
        z = z + angles[i]
    else:
        x = x - y*(2**(-1*i))
        y = y + x*(2**(-1*i))
        z = z - angles[i]
    x = x * kn[n-1]
    y = y * kn[n-1]
print x, y

Когда я подключаю z = π/2, он возвращает 0,00883479322917 и 0,107149125055, что не имеет смысла. Любая помощь будет отличной!

@edit, я сделал некоторые изменения, и теперь в моем коде вместо этих строк

for i in range (0, n):
    if (z < 0):
        x = x0 + y0*(2**(-1*i))
        y = y0 - x0*(2**(-1*i))
        z = z + angles[i]
    else:
        x = x0 - y0*(2**(-1*i))
        y = y0 + x0*(2**(-1*i))
        z = z - angles[i]
    x0 = x
    y0 = y
    x = x * kn[n-1]
    y = y * kn[n-1]

Теперь это работает лучше, у меня была проблема, потому что я не использовал временные переменные как x0 и y0, теперь, когда я подключаю z = pi/2, это дает мне лучшие значения как (4.28270993661e-13, 1.0):)

0 ответов

Другие вопросы по тегам