RosettaCodeData/Task/Cumulative-standard-deviation/Liberty-BASIC/cumulative-standard-deviati...

27 lines
1.0 KiB
Plaintext

dim SD.storage$( 100) ' can call up to 100 versions, using ID to identify.. arrays are global.
' holds (space-separated) number of data items so far, current sum.of.values and current sum.of.squares
for i =1 to 8
read x
print "New data "; x; " so S.D. now = "; using( "###.######", standard.deviation( 1, x))
next i
end
function standard.deviation( ID, in)
if SD.storage$( ID) ="" then SD.storage$( ID) ="0 0 0"
num.so.far =val( word$( SD.storage$( ID), 1))
sum.vals =val( word$( SD.storage$( ID), 2))
sum.sqs =val( word$( SD.storage$( ID), 3))
num.so.far =num.so.far +1
sum.vals =sum.vals +in
sum.sqs =sum.sqs +in^2
' standard deviation = square root of (the average of the squares less the square of the average)
standard.deviation =( ( sum.sqs /num.so.far) - ( sum.vals /num.so.far)^2)^0.5
SD.storage$( ID) =str$( num.so.far) +" " +str$( sum.vals) +" " +str$( sum.sqs)
end function
Data 2, 4, 4, 4, 5, 5, 7, 9