Random 有可能在TI Basic中生成一个真正的随机数生成器吗?

Random 有可能在TI Basic中生成一个真正的随机数生成器吗?,random,ti-basic,Random,Ti Basic,TI-84计算器上有没有办法创建“真”随机数生成器?我知道内置在计算器中的是一个伪随机数生成器,但是否有可能创建一个真正的RNG,这样无论用户希望为内置RNG设定种子,结果都将是随机的,并且不可预测,即使他们在获得一组数字后使用相同的种子对其重新设定种子?我最初的想法是在类似这样的For循环中使用RNG来随机化种子,但我突然想到,通过播种初始RNG,它仍然是可预测的。以下是我使用的代码: For(I,1,int(rand*100),1) int(rand*100)→rand End 但正如我所

TI-84计算器上有没有办法创建“真”随机数生成器?我知道内置在计算器中的是一个伪随机数生成器,但是否有可能创建一个真正的RNG,这样无论用户希望为内置RNG设定种子,结果都将是随机的,并且不可预测,即使他们在获得一组数字后使用相同的种子对其重新设定种子?我最初的想法是在类似这样的
For
循环中使用RNG来随机化种子,但我突然想到,通过播种初始RNG,它仍然是可预测的。以下是我使用的代码:

For(I,1,int(rand*100),1)
int(rand*100)→rand
End
但正如我所说的那样,这不起作用。

你误解了“真”与“伪”随机数生成器是什么。任何确定性算法只能是PRNG。如果用同一个种子重新播种后不能产生相同的结果,那么它只是一个破碎的PRNG,因为这正是种子的用途


“真正的”RNG必须有一些物理硬件熵源作为输入。这可能类似于反向偏置二极管、辐射源、麦克风噪声等。它还必须知道该源中有多少熵可用,并且小心不要从可用输入中产生太多输出。大多数现代微处理器都有专门的硬件和指令。Zilog Z80没有。为了这个目的,可以添加硬件。

如果您想知道这是出于安全目的(对用户来说是安全的),请考虑Ti-Basic程序既是可检查的,也是可编辑的。同样,当“受保护”(从编辑菜单中隐藏程序)时,这与首先“保护”程序一样容易撤消

R寄存器的低位通常被认为是“足够随机的”,当然它们不是真正随机的,但在正常情况下,它们很难预测,因为CPU执行的任何指令也会使R增加一定量,并且在宏观尺度上,很难预测CPU将执行什么。本质上,它就像一个时钟,但它变化得更快,更难预测

您可以像这样从BASIC获得R的内容(您可以
AsmComp(
it以节省空间)

与此代码段相对应的:

ld a, r
and $3F
bcall(_SETXXOP1)
bcall(_StoAns)
ret
如您所见,结果将显示在
Ans


只要用户在没有修改的情况下运行程序,他们就不太可能猜到结果(大约有1/64的几率),甚至不太可能直接影响它。

那么,有没有办法阻止重新播种呢?就我而言,这在功能上是等效的。我甚至不确定我是否理解这个问题。你不控制设备上运行的软件吗?还有谁会在使用过程中重新播种RNG?如果你的意思是有wa我想为不同的运行创建不同的种子。我不知道TI-BASIC,但可能有一种方法可以访问时钟,或者从中进行种子创建?或者可能有一种方法可以存储最后返回的值并在下次运行时检索它?这是一件我很好奇的事情,如果它可行,但是时钟的想法非常好,所以谢谢!我的第一个que关于这一点,因为您提到了汇编,该代码在84+CE之间工作吗?我知道在84和CE之间更改了很多代码,一个糟糕的汇编代码会导致RAM清除。@Himitsu_no_Yami片段汇编代码将是相同的,但它会转换为
AsmPrgmED5FE63FEF7747EFAA4AC9
ld a, r
and $3F
bcall(_SETXXOP1)
bcall(_StoAns)
ret