# Random Number Library Performance

For some people, performance of random number generation is an
important consideration when choosing a random number generator or a
particular distribution function. This page provides numerous
performance tests with the wide variety of generators and
distributions available in the boost library.
The performance has been evaluated on a Pentium Pro 200 MHz with gcc
2.95.2, Linux 2.2.13, glibc 2.1.2. The speed is reported in million
random numbers per second (M rn/sec), generated in a tight loop.

## Basic Generators

generator |
M rn/sec |
time per random number [usec] |
relative speed compared to fastest [percent] |

rand48 |
5.38 |
0.183 |
61% |

rand48 run-time configurable |
1.48 |
0.677 |
17% |

lrand48 glibc 2.1.2 |
1.19 |
0.843 |
13% |

minstd_rand |
2.39 |
0.318 |
35% |

ecuyer1988 |
1.12 |
0.892 |
13% |

kreutzer1986 |
3.87 |
0.258 |
43% |

hellekalek1995 (inversive) |
0.20 |
5.12 |
2% |

mt11213b |
6.07 |
0.165 |
68% |

mt19937 |
6.06 |
0.165 |
68% |

mt19937 original |
5.33 |
0.188 |
60% |

lagged_fibonacci607 |
8.90 |
0.112 |
100% |

lagged_fibonacci4423 |
8.54 |
0.117 |
96% |

lagged_fibonacci19937 |
7.49 |
0.133 |
84% |

lagged_fibonacci23209 |
6.63 |
0.151 |
74% |

lagged_fibonacci44497 |
4.01 |
0.250 |
45% |

Note that the lagged Fibonacci generators produce floating-point
numbers, whereas all others produce integers.

## Distributions

[M rn/sec] |
minstd_rand |
kreutzer1986 |
mt19937 |
lagged_fibonacci607 |

uniform_smallint |
1.26 |
1.55 |
1.93 |
- |

uniform_01 |
1.79 |
1.88 |
3.03 |
7.74 |

uniform_real |
1.74 |
1.56 |
2.34 |
6.62 |

geometric |
0.593 |
0.629 |
0.753 |
0.916 |

triangle |
0.97 |
1.02 |
1.35 |
1.31 |

exponential |
0.849 |
0.828 |
0.887 |
1.53 |

normal (polar method) |
0.608 |
0.626 |
0.738 |
0.755 |

lognormal |
0.417 |
0.442 |
0.470 |
0.481 |

uniform_on_sphere |
0.154 |
0.155 |
0.174 |
0.218 |

Note that the lagged Fibonacci generator is at least 2.5 times faster
than the Mersenne twister when generating uniformly distributed
floating-point numbers. For more sophisticated distributions, the
speed improvement is less. Note however that these distributions have
not been optimized for speed, yet.

Jens Maurer, 2001-04-15