d3-random.js 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. // https://d3js.org/d3-random/ v1.1.2 Copyright 2018 Mike Bostock
  2. (function (global, factory) {
  3. typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
  4. typeof define === 'function' && define.amd ? define(['exports'], factory) :
  5. (factory((global.d3 = global.d3 || {})));
  6. }(this, (function (exports) { 'use strict';
  7. function defaultSource() {
  8. return Math.random();
  9. }
  10. var uniform = (function sourceRandomUniform(source) {
  11. function randomUniform(min, max) {
  12. min = min == null ? 0 : +min;
  13. max = max == null ? 1 : +max;
  14. if (arguments.length === 1) max = min, min = 0;
  15. else max -= min;
  16. return function() {
  17. return source() * max + min;
  18. };
  19. }
  20. randomUniform.source = sourceRandomUniform;
  21. return randomUniform;
  22. })(defaultSource);
  23. var normal = (function sourceRandomNormal(source) {
  24. function randomNormal(mu, sigma) {
  25. var x, r;
  26. mu = mu == null ? 0 : +mu;
  27. sigma = sigma == null ? 1 : +sigma;
  28. return function() {
  29. var y;
  30. // If available, use the second previously-generated uniform random.
  31. if (x != null) y = x, x = null;
  32. // Otherwise, generate a new x and y.
  33. else do {
  34. x = source() * 2 - 1;
  35. y = source() * 2 - 1;
  36. r = x * x + y * y;
  37. } while (!r || r > 1);
  38. return mu + sigma * y * Math.sqrt(-2 * Math.log(r) / r);
  39. };
  40. }
  41. randomNormal.source = sourceRandomNormal;
  42. return randomNormal;
  43. })(defaultSource);
  44. var logNormal = (function sourceRandomLogNormal(source) {
  45. function randomLogNormal() {
  46. var randomNormal = normal.source(source).apply(this, arguments);
  47. return function() {
  48. return Math.exp(randomNormal());
  49. };
  50. }
  51. randomLogNormal.source = sourceRandomLogNormal;
  52. return randomLogNormal;
  53. })(defaultSource);
  54. var irwinHall = (function sourceRandomIrwinHall(source) {
  55. function randomIrwinHall(n) {
  56. return function() {
  57. for (var sum = 0, i = 0; i < n; ++i) sum += source();
  58. return sum;
  59. };
  60. }
  61. randomIrwinHall.source = sourceRandomIrwinHall;
  62. return randomIrwinHall;
  63. })(defaultSource);
  64. var bates = (function sourceRandomBates(source) {
  65. function randomBates(n) {
  66. var randomIrwinHall = irwinHall.source(source)(n);
  67. return function() {
  68. return randomIrwinHall() / n;
  69. };
  70. }
  71. randomBates.source = sourceRandomBates;
  72. return randomBates;
  73. })(defaultSource);
  74. var exponential = (function sourceRandomExponential(source) {
  75. function randomExponential(lambda) {
  76. return function() {
  77. return -Math.log(1 - source()) / lambda;
  78. };
  79. }
  80. randomExponential.source = sourceRandomExponential;
  81. return randomExponential;
  82. })(defaultSource);
  83. exports.randomUniform = uniform;
  84. exports.randomNormal = normal;
  85. exports.randomLogNormal = logNormal;
  86. exports.randomBates = bates;
  87. exports.randomIrwinHall = irwinHall;
  88. exports.randomExponential = exponential;
  89. Object.defineProperty(exports, '__esModule', { value: true });
  90. })));