Random numbers: Difference between revisions

Content added Content deleted
Line 1,952: Line 1,952:
* Let's test it
* Let's test it
*/
*/
def calcAvgAndStddev[T](ts: Iterable[T])(implicit num: Fractional[T]): (T, Double) = {
def calcAvgAndStddev[T](ts: Iterable[T])(implicit num: Fractional[T]): (T, Double) = {
val mean: T =
def avg(ts: Iterable[T])(implicit num: Fractional[T]): T = {
num.div(ts.sum, num.fromInt(ts.size)) // Leaving with type of function T
num.div(ts.sum, num.fromInt(ts.size)) // Leaving with type of function T
}


// Root of mean diffs
def mean = avg(ts)
val stdDev = sqrt(ts.map { x =>
val diff = num.toDouble(num.minus(x, mean))
diff * diff
}.sum / ts.size)


def stdDev = // Root of mean diffs
(mean, stdDev)
}
math.sqrt(num.toDouble(
ts.foldLeft(num.zero)((b, a) =>
num.plus(b, num.times(num.minus(a, mean), num.minus(a, mean))))) / ts.size)

(mean, stdDev)
}


println(calcAvgAndStddev(distrubution.take(1000))) // e.g. (1.0061433267806525,0.5291834867560893)</lang>
println(calcAvgAndStddev(distrubution.take(1000))) // e.g. (1.0061433267806525,0.5291834867560893)</lang>