Tha attached patch changes the statistic functions (sum, mean, stddev 
etc.) to expect "array of double" instead of "array of float". 
For most of the functions, I left the result values of type float as in 
D7, they are also type extended. Only for minvalue and maxvalue, I 
changed the result also to double, because it doesn't make sense to 
have higher precision here and D7 does the same.

This changes might be problematic on platforms where double is not 
supported (if any), but as there are other functions using double in 
math.pp, I didn't care about this.

Regards
 Burkhard
Index: rtl/objpas/math.pp
===================================================================
--- rtl/objpas/math.pp	(Revision 4157)
+++ rtl/objpas/math.pp	(Arbeitskopie)
@@ -300,57 +300,57 @@
 
 { statistical functions }
 
-function mean(const data : array of float) : float;
-function sum(const data : array of float) : float;
-function mean(const data : PFloat; Const N : longint) : float;
-function sum(const data : PFloat; Const N : Longint) : float;
+function mean(const data : array of double) : float;
+function sum(const data : array of double) : float;
+function mean(const data : PDouble; Const N : longint) : float;
+function sum(const data : PDouble; Const N : Longint) : float;
 function sumInt(const data : PInt64;Const N : longint) : Int64;
 function sumInt(const data : array of Int64) : Int64;
-function sumofsquares(const data : array of float) : float;
-function sumofsquares(const data : PFloat; Const N : Integer) : float;
+function sumofsquares(const data : array of double) : float;
+function sumofsquares(const data : PDouble; Const N : Integer) : float;
 { calculates the sum and the sum of squares of data }
-procedure sumsandsquares(const data : array of float;
+procedure sumsandsquares(const data : array of Double;
   var sum,sumofsquares : float);
-procedure sumsandsquares(const data : PFloat; Const N : Integer;
+procedure sumsandsquares(const data : PDouble; Const N : Integer;
   var sum,sumofsquares : float);
-function minvalue(const data : array of float) : float;
+function minvalue(const data : array of Double) : Double;
 function minvalue(const data : array of integer) : Integer;
-function minvalue(const data : PFloat; Const N : Integer) : float;
+function minvalue(const data : PDouble; Const N : Integer) : Double;
 function MinValue(const Data : PInteger; Const N : Integer): Integer;
-function maxvalue(const data : array of float) : float;
+function maxvalue(const data : array of Double) : Double;
 function maxvalue(const data : array of integer) : Integer;
-function maxvalue(const data : PFloat; Const N : Integer) : float;
+function maxvalue(const data : PDouble; Const N : Integer) : Double;
 function maxvalue(const data : PInteger; Const N : Integer) : Integer;
 { calculates the standard deviation }
-function stddev(const data : array of float) : float;
-function stddev(const data : PFloat; Const N : Integer) : float;
+function stddev(const data : array of Double) : float;
+function stddev(const data : PDouble; Const N : Integer) : float;
 { calculates the mean and stddev }
-procedure meanandstddev(const data : array of float;
+procedure meanandstddev(const data : array of Double;
   var mean,stddev : float);
-procedure meanandstddev(const data : PFloat;
+procedure meanandstddev(const data : PDouble;
   Const N : Longint;var mean,stddev : float);
-function variance(const data : array of float) : float;
-function totalvariance(const data : array of float) : float;
-function variance(const data : PFloat; Const N : Integer) : float;
-function totalvariance(const data : PFloat; Const N : Integer) : float;
+function variance(const data : array of Double) : float;
+function totalvariance(const data : array of Double) : float;
+function variance(const data : PDouble; Const N : Integer) : float;
+function totalvariance(const data : PDouble; Const N : Integer) : float;
 { returns random values with gaussian distribution }
 function randg(mean,stddev : float) : float;
 
 { I don't know what the following functions do: }
-function popnstddev(const data : array of float) : float;
-function popnstddev(const data : PFloat; Const N : Integer) : float;
-function popnvariance(const data : PFloat; Const N : Integer) : float;
-function popnvariance(const data : array of float) : float;
-procedure momentskewkurtosis(const data : array of float;
+function popnstddev(const data : array of Double) : float;
+function popnstddev(const data : PDouble; Const N : Integer) : float;
+function popnvariance(const data : PDouble; Const N : Integer) : float;
+function popnvariance(const data : array of Double) : float;
+procedure momentskewkurtosis(const data : array of Double;
   var m1,m2,m3,m4,skew,kurtosis : float);
-procedure momentskewkurtosis(const data : PFloat; Const N : Integer;
+procedure momentskewkurtosis(const data : PDouble; Const N : Integer;
   var m1,m2,m3,m4,skew,kurtosis : float);
 
 { geometrical function }
 
 { returns the euclidean L2 norm }
-function norm(const data : array of float) : float;
-function norm(const data : PFloat; Const N : Integer) : float;
+function norm(const data : array of double) : float;
+function norm(const data : PDouble; Const N : Integer) : float;
 
 function ifthen(val:boolean;const iftrue:integer; const iffalse:integer= 0) :integer; {$ifdef MATHINLINE}inline; {$endif}
 function ifthen(val:boolean;const iftrue:int64  ; const iffalse:int64 = 0)  :int64;   {$ifdef MATHINLINE}inline; {$endif}
@@ -724,26 +724,26 @@
      ldexp:=x*intpower(2.0,p);
   end;
 
-function mean(const data : array of float) : float;
+function mean(const data : array of Double) : float;
 
   begin
      Result:=Mean(@data[0],High(Data)+1);
   end;
 
-function mean(const data : PFloat; Const N : longint) : float;
+function mean(const data : PDouble; Const N : longint) : float;
 
   begin
      mean:=sum(Data,N);
      mean:=mean/N;
   end;
 
-function sum(const data : array of float) : float;
+function sum(const data : array of Double) : float;
 
   begin
      Result:=Sum(@Data[0],High(Data)+1);
   end;
 
-function sum(const data : PFloat;Const N : longint) : float;
+function sum(const data : PDouble;Const N : longint) : float;
 
   var
      i : longint;
@@ -771,13 +771,13 @@
      Result:=SumInt(@Data[0],High(Data)+1);
   end;
 
- function sumofsquares(const data : array of float) : float;
+ function sumofsquares(const data : array of Double) : float;
 
  begin
    Result:=sumofsquares(@data[0],High(Data)+1);
  end;
 
- function sumofsquares(const data : PFloat; Const N : Integer) : float;
+ function sumofsquares(const data : PDouble; Const N : Integer) : float;
 
   var
      i : longint;
@@ -788,14 +788,14 @@
        sumofsquares:=sumofsquares+sqr(data[i]);
   end;
 
-procedure sumsandsquares(const data : array of float;
+procedure sumsandsquares(const data : array of Double;
   var sum,sumofsquares : float);
 
 begin
   sumsandsquares (@Data[0],High(Data)+1,Sum,sumofsquares);
 end;
 
-procedure sumsandsquares(const data : PFloat; Const N : Integer;
+procedure sumsandsquares(const data : PDouble; Const N : Integer;
   var sum,sumofsquares : float);
 
   var
@@ -815,26 +815,26 @@
 
 
 
-function stddev(const data : array of float) : float;
+function stddev(const data : array of Double) : float;
 
 begin
   Result:=Stddev(@Data[0],High(Data)+1)
 end;
 
-function stddev(const data : PFloat; Const N : Integer) : float;
+function stddev(const data : PDouble; Const N : Integer) : float;
 
   begin
      StdDev:=Sqrt(Variance(Data,N));
   end;
 
-procedure meanandstddev(const data : array of float;
+procedure meanandstddev(const data : array of Double;
   var mean,stddev : float);
 
 begin
   Meanandstddev(@Data[0],High(Data)+1,Mean,stddev);
 end;
 
-procedure meanandstddev(const data : PFloat;
+procedure meanandstddev(const data : PDouble;
   Const N : Longint;var mean,stddev : float);
 
 Var I : longint;
@@ -855,13 +855,13 @@
     StdDev:=0;
 end;
 
-function variance(const data : array of float) : float;
+function variance(const data : array of Double) : float;
 
   begin
      Variance:=Variance(@Data[0],High(Data)+1);
   end;
 
-function variance(const data : PFloat; Const N : Integer) : float;
+function variance(const data : PDouble; Const N : Integer) : float;
 
   begin
      If N=1 then
@@ -870,13 +870,13 @@
        Result:=TotalVariance(Data,N)/(N-1);
   end;
 
-function totalvariance(const data : array of float) : float;
+function totalvariance(const data : array of Double) : float;
 
 begin
   Result:=TotalVariance(@Data[0],High(Data)+1);
 end;
 
-function totalvariance(const data : Pfloat;Const N : Integer) : float;
+function totalvariance(const data : PDouble;Const N : Integer) : float;
 
    var S,SS : Float;
 
@@ -902,38 +902,38 @@
      randg:=Sqrt(-2*ln(S2)/S2)*u1*stddev+Mean;
   end;
 
-function popnstddev(const data : array of float) : float;
+function popnstddev(const data : array of Double) : float;
 
   begin
      PopnStdDev:=Sqrt(PopnVariance(@Data[0],High(Data)+1));
   end;
 
-function popnstddev(const data : PFloat; Const N : Integer) : float;
+function popnstddev(const data : PDouble; Const N : Integer) : float;
 
   begin
      PopnStdDev:=Sqrt(PopnVariance(Data,N));
   end;
 
-function popnvariance(const data : array of float) : float;
+function popnvariance(const data : array of Double) : float;
 
 begin
   popnvariance:=popnvariance(@data[0],high(Data)+1);
 end;
 
-function popnvariance(const data : PFloat; Const N : Integer) : float;
+function popnvariance(const data : PDouble; Const N : Integer) : float;
 
   begin
      PopnVariance:=TotalVariance(Data,N)/N;
   end;
 
-procedure momentskewkurtosis(const data : array of float;
+procedure momentskewkurtosis(const data : array of Double;
   var m1,m2,m3,m4,skew,kurtosis : float);
 
 begin
   momentskewkurtosis(@Data[0],High(Data)+1,m1,m2,m3,m4,skew,kurtosis);
 end;
 
-procedure momentskewkurtosis(const data : PFloat; Const N : Integer;
+procedure momentskewkurtosis(const data : PDouble; Const N : Integer;
   var m1,m2,m3,m4,skew,kurtosis : float);
 
   Var S,SS,SC,SQ,invN,Acc,M1S,S2N,S3N,temp : Float;
@@ -967,13 +967,13 @@
      Kurtosis:=M4 / Sqr(M2);
   end;
 
-function norm(const data : array of float) : float;
+function norm(const data : array of Double) : float;
 
   begin
      norm:=Norm(@data[0],High(Data)+1);
   end;
 
-function norm(const data : PFloat; Const N : Integer) : float;
+function norm(const data : PDouble; Const N : Integer) : float;
 
   begin
      norm:=sqrt(sumofsquares(data,N));
@@ -1005,13 +1005,13 @@
 end;
 
 
-function minvalue(const data : array of float) : float;
+function minvalue(const data : array of Double) : Double;
 
 begin
-   Result:=minvalue(PFloat(@data[0]),High(Data)+1);
+   Result:=minvalue(PDouble(@data[0]),High(Data)+1);
 end;
 
-function minvalue(const data : PFloat; Const N : Integer) : float;
+function minvalue(const data : PDouble; Const N : Integer) : Double;
 
 var
    i : longint;
@@ -1033,13 +1033,13 @@
     If Data[I] > Result Then Result := Data[I];
 end;
 
-function maxvalue(const data : array of float) : float;
+function maxvalue(const data : array of Double) : Double;
 
 begin
-   Result:=maxvalue(PFloat(@data[0]),High(Data)+1);
+   Result:=maxvalue(PDouble(@data[0]),High(Data)+1);
 end;
 
-function maxvalue(const data : PFloat; Const N : Integer) : float;
+function maxvalue(const data : PDouble; Const N : Integer) : Double;
 
 var
    i : longint;
_______________________________________________
fpc-devel maillist  -  [email protected]
http://lists.freepascal.org/mailman/listinfo/fpc-devel

Reply via email to