def var1(a)
sum = 0.0
sumsq = 0.0
a.each{|v|
sum += v
sumsq += v*v
}
ave = sum / a.size
return sumsq / a.size - ave * ave
end
def var2(a)
sum = 0.0
a.each{|v|
sum += v
}
ave = sum / a.size
sum = 0.0
a.each{|v|
sum += (v-ave)*(v-ave)
}
return sum / a.size
end
def var3(a)
sum = 0.0
diff = 0.0
a.each{ |v|
y = v - diff
t = sum + y
diff = (t-sum)-y
sum = t
}
ave = sum / a.size
sum = 0.0
diff = 0.0
a.each{ |v|
y = (v-ave)*(v-ave) - diff
t = sum + y
diff = (t-sum)-y
sum = t
}
return sum / a.size
end
a = Array.new
100000.times{
a << rand
}
p var1(a)
p var2(a)
p var3(a)