Commit 55dc3a20 authored by Mike Bostock's avatar Mike Bostock
Browse files

Merge branch 'mean' into 3.4.6

parents c693847f c0e84e2c
...@@ -91,13 +91,13 @@ ...@@ -91,13 +91,13 @@
return x != null && !isNaN(x); return x != null && !isNaN(x);
} }
d3.mean = function(array, f) { d3.mean = function(array, f) {
var n = array.length, a, m = 0, i = -1, j = 0; var s = 0, n = array.length, a, i = -1, j = n;
if (arguments.length === 1) { if (arguments.length === 1) {
while (++i < n) if (d3_number(a = array[i])) m += (a - m) / ++j; while (++i < n) if (d3_number(a = array[i])) s += a; else --j;
} else { } else {
while (++i < n) if (d3_number(a = f.call(array, array[i], i))) m += (a - m) / ++j; while (++i < n) if (d3_number(a = f.call(array, array[i], i))) s += a; else --j;
} }
return j ? m : undefined; return j ? s / j : undefined;
}; };
d3.quantile = function(values, p) { d3.quantile = function(values, p) {
var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h; var H = (values.length - 1) * p + 1, h = Math.floor(H), v = +values[h - 1], e = H - h;
......
This diff is collapsed.
import "../math/number"; import "../math/number";
d3.mean = function(array, f) { d3.mean = function(array, f) {
var n = array.length, var s = 0,
n = array.length,
a, a,
m = 0,
i = -1, i = -1,
j = 0; j = n;
if (arguments.length === 1) { if (arguments.length === 1) {
while (++i < n) if (d3_number(a = array[i])) m += (a - m) / ++j; while (++i < n) if (d3_number(a = array[i])) s += a; else --j;
} else { } else {
while (++i < n) if (d3_number(a = f.call(array, array[i], i))) m += (a - m) / ++j; while (++i < n) if (d3_number(a = f.call(array, array[i], i))) s += a; else --j;
} }
return j ? m : undefined; return j ? s / j : undefined;
}; };
...@@ -18,10 +18,6 @@ suite.addBatch({ ...@@ -18,10 +18,6 @@ suite.addBatch({
assert.equal(mean([1, 2, 3, 4, 5, NaN]), 3); assert.equal(mean([1, 2, 3, 4, 5, NaN]), 3);
assert.equal(mean([10, null, 3, undefined, 5, NaN]), 6); assert.equal(mean([10, null, 3, undefined, 5, NaN]), 6);
}, },
"can handle large numbers without overflowing": function(mean) {
assert.equal(mean([Number.MAX_VALUE, Number.MAX_VALUE]), Number.MAX_VALUE);
assert.equal(mean([-Number.MAX_VALUE, -Number.MAX_VALUE]), -Number.MAX_VALUE);
},
"returns undefined for empty array": function(mean) { "returns undefined for empty array": function(mean) {
assert.isUndefined(mean([])); assert.isUndefined(mean([]));
assert.isUndefined(mean([null])); assert.isUndefined(mean([null]));
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment