Abaduaber

LMath

Nov 18th, 2015
382
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.54 KB | None | 0 0
  1. Unit LMath;
  2. Interface
  3. Uses
  4.     SysUtils;
  5.  
  6. Function ExtendedToOtherCC(Source: Extended; BaseOfCount: Word): String;
  7. Function OtherCCToExtended(Number: String; BaseOfCount: Word): Extended;
  8. Function DegToRad(Deg: Extended): Extended;
  9. Function RadToDeg(Rad: Extended): Extended;
  10. Function IntPower(X: Extended; I: Integer): Extended;
  11. Function Power(Base, Exponent: Extended): Extended;
  12.  
  13. Implementation
  14. Var
  15.     AllSymbols: String;
  16.  
  17. Function IntPower(X: Extended; I: LongInt): Extended;
  18. Var
  19.     Y: LongInt;
  20. Begin
  21.     Y:= Abs(I);
  22.     Result:= 1.0;
  23.     While Y > 0 Do Begin
  24.         While Not Odd(Y) Do Begin
  25.             Y := Y Shr 1;
  26.             X := X * X
  27.         End;
  28.         Dec(Y);
  29.         Result := Result * X
  30.     End;
  31.     If I < 0 Then Result := 1.0 / Result
  32. End;
  33.  
  34. Function Power(Base, Exponent: Extended): Extended;
  35. Begin
  36.     If Exponent = 0.0 Then
  37.         Power:= 1.0
  38.     Else If (Base = 0.0) And (Exponent > 0.0) Then
  39.         Power:= 0.0
  40.     Else If (Frac(Exponent) = 0.0) And (Abs(Exponent) <= MaxInt) Then
  41.         Power:= IntPower(Base, LongInt(Trunc(Exponent)))
  42.     Else
  43.         Power:= Exp(Exponent * Ln(Base));
  44. End;
  45.  
  46. Function DegToRad(Deg: Extended): Extended;
  47. Begin
  48.     DegToRad:= Deg * 180 / PI;
  49. End;
  50.  
  51. Function RadToDeg(Rad: Extended): Extended;
  52. Begin
  53.     RadToDeg:= Rad * PI / 180;
  54. End;
  55.  
  56. Function ExtendedToOtherCC;
  57. Var
  58.     Temp: LongInt;
  59.     Res: String;
  60.     Negative: Boolean;
  61. Begin
  62.     Negative:= Source < 0;
  63.     Res:= ''; Source:= Abs(Int(Source));
  64.     While Source >= BaseOfCount Do Begin
  65.         Temp:= Trunc(Source - Int(Source / BaseOfCount) * BaseOfCount);
  66.         Source:= Int(Source / BaseOfCount);
  67.         Res:= AllSymbols[Temp + 1] + Res;
  68.     End;
  69.     Temp:= Trunc(Source - Int(Source / BaseOfCount) * BaseOfCount);
  70.     Res:= AllSymbols[Temp + 1] + Res;
  71.     If Negative Then Res:= '-' + Res;
  72.     ExtendedToOtherCC:= Res;
  73. End;
  74.  
  75. Function OtherCCToExtended;
  76. Var
  77.     P, Temp: Word;
  78.     CurSymbols: String;
  79.     OutPut, Count: Extended;
  80. Begin
  81.     P:= Length(Number); OutPut:= 0; Count:= 1;
  82.     CurSymbols:= UpperCase(Copy(AllSymbols, 1, BaseOfCount));
  83.     While P >= 1 Do Begin
  84.         For Temp:= 1 To BaseOfCount Do Begin
  85.             If CurSymbols[Temp] = Number[P] Then Begin
  86.                 OutPut:= OutPut + Count * (Temp - 1);
  87.                 Count:= Count * BaseOfCount;
  88.                 Break;
  89.             End;
  90.         End;
  91.         Dec(P);
  92.     End;
  93.     OtherCCToExtended:= OutPut;
  94. End;
  95.  
  96. Initialization
  97. Begin
  98.     AllSymbols:= '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  99. End;
  100. End.
Add Comment
Please, Sign In to add comment