Я пытаюсь предсказать вывод программы, которая использует функцию rand() msvcrt для создания лица трех игральных костей. Я полагаю, что код выглядит примерно так: dice[0] = rand() % 6 + 1; dice[1] = rand() % 6 + 1; dice[2] = rand() % 6 + 1;
, и мне было интересно, могу ли я использовать программу предсказания для линейных конгруэнтных генераторов, чтобы предсказывать следующие числа в последовательности.
Использует ли msvcrt.dll линейный конгруэнтный генератор для своей функции rand()?
comment
Вы можете сбросить соответствующий бит DLL и посмотреть код генератора самостоятельно.
- person Anon.   schedule 19.12.2009
comment
Почему? У вас есть доступ к исходному коду — это две строки.
- person Alex Budovski   schedule 19.12.2009
comment
Я должен копаться в этом материале чаще. Я даже не понял, что это было там.
- person Anon.   schedule 19.12.2009
Ответы (2)
Смотрите сами: C:\Program Files\Microsoft Visual Studio 8\VC\crt\src\rand.c
(Или используйте %VCINSTALLDIR%\crt\src\rand.c
, если вы работаете из командной строки VC.)
(При условии, что у вас есть по крайней мере стандартная версия VC. Это две строки. Я бы опубликовал это, но не уверен, позволяет ли это лицензия.)
person
Alex Budovski
schedule
19.12.2009
%VCINSTALLDIR%\crt\src\rand.c является более общим.
- person codekaizen; 19.12.2009
Спасибо, это как раз то, что мне было нужно. Я прошел через все это только для того, чтобы обнаружить, что программа, которую я пытаюсь предсказать, работает не так, как я предсказывал (она вызывает rand() в различных других частях программы, искажая мое начальное число).
- person Benjamin Manns; 22.12.2009
Если память не изменяет, да, это линейный конгруэнтный генератор, но то, что он возвращает, является остатком от более крупного вывода, что увеличивает сложность предсказания следующего числа (до такой степени, что вам, вероятно, потребуется гораздо большая выборка, чем три вывода, чтобы сделать так надежно).
person
Jerry Coffin
schedule
19.12.2009