Jump to content

Averages/Arithmetic mean: Difference between revisions

Updated 3 D entries
(Updated 3 D entries)
Line 488:
 
=={{header|D}}==
===Imperative Version===
<lang d>import std.stdio: writeln;
 
real mean(Range)(Range r) {
real sum = 0.0;
int count = 0;
 
foreach (item; r) {
Line 511 ⟶ 512:
writeln("mean: ", data.mean());
}</lang>
{{out}}
Output:<pre>mean: 0
mean: 3.83333</pre>
===More Functional Version===
More functional style, same output:
Same output.
<lang d>import std.stdio, std.algorithm, std.range;
 
auto mean(Range)(Range r) {
auto len = r.walkLength(r);
return len == 0 ? 0.0 : reduce!q{a + b}(0.0L, r) / len;
}
Line 527 ⟶ 530:
writeln("mean: ", data.mean());
}</lang>
===More Precise Version===
A (naive?) version that tries to minimize precision loss :
<lang d>import std.stdio, std.conv, std.algorithm, std.math, std.traits;
 
Line 534 ⟶ 538:
auto num = n.dup;
schwartzSort!(abs, "a > b")(num);
return reduce!"q{a+b"}(0.0L, map!(to!E)(num)) / max(1, num.length);
}
 
Line 542 ⟶ 546:
writefln("%8.5f", mean([-1e20, 3, 1, 4, 1, 5, 9, 1e20]));
}</lang>
{{out}}
Output:
<pre> 0.00000
2.87500
Cookies help us deliver our services. By using our services, you agree to our use of cookies.