You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

157 lines
4.8 KiB

25 years ago
  1. // Public complex number operations.
  2. #ifndef _CL_COMPLEX_H
  3. #define _CL_COMPLEX_H
  4. #include "cl_number.h"
  5. #include "cl_complex_class.h"
  6. #include "cl_real_class.h"
  7. #include "cl_integer_class.h"
  8. CL_DEFINE_AS_CONVERSION(cl_N)
  9. // zerop(x) testet, ob (= x 0).
  10. extern cl_boolean zerop (const cl_N& x);
  11. // Liefert zu reellen Zahlen a und b die komplexe Zahl a+bi.
  12. // complex(a,b)
  13. extern const cl_N complex (const cl_R& a, const cl_R& b);
  14. // realpart(x) liefert den Realteil der Zahl x.
  15. extern const cl_R realpart (const cl_N& x);
  16. // imagpart(x) liefert den Imagin�rteil der Zahl x.
  17. extern const cl_R imagpart (const cl_N& x);
  18. // conjugate(x) liefert die konjugiert komplexe Zahl zur Zahl x.
  19. extern const cl_N conjugate (const cl_N& x);
  20. // Liefert (- x), wo x eine Zahl ist.
  21. extern const cl_N operator- (const cl_N& x);
  22. // Liefert (+ x y), wo x und y Zahlen sind.
  23. extern const cl_N operator+ (const cl_N& x, const cl_N& y);
  24. // Liefert (- x y), wo x und y Zahlen sind.
  25. extern const cl_N operator- (const cl_N& x, const cl_N& y);
  26. // Liefert (* x y), wo x und y Zahlen sind.
  27. extern const cl_N operator* (const cl_N& x, const cl_N& y);
  28. // Liefert (* x x), wo x eine Zahl ist.
  29. extern const cl_N square (const cl_N& x);
  30. // Liefert (/ x y), wo x und y Zahlen sind.
  31. extern const cl_N operator/ (const cl_N& x, const cl_N& y);
  32. // Liefert (abs x), wo x eine Zahl ist.
  33. extern const cl_R abs (const cl_N& x);
  34. // recip(x) liefert (/ x), wo x eine Zahl ist.
  35. extern const cl_N recip (const cl_N& x);
  36. // (1+ x), wo x eine Zahl ist.
  37. extern const cl_N plus1 (const cl_N& x);
  38. // (1- x), wo x eine Zahl ist.
  39. extern const cl_N minus1 (const cl_N& x);
  40. // signum(x) liefert (signum x), wo x eine Zahl ist.
  41. extern const cl_N signum (const cl_N& x);
  42. // sqrt(x) = (sqrt x) zieht die Wurzel aus einer Zahl x.
  43. extern const cl_N sqrt (const cl_N& x);
  44. // cl_equal(x,y) vergleicht zwei Zahlen x und y auf Gleichheit.
  45. extern cl_boolean cl_equal (const cl_N& x, const cl_N& y);
  46. // cl_equal_hashcode(x) liefert einen cl_equal-invarianten Hashcode f�r x.
  47. extern uint32 cl_equal_hashcode (const cl_N& x);
  48. inline bool operator== (const cl_N& x, const cl_N& y)
  49. { return cl_equal(x,y); }
  50. inline bool operator!= (const cl_N& x, const cl_N& y)
  51. { return !cl_equal(x,y); }
  52. // phase(x) liefert (phase x), wo x eine Zahl ist.
  53. // Ergebnis rational nur wenn (= x 0) oder wenn x reell und >0.
  54. extern const cl_R phase (const cl_N& x);
  55. // exp(x) liefert (exp x), wo x eine Zahl ist.
  56. extern const cl_N exp (const cl_N& x);
  57. // log(x) liefert (log x), wo x eine Zahl ist.
  58. extern const cl_N log (const cl_N& x);
  59. // log(a,b) liefert (log a b), wo a und b Zahlen sind.
  60. extern const cl_N log (const cl_N& a, const cl_N& b);
  61. // (expt x y), wo x eine Zahl und y ein Integer ist.
  62. extern const cl_N expt (const cl_N& x, sintL y);
  63. extern const cl_N expt (const cl_N& x, const cl_I& y);
  64. // (expt x y), wo x und y Zahlen sind.
  65. extern const cl_N expt (const cl_N& x, const cl_N& y);
  66. // sin(x) liefert (sin x), wo x eine Zahl ist.
  67. extern const cl_N sin (const cl_N& x);
  68. // cos(x) liefert (cos x), wo x eine Zahl ist.
  69. extern const cl_N cos (const cl_N& x);
  70. // tan(x) liefert (tan x), wo x eine Zahl ist.
  71. extern const cl_N tan (const cl_N& x);
  72. // cis(x) liefert (cis x), wo x eine Zahl ist.
  73. extern const cl_N cis (const cl_R& x);
  74. extern const cl_N cis (const cl_N& x);
  75. // sinh(x) liefert (sinh x), wo x eine Zahl ist.
  76. extern const cl_N sinh (const cl_N& x);
  77. // cosh(x) liefert (cosh x), wo x eine Zahl ist.
  78. extern const cl_N cosh (const cl_N& x);
  79. // tanh(x) liefert (tanh x), wo x eine Zahl ist.
  80. extern const cl_N tanh (const cl_N& x);
  81. // atan(z) liefert den Arctan einer Zahl z.
  82. extern const cl_N atan (const cl_N& z);
  83. // atanh(z) liefert den Artanh einer Zahl z.
  84. extern const cl_N atanh (const cl_N& z);
  85. // asin(z) liefert den Arcsin einer Zahl z.
  86. extern const cl_N asin (const cl_N& z);
  87. // asinh(z) liefert den Arsinh einer Zahl z.
  88. extern const cl_N asinh (const cl_N& z);
  89. // acos(z) liefert den Arccos einer Zahl z.
  90. extern const cl_N acos (const cl_N& z);
  91. // acosh(z) liefert den Arcosh einer Zahl z.
  92. extern const cl_N acosh (const cl_N& z);
  93. #ifdef WANT_OBFUSCATING_OPERATORS
  94. // This could be optimized to use in-place operations.
  95. inline cl_N& operator+= (cl_N& x, const cl_N& y) { return x = x + y; }
  96. inline cl_N& operator++ /* prefix */ (cl_N& x) { return x = plus1(x); }
  97. inline void operator++ /* postfix */ (cl_N& x, int dummy) { (void)dummy; x = plus1(x); }
  98. inline cl_N& operator-= (cl_N& x, const cl_N& y) { return x = x - y; }
  99. inline cl_N& operator-- /* prefix */ (cl_N& x) { return x = minus1(x); }
  100. inline void operator-- /* postfix */ (cl_N& x, int dummy) { (void)dummy; x = minus1(x); }
  101. inline cl_N& operator*= (cl_N& x, const cl_N& y) { return x = x * y; }
  102. inline cl_N& operator/= (cl_N& x, const cl_N& y) { return x = x / y; }
  103. #endif
  104. // Runtime typing support.
  105. extern cl_class cl_class_complex;
  106. #endif /* _CL_COMPLEX_H */