cumulative_standard_deviation.sf 474 B

1234567891011121314151617181920212223242526272829
  1. #!/usr/bin/ruby
  2. #
  3. ## https://rosettacode.org/wiki/Cumulative_standard_deviation
  4. #
  5. class StdDevAccumulator(n=0, sum=0, sumofsquares=0) {
  6. method <<(num) {
  7. n += 1;
  8. sum += num;
  9. sumofsquares += num**2;
  10. self;
  11. }
  12. method stddev {
  13. sqrt(sumofsquares/n - pow(sum/n, 2));
  14. }
  15. method to_s {
  16. self.stddev.to_s;
  17. }
  18. }
  19. var i = 0;
  20. var sd = StdDevAccumulator.new;
  21. [2,4,4,4,5,5,7,9].each {|n|
  22. say "adding #{n}: stddev of #{i+=1} samples is #{sd << n}"
  23. }