Cumulative standard deviation: Difference between revisions

Content added Content deleted
Line 2,886: Line 2,886:
=={{header|Scala}}==
=={{header|Scala}}==
{{libheader|Scala}}
{{libheader|Scala}}
<lang Scala>import scala.math._
<lang Scala>import scala.math.sqrt
import Numeric.Implicits._


object StddevCalc extends App {
object StddevCalc extends App {

def avg[T](ts: Iterable[T])(implicit num: Fractional[T]): T = {
num.div(ts.sum, num.fromInt(ts.size)) // Leaving with type of function T
}


def calcAvgAndStddev[T](ts: Iterable[T])(implicit num: Fractional[T]): (T, Double) = {
def calcAvgAndStddev[T](ts: Iterable[T])(implicit num: Fractional[T]): (T, Double) = {
def avg(ts: Iterable[T])(implicit num: Fractional[T]): T = {
num.div(ts.sum, num.fromInt(ts.size)) // Leaving with type of function T
}

val mean = avg(ts) // Leave val type of T
val mean = avg(ts) // Leave val type of T
val stdDev = // Root of mean diffs
val stdDev = // Root of mean diffs
sqrt(num.toDouble(
sqrt(num.toDouble(ts.foldLeft(num.zero)((b, a) => num.plus(b, num.times(num.minus(a, mean), num.minus(a, mean))))) / ts.size)
ts.foldLeft(num.zero)((b, a) =>
num.plus(b, num.times(num.minus(a, mean), num.minus(a, mean))))) /
ts.size)
(mean, stdDev)
(mean, stdDev)
}
}