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) |
|||
(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> |