class Array
  def errorcheck(name)
    raise "The #{name} could not be calculated for this array: Empty Array" if self.empty?
    #raise "The #{name} could not be calculated for this array: Non-numeric Array" if self.each {|value| !value.is_a?(Numeric)}
  end
  def sum
    errorcheck("sum")
    sum = 0
    self.each {|value| sum+=value}
    return sum
  end
  def mean
    errorcheck("mean") 
    return (self.sum).to_f/self.size
  end
  def stdev
    errorcheck("stdev")
    temp = 0
    self.each {|value| temp+=((value - self.mean)**2)}
    Math.sqrt(temp/self.size)
  end
  def median
    errorcheck("median")
    array = self.sort
    pos = array.size / 2
    return array.size % 2 == 1 ? array[pos] : (array[pos-1..pos]).mean
  end
  def range
    errorcheck("range")
    minval = self.min
    maxval = self.max
    return "Range: #{minval} ~ #{maxval}"
  end
end

regnum = [3, "gay", 7, 19]
floatnum = [5.5, 5, 10, 20]
regempty = []
tempx = ["x", "y"]

puts floatnum.stdev