Distributors
A function that determines the distribution of generated values. Values generated by a randomizer are considered uniformly distributed, distributor functions can be used to change this. If many results are collected the results form a limited distribution between 0 and 1. So an exponential distributor will values resemble a limited exponential distribution.
Common examples of distributor functions are:
- Uniform distributor: All values have the same likelihood.
- Normal distributor: Values are more likely to be close to a specific value.
- Exponential distributor: Values are more likely to be close to 0.
Distributor functions can be used by some faker functions such as faker.number.int() and faker.number.float().
Please note that the result from the distributor function is processed further by the function accepting it. E.g. a distributor result of 0.5 within a call to faker.number.int({ min: 10, max: 20 }) will result in 15.
type Distributor = (randomizer: Randomizer) => number;import { Distributor, Randomizer, faker } from '@faker-js/faker';
const alwaysMin: Distributor = () => 0;
const uniform: Distributor = (randomizer: Randomizer) => randomizer.next();
faker.number.int({ min: 2, max: 10, distributor: alwaysMin }); // 2
faker.number.int({ min: 0, max: 10, distributor: uniform }); // 5exponentialDistributor
Creates a new function that generates power-law/exponentially distributed values.
This function uses (base ** next() - 1) / (base - 1) to spread the values.
The following table shows the rough distribution of values generated using exponentialDistributor({ base: x }):
| Result | Base 0.1 | Base 0.5 | Base 1 | Base 2 | Base 10 |
|---|---|---|---|---|---|
| 0.0 - 0.1 | 4.1% | 7.4% | 10.0% | 13.8% | 27.8% |
| 0.1 - 0.2 | 4.5% | 7.8% | 10.0% | 12.5% | 16.9% |
| 0.2 - 0.3 | 5.0% | 8.2% | 10.0% | 11.5% | 12.1% |
| 0.3 - 0.4 | 5.7% | 8.7% | 10.0% | 10.7% | 9.4% |
| 0.4 - 0.5 | 6.6% | 9.3% | 10.0% | 10.0% | 7.8% |
| 0.5 - 0.6 | 7.8% | 9.9% | 10.0% | 9.3% | 6.6% |
| 0.6 - 0.7 | 9.4% | 10.7% | 10.0% | 8.8% | 5.7% |
| 0.7 - 0.8 | 12.1% | 11.5% | 10.0% | 8.2% | 5.0% |
| 0.8 - 0.9 | 16.9% | 12.6% | 10.0% | 7.8% | 4.5% |
| 0.9 - 1.0 | 27.9% | 13.8% | 10.0% | 7.5% | 4.1% |
The following table shows the rough distribution of values generated using exponentialDistributor({ bias: x }):
| Result | Bias -9 | Bias -1 | Bias 0 | Bias 1 | Bias 9 |
|---|---|---|---|---|---|
| 0.0 - 0.1 | 27.9% | 13.7% | 10.0% | 7.4% | 4.1% |
| 0.1 - 0.2 | 16.9% | 12.5% | 10.0% | 7.8% | 4.5% |
| 0.2 - 0.3 | 12.1% | 11.6% | 10.0% | 8.3% | 5.1% |
| 0.3 - 0.4 | 9.5% | 10.7% | 10.0% | 8.8% | 5.7% |
| 0.4 - 0.5 | 7.8% | 10.0% | 10.0% | 9.3% | 6.6% |
| 0.5 - 0.6 | 6.6% | 9.3% | 10.0% | 9.9% | 7.7% |
| 0.6 - 0.7 | 5.7% | 8.8% | 10.0% | 10.7% | 9.5% |
| 0.7 - 0.8 | 5.0% | 8.2% | 10.0% | 11.5% | 12.1% |
| 0.8 - 0.9 | 4.5% | 7.8% | 10.0% | 12.6% | 16.8% |
| 0.9 - 1.0 | 4.1% | 7.4% | 10.0% | 13.7% | 27.9% |
Available since v9.6.0
Parameters
| Name | Type | Default | Description |
|---|---|---|---|
| options? | { ... } | { ... } | {} | The options for generating the distributor. |
| options.base? | number | 2 | The base of the exponential distribution. Should be greater than 0.
The higher/more above |
| options.bias? | number | -1 | An alternative way to specify the |
Returns: Distributor
function exponentialDistributor(
options?:
| {
base?: number;
}
| {
bias?: number;
}
): Distributor;
Examples
import { exponentialDistributor, generateMersenne53Randomizer } from '@faker-js/faker';
const randomizer = generateMersenne53Randomizer();
const distributor = exponentialDistributor();
distributor(randomizer) // 0.04643770898904198
distributor(randomizer) // 0.13436127925491848
distributor(randomizer) // 0.4202905589842396
distributor(randomizer) // 0.5164955927828387
distributor(randomizer) // 0.3476359433171099
Source
uniformDistributor
Creates a new function that generates uniformly distributed values. The likelihood of each value is the same.
The following table shows the rough distribution of values generated using uniformDistributor():
| Result | Uniform |
|---|---|
| 0.0 - 0.1 | 10.0% |
| 0.1 - 0.2 | 10.0% |
| 0.2 - 0.3 | 10.0% |
| 0.3 - 0.4 | 10.0% |
| 0.4 - 0.5 | 10.0% |
| 0.5 - 0.6 | 10.0% |
| 0.6 - 0.7 | 10.0% |
| 0.7 - 0.8 | 10.0% |
| 0.8 - 0.9 | 10.0% |
| 0.9 - 1.0 | 10.0% |
Available since v9.6.0
Returns: Distributor
function uniformDistributor(): Distributor;
Examples
import { generateMersenne53Randomizer, uniformDistributor } from '@faker-js/faker';
const randomizer = generateMersenne53Randomizer();
const distributor = uniformDistributor();
distributor(randomizer) // 0.9100215692561207
distributor(randomizer) // 0.791632947887336
distributor(randomizer) // 0.14770035310214324
distributor(randomizer) // 0.28282249581185814
distributor(randomizer) // 0.017890944117802343