45 lines
1.4 KiB
Plaintext
45 lines
1.4 KiB
Plaintext
import ballerina/io;
|
|
import ballerina/random;
|
|
|
|
function mean(float[] a) returns float {
|
|
return float:sum(...a) / a.length();
|
|
}
|
|
|
|
function popStdDev(float[] a) returns float {
|
|
float m = mean(a);
|
|
var sumSq = function(float total, float next) returns float {
|
|
return total + next * next;
|
|
};
|
|
return (a.reduce(sumSq, 0.0) / a.length() - m * m).sqrt();
|
|
}
|
|
|
|
function repeat(string s, int times) returns string {
|
|
string r = "";
|
|
foreach int i in 1...times { r += s; }
|
|
return r;
|
|
}
|
|
|
|
public function main() {
|
|
foreach int i in [100, 1000, 10000] {
|
|
float[] a = [];
|
|
a.setLength(i);
|
|
foreach int j in 0..<i { a[j] = random:createDecimal(); }
|
|
io:println(`For ${i} random numbers:`);
|
|
io:println(" mean = ", mean(a));
|
|
io:println(" std/dev = ", popStdDev(a));
|
|
int scale = i / 100;
|
|
io:println(" scale = ", scale, " per asterisk");
|
|
int[10] sums = [];
|
|
foreach float e in a {
|
|
int f = <int>(e*10).floor();
|
|
sums[f] += 1;
|
|
}
|
|
foreach int j in 0...8 {
|
|
sums[j] = <int>((<float>sums[j] / scale).round());
|
|
io:println(` 0.${j} - 0.${j+1}: `, repeat("*", sums[j]));
|
|
}
|
|
sums[9] = 100 - int:sum(...sums.slice(0, 9));
|
|
io:println(" 0.9 - 1.0: ", repeat("*", sums[9]), "\n");
|
|
}
|
|
}
|