Data update

This commit is contained in:
Ingy döt Net 2026-04-30 12:34:36 -04:00
parent 4bb20c9b71
commit cbaf4c4b64
12390 changed files with 318560 additions and 27248 deletions

View file

@ -0,0 +1,37 @@
100 REM Cumulative standard deviation
110 DECLARE EXTERNAL SUB Init
120 DECLARE EXTERNAL SUB Add
130 DECLARE EXTERNAL FUNCTION Deviation
140 DIM TestData(1 TO 8)
150 FOR I = 1 TO 8
160 READ TestData(I)
170 NEXT I
180 DATA 2, 4, 4, 4, 5, 5, 7, 9
190 CALL Init(N, Sum, SumOfSquares)
200 PRINT "N ITEM AVG STDDEV"
210 FOR I = LBOUND(TestData) TO UBOUND(TestData)
220 CALL Add(N, Sum, SumOfSquares, TestData(I))
230 PRINT USING "# ": I;
240 PRINT USING " # ": TestData(I);
250 PRINT USING "#.### ": Sum / I;
260 PRINT USING " #.###": Deviation(N, Sum, SumOfSquares)
270 NEXT I
280 END
290 !
300 EXTERNAL SUB Init(N, Sum, SumOfSquares)
310 REM The parameters N, Sum, SumOfSquares are passed by reference. So, the arguments must be variables.
320 LET N = 0
330 LET Sum = 0.0
340 LET SumOfSquares = 0.0
350 END SUB
360 !
370 EXTERNAL SUB Add(N, Sum, SumOfSquares, P)
380 REM The parameters N, Sum, SumOfSquares are passed by reference. So, the arguments must be variables.
390 LET N = N + 1
400 LET Sum = Sum + P
410 LET SumOfSquares = SumOfSquares + P ^ 2
420 END SUB
430 !
440 EXTERNAL FUNCTION Deviation (N, Sum, SumOfSquares)
450 LET Deviation = SQR(SumOfSquares / N - (Sum / N) ^ 2)
460 END FUNCTION

View file

@ -0,0 +1,35 @@
with Ada.Numerics.Elementary_Functions; use Ada.Numerics.Elementary_Functions;
with Ada.Numerics.Elementary_Functions; use Ada.Numerics.Elementary_Functions;
with Ada.Text_IO; use Ada.Text_IO;
with Ada.Float_Text_IO; use Ada.Float_Text_IO;
with Ada.Integer_Text_IO; use Ada.Integer_Text_IO;
procedure Test_Deviation is
type Sample is record
N : Natural := 0;
Sum : Float := 0.0;
SumOfSquares : Float := 0.0;
end record;
procedure Add (Data : in out Sample; Point : Float) is
begin
Data.N := Data.N + 1;
Data.Sum := Data.Sum + Point;
Data.SumOfSquares := Data.SumOfSquares + Point ** 2;
end Add;
function Deviation (Data : Sample) return Float is
begin
return Sqrt (Data.SumOfSquares / Float (Data.N) - (Data.Sum / Float (Data.N)) ** 2);
end Deviation;
Data : Sample;
Test : array (1..8) of Integer := (2, 4, 4, 4, 5, 5, 7, 9);
begin
for Index in Test'Range loop
Add (Data, Float(Test(Index)));
Put("N="); Put(Item => Index, Width => 1);
Put(" ITEM="); Put(Item => Test(Index), Width => 1);
Put(" AVG="); Put(Item => Float(Data.Sum)/Float(Index), Fore => 1, Aft => 3, Exp => 0);
Put(" STDDEV="); Put(Item => Deviation (Data), Fore => 1, Aft => 3, Exp => 0);
New_line;
end loop;
end Test_Deviation;

View file

@ -0,0 +1,71 @@
IDENTIFICATION DIVISION.
PROGRAM-ID. run-stddev.
environment division.
input-output section.
file-control.
select input-file assign to "input.txt"
organization is line sequential.
data division.
file section.
fd input-file.
01 inp-record.
03 inp-fld pic 9(03).
working-storage section.
01 filler pic 9(01) value 0.
88 no-more-input value 1.
01 ws-tb-data.
03 ws-tb-size pic 9(03).
03 ws-tb-table.
05 ws-tb-fld pic s9(05)v9999 comp-3 occurs 0 to 100 times
depending on ws-tb-size.
01 ws-stddev pic s9(05)v9999 comp-3.
PROCEDURE DIVISION.
move 0 to ws-tb-size
open input input-file
read input-file
at end
set no-more-input to true
end-read
perform
test after
until no-more-input
add 1 to ws-tb-size
move inp-fld to ws-tb-fld (ws-tb-size)
call 'stddev' using by reference ws-tb-data
ws-stddev
display 'inp=' inp-fld ' stddev=' ws-stddev
read input-file at end set no-more-input to true end-read
end-perform
close input-file
stop run.
end program run-stddev.
IDENTIFICATION DIVISION.
PROGRAM-ID. stddev.
data division.
working-storage section.
01 ws-tbx pic s9(03) comp.
01 ws-tb-work.
03 ws-sum pic s9(05)v9999 comp-3 value +0.
03 ws-sumsq pic s9(05)v9999 comp-3 value +0.
03 ws-avg pic s9(05)v9999 comp-3 value +0.
linkage section.
01 ws-tb-data.
03 ws-tb-size pic 9(03).
03 ws-tb-table.
05 ws-tb-fld pic s9(05)v9999 comp-3 occurs 0 to 100 times
depending on ws-tb-size.
01 ws-stddev pic s9(05)v9999 comp-3.
PROCEDURE DIVISION using ws-tb-data ws-stddev.
compute ws-sum = 0
perform test before varying ws-tbx from 1 by +1 until ws-tbx > ws-tb-size
compute ws-sum = ws-sum + ws-tb-fld (ws-tbx)
end-perform
compute ws-avg rounded = ws-sum / ws-tb-size
compute ws-sumsq = 0
perform test before varying ws-tbx from 1 by +1 until ws-tbx > ws-tb-size
compute ws-sumsq = ws-sumsq
+ (ws-tb-fld (ws-tbx) - ws-avg) ** 2.0
end-perform
compute ws-stddev = ( ws-sumsq / ws-tb-size) ** 0.5
goback.
end program stddev.

View file

@ -0,0 +1,9 @@
sample output:
inp=002 stddev=+00000.0000
inp=004 stddev=+00001.0000
inp=004 stddev=+00000.9427
inp=004 stddev=+00000.8660
inp=005 stddev=+00000.9797
inp=005 stddev=+00001.0000
inp=007 stddev=+00001.3996
inp=009 stddev=+00002.0000

View file

@ -0,0 +1,16 @@
(defun running-std (items)
(let ((running-sum 0)
(running-len 0)
(running-squared-sum 0)
(result 0))
(dolist (item items)
(setq running-sum (+ running-sum item))
(setq running-len (1+ running-len))
(setq running-squared-sum (+ running-squared-sum (* item item)))
(setq result (sqrt (- (/ running-squared-sum (float running-len))
(/ (* running-sum running-sum)
(float (* running-len running-len))))))
(message "%f" result))
result))
(running-std '(2 4 4 4 5 5 7 9))

View file

@ -0,0 +1,2 @@
(let ((x '(2 4 4 4 5 5 7 9)))
(string-to-number (calc-eval "sqrt(vpvar($1))" nil (append '(vec) x))))

View file

@ -0,0 +1,24 @@
;; lexical-binding: t
(require 'generator)
(iter-defun std-dev-gen (lst)
(let ((sum 0)
(avg 0)
(tmp '())
(std 0))
(dolist (i lst)
(setq i (float i))
(push i tmp)
(setq sum (+ sum i))
(setq avg (/ sum (length tmp)))
(setq std 0)
(dolist (j tmp)
(setq std (+ std (expt (- j avg) 2))))
(setq std (/ std (length tmp)))
(setq std (sqrt std))
(iter-yield std))))
(let* ((test-data '(2 4 4 4 5 5 7 9))
(generator (std-dev-gen test-data)))
(dolist (i test-data)
(message "with %d: %f" i (iter-next generator))))

View file

@ -0,0 +1,23 @@
using Lambda;
class Main {
static function main():Void {
var nums = [2, 4, 4, 4, 5, 5, 7, 9];
for (i in 1...nums.length+1)
Sys.println(sdev(nums.slice(0, i)));
}
static function average<T:Float>(nums:Array<T>):Float {
return nums.fold(function(n, t) return n + t, 0) / nums.length;
}
static function sdev<T:Float>(nums:Array<T>):Float {
var store = [];
var avg = average(nums);
for (n in nums) {
store.push((n - avg) * (n - avg));
}
return Math.sqrt(average(store));
}
}

View file

@ -0,0 +1,50 @@
program CumulDev;
(* Cumulative standard deviation *)
unit SAMPLE: class;
var
n: integer,
sum: real,
sum_of_squares: real;
unit add: procedure (p: real);
begin
n := n + 1;
sum := sum + p;
sum_of_squares := sum_of_squares + p * p
end add;
begin (* constructor *)
n := 0;
sum := 0.0;
sum_of_squares := 0.0
end;
var
test: arrayof real,
s: SAMPLE,
i: integer;
unit deviation: function (s: SAMPLE): real;
var
quot: real;
begin
quot := s.sum / s.n;
result := sqrt(s.sum_of_squares / s.n - quot * quot)
end deviation;
begin
array test dim (1 : 8);
test(1) := 2; test(2) := 4; test(3) := 4; test(4) := 4;
test(5) := 5; test(6) := 5; test(7) := 7; test(8) := 9;
s := new SAMPLE;
writeln("N ITEM AVG STDDEV");
for i := 1 to upper(test)
do
call s.add(test(i));
write(i: 1, " ", test(i): 3: 1, " ");
write(s.sum / i: 5: 3, " ");
writeln(deviation(s): 5: 3);
od;
kill(s);
end CumulDev.

View file

@ -0,0 +1,70 @@
MODULE CumulDev;
(* Cumulative standard deviation *)
FROM RealMath IMPORT
sqrt;
FROM SRealIO IMPORT
WriteFixed;
FROM STextIO IMPORT
WriteLn, WriteString;
FROM SWholeIO IMPORT
WriteInt;
TYPE
TSample = RECORD
N: CARDINAL;
Sum: REAL;
SumOfSquares: REAL
END;
TData = ARRAY [1 .. 8] OF REAL;
VAR
Test: TData;
S: TSample;
I: CARDINAL;
PROCEDURE Init(VAR OUT S: TSample);
BEGIN
WITH S DO
N := 0;
Sum := 0.0;
SumOfSquares := 0.0
END;
END Init;
PROCEDURE Add(VAR INOUT S: TSample; P: REAL);
BEGIN
WITH S DO
N := N + 1;
Sum := Sum + P;
SumOfSquares := SumOfSquares + P * P
END
END Add;
PROCEDURE Deviation (S: TSample): REAL;
VAR
Quot: REAL;
BEGIN
WITH S DO
Quot := Sum / FLOAT(N);
RETURN sqrt(SumOfSquares / FLOAT(N) - Quot * Quot)
END;
END Deviation;
BEGIN
Test := TData{2.0, 4.0, 4.0, 4.0, 5.0, 5.0, 7.0, 9.0};
Init(S);
WriteString("N ITEM AVG STDDEV");
WriteLn;
FOR I := 1 TO HIGH(Test) DO
Add(S, Test[I]);
WriteInt(I, 1);
WriteString(" ");
WriteFixed(Test[I], 1, 3);
WriteString(" ");
WriteFixed(S.Sum / FLOAT(I), 3, 5);
WriteString(" ");
WriteFixed(Deviation(S), 3, 5);
WriteLn
END;
END CumulDev.

View file

@ -0,0 +1,60 @@
MODULE CumulativeStandardDeviation;
IMPORT Math, Out;
TYPE CSD* = POINTER TO CSDStruct;
CSDStruct
= RECORD
sum, sum2, sd : REAL;
n : INTEGER
END;
PROCEDURE sample*( sd : CSD ; x : REAL ) : REAL;
VAR r, sum, sum2 : REAL;
BEGIN
sum := sd.sum + x;
sum2 := sd.sum2 + ( x * x );;
INC( sd.n );
r := FLT( sd.n );
IF sd.n = 0 THEN
sd.sd := 0.0
ELSE
sd.sd := Math.sqrt( sum2 / r - sum * sum / r / r )
END;
sd.sum := sum;
sd.sum2 := sum2
RETURN sd.sd
END sample;
PROCEDURE NewCSD*() : CSD ;
VAR sd : CSD;
BEGIN
NEW( sd );
sd.n := 0;
sd.sum := 0.0;
sd.sum2 := 0.0;
sd.sd := 0.0
RETURN sd
END NewCSD ;
PROCEDURE showSampleEffect( sd : CSD; x : REAL );
VAR dev : REAL;
BEGIN
dev := sample( sd, x );
Out.Int( sd.n, 6 );Out.String( ": " );Out.Real( x, 10 );
Out.String( " -> " );Out.Real( dev, 10 );Out.Ln
END showSampleEffect;
PROCEDURE test;
VAR sd : CSD;
BEGIN
sd := NewCSD();
showSampleEffect( sd, 2.0 );
showSampleEffect( sd, 4.0 );showSampleEffect( sd, 4.0 );showSampleEffect( sd, 4.0 );
showSampleEffect( sd, 5.0 );showSampleEffect( sd, 5.0 );
showSampleEffect( sd, 7.0 );
showSampleEffect( sd, 9.0 )
END test;
BEGIN
test;
END CumulativeStandardDeviation.

View file

@ -0,0 +1,60 @@
MODULE CumulativeStandardDeviation;
IMPORT Math, Out;
TYPE CSD* = POINTER TO CSDStruct;
CSDStruct*
= RECORD
sum, sum2, sd : REAL;
n : INTEGER;
END;
PROCEDURE ( sd : CSD ) sample*( x : REAL ) : REAL;
VAR r, sum, sum2 : REAL;
BEGIN
sum := sd.sum + x;
sum2 := sd.sum2 + ( x * x );;
INC( sd.n );
r := sd.n;
IF sd.n = 0 THEN
sd.sd := 0.0
ELSE
sd.sd := Math.sqrt( sum2 / r - sum * sum / r / r )
END;
sd.sum := sum;
sd.sum2 := sum2;
RETURN sd.sd
END sample;
PROCEDURE NewCSD*() : CSD ;
VAR sd : CSD;
BEGIN
NEW( sd );
sd.n := 0;
sd.sum := 0.0;
sd.sum2 := 0.0;
sd.sd := 0.0;
RETURN sd
END NewCSD ;
PROCEDURE ( sd : CSD ) showSampleEffect( x : REAL );
VAR dev : REAL;
BEGIN
dev := sd.sample( x );
Out.Int( sd.n, 6 );Out.String( ": " );Out.Real( x, 15 );
Out.String( " -> " );Out.Real( dev, 15 );Out.Ln
END showSampleEffect;
PROCEDURE test;
VAR sd : CSD;
BEGIN
sd := NewCSD();
sd.showSampleEffect( 2.0 );
sd.showSampleEffect( 4.0 ); sd.showSampleEffect( 4.0 ); sd.showSampleEffect( 4.0 );
sd.showSampleEffect( 5.0 ); sd.showSampleEffect( 5.0 );
sd.showSampleEffect( 7.0 );
sd.showSampleEffect( 9.0 )
END test;
BEGIN
test;
END CumulativeStandardDeviation.

View file

@ -0,0 +1,26 @@
with javascript_semantics
atom sdn = 0, sdsum = 0, sdsumsq = 0
procedure sdadd(atom n)
sdn += 1
sdsum += n
sdsumsq += n*n
end procedure
function sdavg()
return sdsum/sdn
end function
function sddev()
return sqrt(sdsumsq/sdn - power(sdsum/sdn,2))
end function
--test code:
constant testset = {2, 4, 4, 4, 5, 5, 7, 9}
integer ti
for i=1 to length(testset) do
ti = testset[i]
sdadd(ti)
printf(1,"N=%d Item=%d Avg=%5.3f StdDev=%5.3f\n",{i,ti,sdavg(),sddev()})
end for

View file

@ -0,0 +1,6 @@
with javascript_semantics
constant testset = {2, 4, 4, 4, 5, 5, 7, 9}
for i,t in testset do
sequence test = testset[1..i]
printf(1,"N=%d Item=%d Avg=%5.3f StdDev=%5.3f\n",{i,t,average(test),std_dev(test)})
end for

View file

@ -0,0 +1,18 @@
require "table2"
local fmt = require "fmt"
local function cum_std_dev(a)
for i = 1, #a do
local b = a:slice(1, i)
fmt.print("Values : %,s", b)
coroutine.yield(b:stddev())
end
end
local a = {2, 4, 4, 4, 5, 5, 7, 9}
local co = coroutine.create(cum_std_dev)
while true do
local _, sd = coroutine.resume(co, a)
if !sd then break end
fmt.print("Std Dev : %10.8f\n", sd)
end

View file

@ -0,0 +1,13 @@
function Get-StandardDeviation {
begin {
$avg = 0
$nums = @()
}
process {
$nums += $_
$avg = ($nums | Measure-Object -Average).Average
$sum = 0;
$nums | ForEach-Object { $sum += ($avg - $_) * ($avg - $_) }
[Math]::Sqrt($sum / $nums.Length)
}
}

View file

@ -0,0 +1,43 @@
' Cumulative standard deviation
TYPE Sample
N AS INTEGER
Sum AS SINGLE
SumOfSquares AS SINGLE
END TYPE
DECLARE SUB Init (S AS Sample)
DECLARE SUB Add (S AS Sample, BYVAL P AS SINGLE)
DECLARE FUNCTION Deviation! (S AS Sample)
DIM Test(1 TO 8) AS SINGLE
DIM S AS Sample
FOR I = 1 TO 8
READ Test(I)
NEXT I
DATA 2, 4, 4, 4, 5, 5, 7, 9
CALL Init(S)
PRINT "N ITEM AVG STDDEV"
FOR I = LBOUND(Test) TO UBOUND(Test)
CALL Add(S, Test(I))
PRINT USING "# "; I;
PRINT USING " # "; Test(I);
PRINT USING "#.### "; S.Sum / I;
PRINT USING " #.###"; Deviation!(S)
NEXT I
END
SUB Add (S AS Sample, BYVAL P AS SINGLE)
S.N = S.N + 1
S.Sum = S.Sum + P
S.SumOfSquares = S.SumOfSquares + P ^ 2
END SUB
FUNCTION Deviation! (S AS Sample)
Deviation! = SQR(S.SumOfSquares / S.N - (S.Sum / S.N) ^ 2)
END FUNCTION
SUB Init (S AS Sample)
S.N = 0
S.Sum = 0!
S.SumOfSquares = 0!
END SUB

View file

@ -0,0 +1,21 @@
data = Array(2,4,4,4,5,5,7,9)
For i = 0 To UBound(data)
WScript.StdOut.Write "value = " & data(i) &_
" running sd = " & sd(data,i)
WScript.StdOut.WriteLine
Next
Function sd(arr,n)
mean = 0
variance = 0
For j = 0 To n
mean = mean + arr(j)
Next
mean = mean/(n+1)
For k = 0 To n
variance = variance + ((arr(k)-mean)^2)
Next
variance = variance/(n+1)
sd = FormatNumber(Sqr(variance),6)
End Function