uw38069.pp 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. { %cpu=i386 }
  2. {$mode objfpc}
  3. {$modeswitch advancedrecords}
  4. {$FPUTYPE SSE2}
  5. unit uw38069;
  6. INTERFACE
  7. uses sysutils;
  8. type float = double; //#zentral definieren
  9. complex = record
  10. public
  11. re, im: float;
  12. class operator * (const a, b: complex): complex; inline;
  13. class operator * (const a: complex; const x:float): complex; inline;
  14. class operator * (const x: float; const a: complex): complex; inline;
  15. class operator := (const x: float): complex; inline;
  16. class operator = (const a,b: complex): boolean; inline;
  17. class operator - (const a: complex): complex; inline;
  18. end;
  19. procedure mul (const a,b: complex; var c: complex); inline; overload;
  20. procedure mul (const a: complex; const b: float; var c: complex); inline; overload;
  21. procedure mul (const a: float; const b: complex; var c: complex); inline; overload;
  22. IMPLEMENTATION
  23. procedure mul (const a,b: complex; var c: complex);
  24. begin
  25. c.re := a.re*b.re - a.im*b.im;
  26. c.im := a.re*b.im + a.im*b.re;
  27. end;
  28. procedure mul (const a: complex; const b: float; var c: complex);
  29. begin
  30. c.re := a.re*b;
  31. c.im := a.im*b;
  32. end;
  33. procedure mul (const a: float; const b: complex; var c: complex);
  34. begin
  35. mul (b,a,c);
  36. end;
  37. function pow (x,y: float): float;
  38. begin
  39. result := exp (y*ln(x));
  40. end;
  41. function ToComplex (a,b: float): complex;
  42. begin
  43. result.re := a;
  44. result.im := b;
  45. end;
  46. //Operatoren complex-complex
  47. class operator complex.* (const a,b: complex): complex;
  48. begin
  49. mul (a,b,result);
  50. end;
  51. class operator complex.* (const x: float; const a: complex): complex;
  52. begin
  53. mul (a,x,result);
  54. end;
  55. class operator complex.* (const a: complex; const x:float): complex;
  56. begin
  57. mul (a,x,result);
  58. end;
  59. class operator complex.:= (const x: float): complex;
  60. begin
  61. result.re := x;
  62. result.im := 0;
  63. end;
  64. class operator complex.= (const a,b: complex): boolean;
  65. begin
  66. result := (a.re=b.re) and (a.im=b.im);
  67. end;
  68. class operator complex.- (const a: complex): complex;
  69. begin
  70. result.re := -a.re;
  71. result.im := -a.im;
  72. end;
  73. begin
  74. end.