Как стать автором
Обновить

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

Время на прочтение2 мин
Количество просмотров34K
Автор оригинала: 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);

По сути, такие вещи не должны вас волновать с генератором настоящих случайных чисел, если только как-то не нарушена безопасность (действительно целая отдельная тема). Генераторы псевдослучайных чисел очень разнятся по качеству. Некоторые ужасны, некоторые выдающиеся, но никакие не являются настоящими.
Теги:
Хабы:
Всего голосов 74: ↑62 и ↓12+50
Комментарии96

Публикации

Истории

Ближайшие события

27 августа – 7 октября
Премия digital-кейсов «Проксима»
МоскваОнлайн
28 сентября – 5 октября
О! Хакатон
Онлайн
3 – 18 октября
Kokoc Hackathon 2024
Онлайн
10 – 11 октября
HR IT & Team Lead конференция «Битва за IT-таланты»
МоскваОнлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн