mplata 8 21 мая Опубликовано 21 мая · Жалоба 2 minutes ago, esaulenka said: Вы почитайте, что-ли, что это за алгоритм такой. Никто не обещал, что генератор случайных чисел не выдаст подряд десяток одинаковых значений. Да, вероятность ОЧЕНЬ маленькая, но ненулевая. Вероятность "два одинаковых значения в произвольных местах" - очевидно выше, и тоже далеко ненулевая. Я не математик ни разу, но это легко доказывается на практике. Reveal hidden contents #include <random> #include <iostream> #include <vector> #include <algorithm> #include <chrono> int main() { auto start_time = std::chrono::system_clock::now(); //using rand_gen_t = std::mt19937_64; using rand_gen_t = std::mt19937; std::random_device rd; rand_gen_t rndgen{ rd() }; std::vector<rand_gen_t::result_type> rndlist; for (size_t i = 0; i < 1000'000'000; ++i) rndlist.push_back(rndgen()); std::sort(rndlist.begin(), rndlist.end()); size_t count = 0; for (size_t i = 0; i < rndlist.size() - 1; ++i) if (rndlist[i] == rndlist[i + 1]) { //std::cout << "found the same value " << rndlist[i] << " at " << i << "\n"; ++count; } std::cout << "found " << count << " pairs\n"; std::cout << "Time spent " << std::chrono::duration_cast<std::chrono::seconds>(std::chrono::system_clock::now() - start_time).count() << " seconds \n"; } Для Мерсенна с 32-битным выходом среди миллиарда (!) значений совпадений... немало: found 107892738 pairs Time spent 160 seconds Для 64-битного варианта совпадений у меня не было, но это не значит, что их не будет в принципе. А какой период у Вас выбран? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
esaulenka 7 21 мая Опубликовано 21 мая · Жалоба 11 minutes ago, mplata said: А какой период у Вас выбран? Ну так код же есть, там всё стандартно-библиотечное. Я не настолько самоуверен, чтобы свои крипто-алгоритмы изобретать 🙂 https://en.cppreference.com/w/cpp/numeric/random/mersenne_twister_engine https://ru.wikipedia.org/wiki/Вихрь_Мерсенна#Параметры_32-битного_генератора_MT И да, период обозначает количество итераций, когда алгоритм начнёт в точности повторять выданную последовательность. И он ДОСТАТОЧНО большой, чтобы никогда не увидеть подобного в реальной жизни, это авторы алгоритма гарантируют. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться