Использует ли msvcrt.dll линейный конгруэнтный генератор для своей функции rand()?

Я пытаюсь предсказать вывод программы, которая использует функцию rand() msvcrt для создания лица трех игральных костей. Я полагаю, что код выглядит примерно так: dice[0] = rand() % 6 + 1; dice[1] = rand() % 6 + 1; dice[2] = rand() % 6 + 1;, и мне было интересно, могу ли я использовать программу предсказания для линейных конгруэнтных генераторов, чтобы предсказывать следующие числа в последовательности.


person Benjamin Manns    schedule 19.12.2009    source источник
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
comment
%VCINSTALLDIR%\crt\src\rand.c является более общим. - person codekaizen; 19.12.2009
comment
Спасибо, это как раз то, что мне было нужно. Я прошел через все это только для того, чтобы обнаружить, что программа, которую я пытаюсь предсказать, работает не так, как я предсказывал (она вызывает rand() в различных других частях программы, искажая мое начальное число). - person Benjamin Manns; 22.12.2009

Если память не изменяет, да, это линейный конгруэнтный генератор, но то, что он возвращает, является остатком от более крупного вывода, что увеличивает сложность предсказания следующего числа (до такой степени, что вам, вероятно, потребуется гораздо большая выборка, чем три вывода, чтобы сделать так надежно).

person Jerry Coffin    schedule 19.12.2009