Можно ли сделать настоящий генератор случайных чисел в TI-Basic? - PullRequest
2 голосов
/ 25 сентября 2019

Есть ли способ на калькуляторах TI-84 создать "истинный" генератор случайных чисел?Я знаю, что встроенный в калькулятор генератор псевдослучайных чисел, но возможно ли вообще создать истинный ГСЧ, так что независимо от того, что пользователь хочет отобрать из встроенного ГСЧ с результатом, он всегда будет случайным и непредсказуемымдаже если они засеяли это с тем же самым семенем после получения набора чисел?Моей первоначальной мыслью было использовать RNG в цикле For, подобном этому, чтобы рандомизировать начальное число, но мне пришло в голову, что после заполнения начального RNG это все еще предсказуемо.Вот код, который я использовал:

For(I,1,int(rand*100),1)
int(rand*100)→rand
End

Но, как я уже сказал, это не сработало.

Ответы [ 2 ]

2 голосов
/ 26 сентября 2019

Вы неправильно понимаете, что такое «истинно» против «псевдо» генераторов случайных чисел. Любой детерминированный алгоритм может быть только PRNG.Если он не дает тех же результатов после повторного посева с тем же семенем, то это просто сломанный PRNG, потому что это и есть цель семени.

«истинный» RNG должен имеет некоторый физический аппаратный источник энтропии в качестве ввода.Это может быть что-то вроде диода с обратным смещением, источника излучения, шума микрофона и т. Д. Он также должен знать, сколько энтропии доступно в этом источнике, и быть осторожным, чтобы не создавать слишком много выходного сигнала из доступного входа.Большинство современных микропроцессоров имеют специальное оборудование и инструкции для этого.Zilog Z80 этого не делает.Для этого можно добавить оборудование.

1 голос
/ 26 сентября 2019

Если вы хотите знать это в целях безопасности (имеется в виду безопасный от пользователя), учтите, что программа TI-BASIC является и проверяемой, и редактируемой .Также, когда «защищено» (которое скрывает программу из меню РЕДАКТИРОВАНИЯ), которое так же просто отменить, как и «защитить» программу.

Младшие биты регистра Rчасто считается «достаточно случайным», конечно, они не являются действительно случайными, но при нормальных обстоятельствах их трудно предсказать, поскольку любая команда, которую выполняет ЦП, также увеличивает R на некоторое количество, а в макроскопическом масштабе трудно предсказать, что точно процессор будет выполняться.По сути, это как часы, но они меняются быстрее и труднее прогнозировать.

Вы можете получить содержимое R в форме, пригодной для использования из Бейсика, например: (вы можете AsmComp( сэкономить место)

:AsmPrgmED5FE63FEF8C47EFBF4AC9

Что соответствует этому фрагменту:

ld a, r
and $3F
bcall(_SETXXOP1)
bcall(_StoAns)
ret

Как видите, результат будет в Ans.

До тех пор, пока пользователь запускаетзапрограммируйте без модификаций , они вряд ли догадаются о результате (с вероятностью 1/64), и еще менее вероятно, будут влиять на него направленным образом.

...