是否有可能在TI-Basic中制作一个真正的随机数生成器?

问题描述 投票:2回答:2

TI-84计算器上是否可以创建“真实”随机数生成器?我知道计算器中内置的一个是伪随机数生成器,但是完全有可能创建一个真实的RNG,以便无论用户想要播种内置RNG的结果是什么,结果始终是随机且不可预测的即使他们在获得一组数字后使用相同的种子重新播种?我最初的想法是像这样在For循环中使用RNG来随机化种子,但是在我看来,通过播种初始RNG还是可以预见的。这是我使用的代码:

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

但是正如我所说,这没有用。

random ti-basic
2个回答
1
投票

您误解了什么是“真实”与“伪”随机数生成器。 Any确定性算法只能是PRNG。如果在用相同的种子重新播种后没有产生相同的结果,则说明PRNG损坏了,因为这正是种子的目的。

A“ true” RNG must具有一些熵的物理硬件源作为输入。这可能是诸如反向偏置的二极管,辐射源,麦克风噪声等。它还必须知道该源中有多少熵,并且要小心不要从可用输入中产生太多输出。大多数现代微处理器为此具有特殊的硬件和说明。 Zilog Z80没有。为此,可能可以添加硬件。


0
投票

如果您出于安全目的(意味着对用户[[from]]而言是安全的)知道这一点,请考虑TI-BASIC程序是可检查的,也是可[编辑的。同样,在“受保护”(将程序从“编辑”菜单中隐藏)时,撤消操作与首先“保护”该程序一样容易。R寄存器的低位通常被认为是“足够随机的”,当然它们并不是真正随机的,但是在正常情况下,它们很难预测,因为CPU执行的任何指令也会使R增加一定量,并且在宏观尺度上,很难预测CPU将执行什么[确切地]。从本质上讲,它就像一个时钟,但变化更快,更难以预测。您可以像这样从BASIC获得可用形式的R的内容(可以AsmComp(以节省空间)

:AsmPrgmED5FE63FEF8C47EFBF4AC9 对应于此片段:

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

如您所见,结果将在Ans中。

只要用户运行程序

无修改,他们将不太可能猜测结果(大约有1/64的机会),甚至不可能直接影响结果。
© www.soinside.com 2019 - 2024. All rights reserved.