Cumulative standard deviation: Difference between revisions

Content added Content deleted
m (→‎{{header|Perl 6}}: one newline missing)
(→‎{{header|Perl}}: shorter version with closure)
Line 1,299: Line 1,299:
}
}
print "std dev = $sd\n";</lang>
print "std dev = $sd\n";</lang>

A much shorter version using a closure and a property of the variance:

<lang perl># <(x - <x>)²> = <x²> - <x>²
sub stddev;
{
my @sum;
sub stddev {
my $x = shift;
$sum[0]++;
return sqrt(
($sum[2] += $x**2) / $sum[0] -
(($sum[1] += $x) / $sum[0])**2
);
}
}

use feature qw(say);
say stddev $_ for 2, 4, 4, 4, 5, 5, 7, 9;</lang>

{{out}}
<pre>0
1
0.942809041582063
0.866025403784439
0.979795897113272
1
1.39970842444753
2</pre>


=={{header|Perl 6}}==
=={{header|Perl 6}}==