Browse Source

+ Missing functions IsZero,InRange,EnsureRange implemented

michael 21 years ago
parent
commit
2a928b5180
1 changed files with 137 additions and 4 deletions
  1. 137 4
      rtl/objpas/math.pp

+ 137 - 4
rtl/objpas/math.pp

@@ -139,6 +139,21 @@ function Min(a, b: Extended): Extended;
 function Max(a, b: Extended): Extended;
 function Max(a, b: Extended): Extended;
 {$endif FPC_HAS_TYPE_EXTENDED}
 {$endif FPC_HAS_TYPE_EXTENDED}
 
 
+function InRange(const AValue, AMin, AMax: Integer): Boolean; 
+function InRange(const AValue, AMin, AMax: Int64): Boolean; 
+{$ifdef FPC_HAS_TYPE_DOUBLE}
+function InRange(const AValue, AMin, AMax: Double): Boolean; 
+{$endif FPC_HAS_TYPE_DOUBLE}
+
+function EnsureRange(const AValue, AMin, AMax: Integer): Integer; 
+function EnsureRange(const AValue, AMin, AMax: Int64): Int64; 
+{$ifdef FPC_HAS_TYPE_DOUBLE}
+function EnsureRange(const AValue, AMin, AMax: Double): Double; 
+{$endif FPC_HAS_TYPE_DOUBLE}
+
+
+ 
+
 
 
 // Sign functions
 // Sign functions
 Type
 Type
@@ -149,9 +164,20 @@ const
   ZeroValue = 0;
   ZeroValue = 0;
   PositiveValue = High(TValueSign);
   PositiveValue = High(TValueSign);
       
       
-function Sign(const AValue: Integer): TValueSign; overload;
-function Sign(const AValue: Int64): TValueSign; overload;
-function Sign(const AValue: Double): TValueSign; overload;
+function Sign(const AValue: Integer): TValueSign; 
+function Sign(const AValue: Int64): TValueSign; 
+function Sign(const AValue: Double): TValueSign; 
+
+function IsZero(const A: Single; Epsilon: Single): Boolean; 
+function IsZero(const A: Single): Boolean; 
+{$ifdef FPC_HAS_TYPE_DOUBLE}
+function IsZero(const A: Double; Epsilon: Double): Boolean; 
+function IsZero(const A: Double): Boolean; 
+{$endif FPC_HAS_TYPE_DOUBLE}
+{$ifdef FPC_HAS_TYPE_EXTENDED}
+function IsZero(const A: Extended; Epsilon: Extended): Boolean; 
+function IsZero(const A: Extended): Boolean; 
+{$endif FPC_HAS_TYPE_EXTENDED}
         
         
 { angle conversion }
 { angle conversion }
 
 
@@ -1061,10 +1087,117 @@ begin
 end;
 end;
 {$endif FPC_HAS_TYPE_EXTENDED}
 {$endif FPC_HAS_TYPE_EXTENDED}
 
 
+function InRange(const AValue, AMin, AMax: Integer): Boolean; 
+
+begin
+  Result:=(AValue>=AMin) and (AValue<=AMax);
+end;
+
+function InRange(const AValue, AMin, AMax: Int64): Boolean; 
+begin
+  Result:=(AValue>=AMin) and (AValue<=AMax);
+end;
+
+{$ifdef FPC_HAS_TYPE_DOUBLE}
+function InRange(const AValue, AMin, AMax: Double): Boolean; 
+
+begin
+  Result:=(AValue>=AMin) and (AValue<=AMax);
+end;
+{$endif FPC_HAS_TYPE_DOUBLE}
+
+function EnsureRange(const AValue, AMin, AMax: Integer): Integer; 
+
+begin
+  Result:=AValue;
+  If Result<AMin then
+    Result:=AMin
+  else if Result>AMax then  
+    Result:=AMax;
+end;
+
+function EnsureRange(const AValue, AMin, AMax: Int64): Int64; 
+
+begin
+  Result:=AValue;
+  If Result<AMin then
+    Result:=AMin
+  else if Result>AMax then  
+    Result:=AMax;
+end;
+
+{$ifdef FPC_HAS_TYPE_DOUBLE}
+function EnsureRange(const AValue, AMin, AMax: Double): Double; 
+
+begin
+  Result:=AValue;
+  If Result<AMin then
+    Result:=AMin
+  else if Result>AMax then  
+    Result:=AMax;
+end;
+{$endif FPC_HAS_TYPE_DOUBLE}
+
+Const 
+  EZeroResolution = 1E-16;
+  DZeroResolution = 1E-12;
+  SZeroResolution = 1E-4;
+
+
+function IsZero(const A: Single; Epsilon: Single): Boolean; 
+
+begin
+  if (Epsilon=0) then
+    Epsilon:=SZeroResolution;
+  Result:=Abs(A)<=Epsilon;
+end;
+
+function IsZero(const A: Single): Boolean; 
+
+begin
+  Result:=IsZero(A,SZeroResolution);
+end;
+
+{$ifdef FPC_HAS_TYPE_DOUBLE}
+function IsZero(const A: Double; Epsilon: Double): Boolean; 
+
+begin
+  if (Epsilon=0) then
+    Epsilon:=DZeroResolution;
+  Result:=Abs(A)<=Epsilon;
+end;
+
+function IsZero(const A: Double): Boolean; 
+
+begin
+  Result:=IsZero(A,DZeroResolution);
+end;
+{$endif FPC_HAS_TYPE_DOUBLE}
+
+{$ifdef FPC_HAS_TYPE_EXTENDED}
+function IsZero(const A: Extended; Epsilon: Extended): Boolean; 
+
+begin
+  if (Epsilon=0) then
+    Epsilon:=EZeroResolution;
+  Result:=Abs(A)<=Epsilon;
+end;
+
+function IsZero(const A: Extended): Boolean; 
+
+begin
+  Result:=IsZero(A,EZeroResolution);
+end;
+{$endif FPC_HAS_TYPE_EXTENDED}
+
+
 end.
 end.
 {
 {
   $Log$
   $Log$
-  Revision 1.15  2003-11-09 21:52:54  michael
+  Revision 1.16  2004-02-09 08:55:45  michael
+  + Missing functions IsZero,InRange,EnsureRange implemented
+
+  Revision 1.15  2003/11/09 21:52:54  michael
   + Added missing sign functions
   + Added missing sign functions
 
 
   Revision 1.14  2003/10/29 19:10:07  jonas
   Revision 1.14  2003/10/29 19:10:07  jonas