この問題を回避するコードは記述可能なのだが、ライブラリがそれを用意するべきだ。充分な長さだと思う読者もいるかもしれないが、適用分野によっては短い場合もある。線形合同法により乱数を生成する。このアルゴリズムは原始的であり、高速だが、あまりよい性質の乱数を生成してくれない。場合によっては乱数系列を推測されてしまう危険性もある。オンラインポーカーのシャフルにこの乱数を使い、もしユーザに次のカードを予測されてしまっては、大問題だ。一様な乱数しか生成してくれない。正規分布の乱数を生成させたい場合は、そのような分布になるよう、プログラムを記述しなくていけない。乱数ライブラリが追加された。利用可能になっている。ライブラリ使わなきゃ損だぜ。出る回数をカウントし、表示しなさい。場合はどうなるか検証してみなさい。非決定的な乱数生成器として「std::random_device」が用意されている。「非決定的」とは、次の値が一意に決まらないという意味だ。内部的にはハードウェアの状態や時刻を用いて実現している。「rnd()」をコールすると、乱数を生成してくれる。クラスのオブジェクトなのに、それをあたかも関数のように「()」を付けてコール出来るの?と不思議に思った読者もいるかもしれない。その演算子をコールすることが出来るのだ。これを「ファンクタ」と呼ぶ。0;}上記は10個の乱数を生成し、表示するサンプルだ。演習問題:上記ソースコードをビルド・実行し、結果を確かめなさい。「std::random_device」は若干速度が遅いので、通常は決定的な乱数生成器を使用する。「決定的」とは、現在の値により次の値が一意に決まるという意味。擬似乱数とも呼ばれ、数学的に完全な乱数ではない。同様、乱数のシードを指定できるので、決定的でも実用上問題は無い決定的な乱数生成アルゴリズムとしては、線形合同法、メルセンヌ・ツイスタなどがあり、選択することができる。線形合同法は大昔から使われていたアルゴリズムで、単純・高速ではあるが、乱数の質はあまり良くない。あるなど、高品質の乱数を高速に生成するように設計されている。用いた乱数生成について説明する。