擬似乱数と 本当にランダム

以下は、Bo Allenの記事のここからの翻訳です



簡単な視覚的な例


ある日、私はRandom.orgに出会いました。 これは、クールな実際の乱数生成サービスです。 実際の乱数ジェネレーター(GNSS)と疑似乱数ジェネレーター(PRNG)の違いは、GNSSは予測不可能な物理的手段を使用して数値(大気ノイズなど)を生成し、PRNGは数学アルゴリズム(完全にコンピューター生成)を使用することです。 これについては、 Random.org(英語)およびWikipedia(英語)で詳しく知ることができます。



次に、Raster Generatorをいじり、比較用に擬似ランダムに生成されたラスターを作成することにしました。 そして、あなたはそれを信じないでしょう、私が試した最初のものはパターンを示しました!



Random.org


大気ノイズに基づくらんダンムビットママプ



Windows上のPHP rand()


WindowsのPHPのランド()数に基づくクランダムビットママ



ああ! それほど「ランダム」ではありませんか?



このような明らかなパターンを作成するPRNGはほとんどありません。 言語(PHP)、オペレーティングシステム(Windows)、および関数( rand()



)の組み合わせが非常に悪いだけです。 Linuxで同じコードを実行しましたが、そのような明らかなパターンはありませんでした。 また、このコードをWindowsで再度実行しましたが、 Mersenne Whirlwindを使用して乱数をより適切に生成するPHP関数mt_rand()



を使用しましたが、明らかなパターンはありませんでした。 これがなぜ起こるかについてもっと知りたい場合は、これを読んでください。



ラスターの生成に使用したコードは次のとおりです。



 // Requires the GD Library header("Content-type: image/png"); $im = imagecreatetruecolor(512, 512) or die("Cannot Initialize new GD image stream"); $white = imagecolorallocate($im, 255, 255, 255); for ($y=0; $y<512; $y++) { for ($x=0; $x<512; $x++) { if (rand(0,1) === 1) { imagesetpixel($im, $x, $y, $white); } } } imagepng($im); imagedestroy($im);
      
      





実際、セキュリティが何らかの形で侵害されていない限り(実際にはまったく別のトピックがあります)、そのようなことは実際の乱数ジェネレーターに煩わされるべきではありません。 擬似乱数ジェネレーターの品質は大きく異なります。 ひどいものもあれば、顕著なものもありますが、実際のものはありません。



All Articles