Pull to refresh

Псевдослучайно vs. По-настоящему Случайно

Reading time2 min
Views34K
Original author: Bo Allen
Ниже перевод статьи Бо Аллена отсюда.

Простой наглядный пример

Однажды я наткнулся на Random.org, классный сервис генератора настоящих случайных чисел. Разница между генератором настоящих случайных чисел (ГНСЧ) и генератором псевдослучайных чисел (ГПСЧ) в том, что ГНСЧ использует непредсказуемые физические средства для генерации чисел (например шумы атмосферы), а ГПСЧ использует математические алгоритмы (полностью производимые компьютером). Об этом можно более подробно узнать на Random.org (англ.) и в Википедии (англ.).

Я тогда возился с Растровым Генератором и решил сам создать псевдослучайно сгенерированный растр для сравнения. И вы не поверите, первая же вещь, которую я попробовал, показала узор!

Random.org

Random bitmap based on atmospheric noise

PHP rand() в Windows

Random bitmap based on PHP's rand() function in Windows

Ой! Не такой уж «случайный», а?

Немногие ГПСЧ создадут такой очевидный узор, как этот. Просто тут подобралась действительно плохая комбинация языка (PHP), операционной системы (Windows) и функции (rand()). Я запустил тот же код в Линуксе и там не было такого очевидного узора. Я также запустил этот код снова в Windows, но теперь применил 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);

По сути, такие вещи не должны вас волновать с генератором настоящих случайных чисел, если только как-то не нарушена безопасность (действительно целая отдельная тема). Генераторы псевдослучайных чисел очень разнятся по качеству. Некоторые ужасны, некоторые выдающиеся, но никакие не являются настоящими.
Tags:
Hubs:
+50
Comments96

Articles

Change theme settings