Little fix after the last commit (mostly a git fail)
[eigenmath-fx.git] / polar.cpp
blobbfde00da1a420e2082aee11e8df5b53930e72246
1 /* Convert complex z to polar form
3 Input: push z
5 Output: Result on stack
7 polar(z) = mag(z) * exp(i * arg(z))
8 */
10 #include "stdafx.h"
11 #include "defs.h"
13 void
14 eval_polar(void)
16 push(cadr(p1));
17 eval();
18 polar();
21 void
22 polar(void)
24 save();
25 p1 = pop();
26 push(p1);
27 mag();
28 push(imaginaryunit);
29 push(p1);
30 arg();
31 multiply();
32 exponential();
33 multiply();
34 restore();
37 #if SELFTEST
39 static char *s[] = {
41 "polar(1+i)",
42 "2^(1/2)*exp(1/4*i*pi)",
44 "polar(-1+i)",
45 "2^(1/2)*exp(3/4*i*pi)",
47 "polar(-1-i)",
48 "2^(1/2)*exp(-3/4*i*pi)",
50 "polar(1-i)",
51 "2^(1/2)*exp(-1/4*i*pi)",
53 "rect(polar(3+4*i))",
54 "3+4*i",
56 "rect(polar(-3+4*i))",
57 "-3+4*i",
59 "rect(polar(3-4*i))",
60 "3-4*i",
62 "rect(polar(-3-4*i))",
63 "-3-4*i",
66 void
67 test_polar(void)
69 test(__FILE__, s, sizeof s / sizeof (char *));
72 #endif