Selaa lähdekoodia

* Made some modifications suggested by Markus Kaemmerer:
- MaxTanh is now the exact value Ln(MaxExtended)/2
- The 'for' loops in MinValue and MaxValue can start with the second
element instead of the first one
- Added more overloaded versions of Min and Max functions

sg 25 vuotta sitten
vanhempi
commit
eeba1770aa
1 muutettua tiedostoa jossa 109 lisäystä ja 22 poistoa
  1. 109 22
      rtl/objpas/math.pp

+ 109 - 22
rtl/objpas/math.pp

@@ -72,10 +72,18 @@ function MinIntValue(const Data: array of Integer): Integer;
 function MaxIntValue(const Data: array of Integer): Integer;
 
 { Extra, not present in Delphi, but used frequently  }
-function Min(Int1,Int2:Integer):Integer;
-function Min(Int1,Int2:Cardinal):Cardinal;
-function Max(Int1,Int2:Integer):Integer;
-function Max(Int1,Int2:Cardinal):Cardinal;
+function Min(a, b: Integer): Integer;
+function Max(a, b: Integer): Integer;
+function Min(a, b: Cardinal): Cardinal;
+function Max(a, b: Cardinal): Cardinal;
+function Min(a, b: Int64): Int64;
+function Max(a, b: Int64): Int64;
+function Min(a, b: Single): Single;
+function Max(a, b: Single): Single;
+function Min(a, b: Double): Double;
+function Max(a, b: Double): Double;
+function Min(a, b: Extended): Extended;
+function Max(a, b: Extended): Extended;
 
 { angle conversion }
 
@@ -366,7 +374,7 @@ function sinh(x : float) : float;
      sinh:=0.5*(temp-1.0/temp);
   end;
 
-Const MaxTanh=5000; { rather arbitrary, but more or less correct }
+Const MaxTanh = 5678.22249441322; // Ln(MaxExtended)/2
 
 function tanh(x : float) : float;
 
@@ -773,7 +781,7 @@ var
   I: Integer;
 begin
   Result := Data[0];
-  For I := 0 To N-1 do
+  For I := 1 To N-1 do
     If Data[I] < Result Then Result := Data[I];
 end;
 
@@ -792,7 +800,7 @@ var
 begin
    { get an initial value }
    minvalue:=data[0];
-   for i:=0 to N-1 do
+   for i:=1 to N-1 do
      if data[i]<minvalue then
        minvalue:=data[i];
 end;
@@ -820,7 +828,7 @@ var
 begin
    { get an initial value }
    maxvalue:=data[0];
-   for i:=0 to N-1 do
+   for i:=1 to N-1 do
      if data[i]>maxvalue then
        maxvalue:=data[i];
 end;
@@ -839,41 +847,120 @@ var
 begin
    { get an initial value }
    maxvalue:=data[0];
-   for i:=0 to N-1 do
+   for i:=1 to N-1 do
      if data[i]>maxvalue then
        maxvalue:=data[i];
 end;
 
 
-function Min(Int1,Int2:Integer):Integer;
+function Min(a, b: Integer): Integer;
 begin
-  If Int1 < Int2 Then Result := Int1
-                 Else Result := Int2;
+  if a < b then
+    Result := a
+  else
+    Result := b;
+end;
+
+function Max(a, b: Integer): Integer;
+begin
+  if a > b then
+    Result := a
+  else
+    Result := b;
+end;
+
+function Min(a, b: Cardinal): Cardinal;
+begin
+  if a < b then
+    Result := a
+  else
+    Result := b;
+end;
+
+function Max(a, b: Cardinal): Cardinal;
+begin
+  if a > b then
+    Result := a
+  else
+    Result := b;
+end;
+
+function Min(a, b: Int64): Int64;
+begin
+  if a < b then
+    Result := a
+  else
+    Result := b;
+end;
+
+function Max(a, b: Int64): Int64;
+begin
+  if a > b then
+    Result := a
+  else
+    Result := b;
+end;
+
+function Min(a, b: Single): Single;
+begin
+  if a < b then
+    Result := a
+  else
+    Result := b;
+end;
+
+function Max(a, b: Single): Single;
+begin
+  if a > b then
+    Result := a
+  else
+    Result := b;
 end;
 
-function Min(Int1,Int2:Cardinal):Cardinal;
+function Min(a, b: Double): Double;
 begin
-  If Int1 < Int2 Then Result := Int1
-                 Else Result := Int2;
+  if a < b then
+    Result := a
+  else
+    Result := b;
 end;
 
-function Max(Int1,Int2:Integer):Integer;
+function Max(a, b: Double): Double;
 begin
-  If Int1 > Int2 Then Result := Int1
-                 Else Result := Int2;
+  if a > b then
+    Result := a
+  else
+    Result := b;
 end;
 
-function Max(Int1,Int2:Cardinal):Cardinal;
+function Min(a, b: Extended): Extended;
 begin
-  If Int1 > Int2 Then Result := Int1
-                 Else Result := Int2;
+  if a < b then
+    Result := a
+  else
+    Result := b;
+end;
+
+function Max(a, b: Extended): Extended;
+begin
+  if a > b then
+    Result := a
+  else
+    Result := b;
 end;
 
 
 end.
 {
   $Log$
-  Revision 1.3  2000-07-29 18:07:45  sg
+  Revision 1.4  2000-07-30 10:01:04  sg
+  * Made some modifications suggested by Markus Kaemmerer:
+    - MaxTanh is now the exact value Ln(MaxExtended)/2
+    - The 'for' loops in MinValue and MaxValue can start with the second
+      element instead of the first one
+    - Added more overloaded versions of Min and Max functions
+
+  Revision 1.3  2000/07/29 18:07:45  sg
   * Applied patches by Markus Kaemmerer:
     - Added ranges of the IEEE floating point types, including denormals
     - in sincos function: The arguments are of type Extended, so they