polar.cpp 814 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. /* Convert complex z to polar form
  2. Input: push z
  3. Output: Result on stack
  4. polar(z) = mag(z) * exp(i * arg(z))
  5. */
  6. #include "stdafx.h"
  7. #include "defs.h"
  8. void
  9. eval_polar(void)
  10. {
  11. push(cadr(p1));
  12. eval();
  13. polar();
  14. }
  15. void
  16. polar(void)
  17. {
  18. save();
  19. p1 = pop();
  20. push(p1);
  21. mag();
  22. push(imaginaryunit);
  23. push(p1);
  24. arg();
  25. multiply();
  26. exponential();
  27. multiply();
  28. restore();
  29. }
  30. #if SELFTEST
  31. static char *s[] = {
  32. "polar(1+i)",
  33. "2^(1/2)*exp(1/4*i*pi)",
  34. "polar(-1+i)",
  35. "2^(1/2)*exp(3/4*i*pi)",
  36. "polar(-1-i)",
  37. "2^(1/2)*exp(-3/4*i*pi)",
  38. "polar(1-i)",
  39. "2^(1/2)*exp(-1/4*i*pi)",
  40. "rect(polar(3+4*i))",
  41. "3+4*i",
  42. "rect(polar(-3+4*i))",
  43. "-3+4*i",
  44. "rect(polar(3-4*i))",
  45. "3-4*i",
  46. "rect(polar(-3-4*i))",
  47. "-3-4*i",
  48. };
  49. void
  50. test_polar(void)
  51. {
  52. test(__FILE__, s, sizeof s / sizeof (char *));
  53. }
  54. #endif