# Standard Deviation – Perl Script When you need to be more accurate than average, you need standard deviation bro…

``` #!/usr/bin/perl use strict; print standard_deviation(1,2,3,4,5,6,7,8,9,10)."\n"; sub standard_deviation { my(@numbers) = @_; #Prevent division by 0 error in case you get junk data return undef unless(scalar(@numbers)); # Step 1, find the mean of the numbers my \$total1 = 0; foreach my \$num (@numbers) { \$total1 += \$num; } my \$mean1 = \$total1 / (scalar @numbers); # Step 2, find the mean of the squares of the differences # between each number and the mean my \$total2 = 0; foreach my \$num (@numbers) { \$total2 += (\$mean1-\$num)**2; } my \$mean2 = \$total2 / (scalar @numbers); ```

```# Step 3, standard deviation is the square root of the # above mean my \$std_dev = sqrt(\$mean2); return \$std_dev; } ```

﻿

1. codeswish wrote:

Here’s a rewrite of your standard deviation script in ruby if any of your visitors would be into that sort of thing:

#!/usr/bin/env ruby
#

def standard_deviation(*numbers)
return if numbers.size == 0
count = numbers.size

sum = numbers.reduce(&:+).to_f
mean = sum / count

sum_of_squares = numbers.reduce(0) { |r, n|
r + ((n – mean).abs ** 2)
}

variance = sum_of_squares / count

Math.sqrt(variance)
end

puts standard_deviation(1,2,3,4,5,6,7,8,9,10)

2. Joe Wee wrote:

And here is the same program implemented in Haskell:

stdDev :: Floating a => [a] -> a

–What we get if we have an empty list
stdDev [] = 0

–Take square root of the Variance
stdDev xs = sqrt \$ (sum \$ map (^2) xs) / l – (sum xs / l) ^ 2
where l = fromIntegral \$ length xs 