Skip to content

Commit

Permalink
Add d3.random.{logNormal,irwinHall}. Fixes d3#571.
Browse files Browse the repository at this point in the history
  • Loading branch information
mbostock committed Aug 9, 2012
1 parent e42eb90 commit 952abef
Show file tree
Hide file tree
Showing 4 changed files with 78 additions and 11 deletions.
24 changes: 20 additions & 4 deletions d3.v2.js
Original file line number Diff line number Diff line change
Expand Up @@ -183,17 +183,33 @@
return [ a, c ];
};
d3.random = {
normal: function(mean, deviation) {
if (arguments.length < 2) deviation = 1;
if (arguments.length < 1) mean = 0;
normal: function(µ, σ) {
var n = arguments.length;
if (n < 2) σ = 1;
if (n < 1) µ = 0;
return function() {
var x, y, r;
do {
x = Math.random() * 2 - 1;
y = Math.random() * 2 - 1;
r = x * x + y * y;
} while (!r || r > 1);
return mean + deviation * x * Math.sqrt(-2 * Math.log(r) / r);
return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);
};
},
logNormal: function(µ, σ) {
var n = arguments.length;
if (n < 2) σ = 1;
if (n < 1) µ = 0;
var random = d3.random.normal();
return function() {
return Math.exp(µ + σ * random());
};
},
irwinHall: function(m) {
return function() {
for (var s = 0, j = 0; j < m; j++) s += Math.random();
return s / m;
};
}
};
Expand Down
6 changes: 3 additions & 3 deletions d3.v2.min.js

Large diffs are not rendered by default.

24 changes: 20 additions & 4 deletions src/core/random.js
Original file line number Diff line number Diff line change
@@ -1,15 +1,31 @@
d3.random = {
normal: function(mean, deviation) {
if (arguments.length < 2) deviation = 1;
if (arguments.length < 1) mean = 0;
normal: function(µ, σ) {
var n = arguments.length;
if (n < 2) σ = 1;
if (n < 1) µ = 0;
return function() {
var x, y, r;
do {
x = Math.random() * 2 - 1;
y = Math.random() * 2 - 1;
r = x * x + y * y;
} while (!r || r > 1);
return mean + deviation * x * Math.sqrt(-2 * Math.log(r) / r);
return µ + σ * x * Math.sqrt(-2 * Math.log(r) / r);
};
},
logNormal: function(µ, σ) {
var n = arguments.length;
if (n < 2) σ = 1;
if (n < 1) µ = 0;
var random = d3.random.normal();
return function() {
return Math.exp(µ + σ * random());
};
},
irwinHall: function(m) {
return function() {
for (var s = 0, j = 0; j < m; j++) s += Math.random();
return s / m;
};
}
};
35 changes: 35 additions & 0 deletions test/core/random-test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
require("../env");

var vows = require("vows"),
assert = require("assert");

var suite = vows.describe("d3.random");

suite.addBatch({
"normal": {
"topic": function() {
return d3.random.normal();
},
"returns a number": function(random) {
assert.typeOf(random(), "number");
}
},
"logNormal": {
"topic": function() {
return d3.random.logNormal();
},
"returns a number": function(random) {
assert.typeOf(random(), "number");
}
},
"irwinHall": {
"topic": function() {
return d3.random.irwinHall(10);
},
"returns a number": function(random) {
assert.typeOf(random(), "number");
}
}
});

suite.export(module);

0 comments on commit 952abef

Please sign in to comment.