home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD1.mdf / pascal / library / dos / sampler / 02 / mandel / cmplx.pas next >
Encoding:
Pascal/Delphi Source File  |  1988-03-14  |  4.4 KB  |  185 lines

  1. UNIT Cmplx;
  2.  
  3. {  In the following descriptions,
  4.    Capital letters (A, B) are real numbers or real parts of complex
  5.    numbers.  Lowercase letters (a, b) are real factors of complex
  6.    parts.  i is the square root of -1 (√-1).
  7.  
  8. CONTENTS:  Add_Comp         (C1, C2, C_Out);
  9.            Sub_Comp         (C1, C2, C_Out);
  10.            Mult_Comp        (C1, C2, C_Out);
  11.            Mult_RC          (C, R, C_Out);
  12.            Sub_C_From_R     (R, C, C_Out);
  13.            Div_C_By_R       (C, R, C_Out);
  14.            Size_Of_C        (C);
  15.            Square_Size_Of_C (C);
  16. }
  17.  
  18.  
  19. INTERFACE
  20.  
  21. TYPE
  22.    Complex = RECORD
  23.                 R, I:  double
  24.              END;
  25.  
  26. PROCEDURE Add_Comp (A, B:  Complex;
  27.                     VAR C:  Complex);
  28.  
  29. PROCEDURE Sub_Comp (A, B:  Complex;
  30.                     VAR C:  Complex);
  31.  
  32. PROCEDURE Mult_Comp (A, B:  Complex;
  33.                      VAR C:  Complex);
  34.  
  35. PROCEDURE Div_Comp (A, B:  Complex;
  36.                     VAR C:  Complex);
  37.  
  38. PROCEDURE Div_R_By_C (R:  double;
  39.                       C:  Complex;
  40.                       VAR C_Out:  Complex);
  41.  
  42. PROCEDURE Mult_RC (C:  Complex;
  43.                    R:  double;
  44.                    VAR C_Out:  Complex);
  45.  
  46. PROCEDURE Sub_C_From_R (R:  double;
  47.                         C:  Complex;
  48.                         VAR C_Out:  Complex);
  49.  
  50. PROCEDURE Div_C_By_R (C:  Complex;
  51.                       R:  double;
  52.                       VAR C_Out:  Complex);
  53.  
  54. FUNCTION Size_Of_C (C:  Complex):  double;
  55. FUNCTION Square_Size_Of_C (C:  Complex):  double;
  56.  
  57. {********************************************************************}
  58.  
  59. IMPLEMENTATION
  60.  
  61. PROCEDURE Add_Comp (A, B:  Complex;
  62.                     VAR C:  Complex);
  63.  
  64. {  RESULT == (A+ai)+(B+bi) == A+ai+B+bi == (A+B)+(a+b)i  }
  65.  
  66. BEGIN
  67. C.R := A.R + B.R;
  68. C.I := A.I + B.I
  69. END {* Add_Comp *};
  70.  
  71. {********************************************************************}
  72.  
  73. PROCEDURE Sub_Comp (A, B:  Complex;
  74.                     VAR C:  Complex);
  75.  
  76. {  RESULT == (A+ai)-(B+bi) == A+ai-B-bi == (A-B)+(a-b)i  }
  77.  
  78. BEGIN
  79. C.R := A.R - B.R;
  80. C.I := A.I - B.I
  81. END {* Sub_Comp *};
  82.  
  83. {********************************************************************}
  84.  
  85. PROCEDURE Mult_Comp (A, B:  Complex;
  86.                      VAR C:  Complex);
  87.  
  88. {  RESULT == (A+ai)(B+bi) == AB + Abi + Bai + aibi ==
  89.              (AB-ab)+(Ab+aB)i  }
  90.  
  91. BEGIN
  92. C.R := A.R * B.R - A.I * B.I;
  93. C.I := A.R * B.I + A.I * B.R
  94. END {* Mult_Comp *};
  95.  
  96. {********************************************************************}
  97.  
  98. PROCEDURE Div_Comp (A, B:  Complex;
  99.                     VAR C:  Complex);
  100.  
  101. {  RESULT == (A+ai)/(B+bi) == (AB+ab)/(B²+b²)+((aB-Ab)/(B²+b²))i  }
  102.  
  103. VAR
  104.    D:  double;
  105.  
  106. BEGIN
  107. D := Sqr (B.R) + Sqr (B.I);
  108. C.R := (A.R * B.R + A.I * B.I) / D;
  109. C.I := (A.I * B.R - A.R * B.I) / D
  110. END {* Div_Comp *};
  111.  
  112. {********************************************************************}
  113.  
  114. PROCEDURE Div_R_By_C (R:  double;
  115.                       C:  Complex;
  116.                       VAR C_Out:  Complex);
  117. VAR
  118.    A:  Complex;
  119.  
  120. BEGIN
  121. A.R := R;
  122. A.I := 0;
  123. Div_Comp (A, C, C_Out)
  124. END {* Div_R_By_C *};
  125.  
  126. {********************************************************************}
  127.  
  128. PROCEDURE Mult_RC (C:  Complex;
  129.                    R:  double;
  130.                    VAR C_Out:  Complex);
  131.  
  132. {  RESULT == (C+ci)R == CR+cRi  }
  133.  
  134. BEGIN
  135. C_Out.R := C.R * R;
  136. C_Out.I := C.I * R
  137. END {* Mult_RC *};
  138.  
  139. {********************************************************************}
  140.  
  141. PROCEDURE Sub_C_From_R (R:  double;
  142.                         C:  Complex;
  143.                         VAR C_Out:  Complex);
  144.  
  145. {  RESULT == R-(C+ci) == R-C-ci == (R-C)-ci  }
  146.  
  147. BEGIN
  148. C_Out.R := R - C.R;
  149. C_Out.I := -C.I
  150. END {* Sub_C_From_R *};
  151.  
  152. {********************************************************************}
  153.  
  154. PROCEDURE Div_C_By_R (C:  Complex;
  155.                       R:  double;
  156.                       VAR C_Out:  Complex);
  157.  
  158. {  RESULT == (C+ci)/R == C/B+ci/R == (C/R)+(c/R)i  }
  159.  
  160. BEGIN
  161. C_Out.R := C.R / R;
  162. C_Out.I := C.I / R
  163. END {* Div_C_By_R *};
  164.  
  165. {********************************************************************}
  166.  
  167. FUNCTION Size_Of_C (C:  Complex):  double;
  168.  
  169. {  RESULT == √(C²+c²)  }
  170.  
  171. BEGIN
  172. Size_Of_C := Sqrt (Sqr (C.R) + Sqr (C.I))
  173. END {* Size_Of_C *};
  174.  
  175. {********************************************************************}
  176.  
  177. FUNCTION Square_Size_Of_C (C:  Complex):  double;
  178.  
  179. {  RESULT == C² + c²  }
  180.  
  181. BEGIN
  182. Square_Size_Of_C := Sqr (C.R) + Sqr (C.I)
  183. END {* Square_Size_Of_C *};
  184.  
  185. END.