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-BASIC 程序既可检查又可编辑。此外,当“ protected ”(从编辑菜单中隐藏程序)时,撤消操作与首先“保护”程序一样容易。

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

您可以像这样从 BASIC 中以可用的形式获取 R 的内容(您可以AsmComp(它以节省空间)

:AsmPrgmED5FE63FEF8C47EFBF4AC9

对应于这个片段:

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

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

只要用户不加修改运行程序,他们就不太可能猜到结果(大约 1/64 的机会),更不可能以定向方式影响它.

关于random - 是否可以在 TI-Basic 中制作真正的随机数生成器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58089356/

相关文章:

javascript - 构建一个简单的随机发生器,其中包括一个点、一个下划线、字母 A 和字母 B

python - 如何从python中的gzip压缩文件中获取随机行而不将其读入内存

assembly - 在 ti 84+ 上的 ti 基本程序中使用十六进制代码

python - 生成指定范围内的N个唯一随机整数

c++ - 如何正确开发概率系统?

Python-如何初始化随机函数

java - 如何运行我在 TI-84 Plus 计算器上编写的 Java 程序?

ti-basic - For 循环只进行一次迭代

ti-basic - ti basic 程序末尾没有 "Done"

calculator - Snake 风格游戏的简约方法