Roots of unity: Difference between revisions
Content added Content deleted
(Add Factor) |
|||
Line 1,361: | Line 1,361: | ||
(inc 'Angle (*/ 2 pi N)) ) |
(inc 'Angle (*/ 2 pi N)) ) |
||
(prinl) ) )</lang> |
(prinl) ) )</lang> |
||
=={{header|Prolog}}== |
|||
Solves the roots of unity symbolically, as complex powers of e. |
|||
<lang Prolog> |
|||
roots(N, Rs) :- |
|||
succ(Pn, N), numlist(0, Pn, Ks), |
|||
maplist(root(N), Ks, Rs). |
|||
root(N, M, R2) :- |
|||
R0 is (2*M) rdiv N, % multiple of PI |
|||
(R0 > 1 -> R1 is R0 - 2; R1 = R0), % adjust for principal values |
|||
cis(R1, R2). |
|||
cis(0, 1) :- !. |
|||
cis(1, -1) :- !. |
|||
cis(1 rdiv 2, i) :- !. |
|||
cis(-1 rdiv 2, -i) :- !. |
|||
cis(-1 rdiv Q, exp(-i*pi/Q)) :- !. |
|||
cis(1 rdiv Q, exp(i*pi/Q)) :- !. |
|||
cis(P rdiv Q, exp(P*i*pi/Q)). |
|||
</lang> |
|||
{{Out}} |
|||
<pre> |
|||
?- roots(2,X). |
|||
X = [1, -1]. |
|||
?- roots(3,X). |
|||
X = [1, exp(2*i*pi/3), exp(-2*i*pi/3)]. |
|||
?- roots(4,X). |
|||
X = [1, i, -1, -i]. |
|||
?- roots(5,X). |
|||
X = [1, exp(2*i*pi/5), exp(4*i*pi/5), exp(-4*i*pi/5), exp(-2*i*pi/5)]. |
|||
?- roots(8,X), forall(member(A,X), format("~w~n", A)). |
|||
1 |
|||
exp(i*pi/4) |
|||
i |
|||
exp(3*i*pi/4) |
|||
-1 |
|||
exp(-3*i*pi/4) |
|||
-i |
|||
exp(-i*pi/4) |
|||
X = [1, exp(i*pi/4), i, exp(3*i*pi/4), -1, exp(... * ... * pi/4), -i, exp(... / ...)]. |
|||
</pre> |
|||
=={{header|PureBasic}}== |
=={{header|PureBasic}}== |