GWBASIC中RND函数的使用与随机数生成问题解析

本文讨论了在GWBASIC编程中使用RND函数生成随机数时遇到的问题,包括RANDOMIZE TIMER的使用、RND函数参数的影响以及如何修正代码以获得不同的随机数序列。

GWBASIC中RND函数的使用与随机数生成问题解析

我在整理旧资料时发现了一个古老的BASIC程序打印稿,决定尝试运行它。经过扫描、输入电脑并修复问题后,程序终于可以运行了,但遇到了RND函数的相关问题。

程序使用了RND函数。通过在线搜索,我了解到需要在程序开头使用RANDOMIZE TIMER命令,否则每次运行都会得到相同的随机数序列。我照做了,但代码中有一个部分仍然持续生成相同的数字。

我的代码如下:

1
2
3
300 TESTRND=RND(1):PRINT "TESTRND=";TESTRND
304 REM C=INT(2*RND(-1)+1)
305 C=INT(2*TESTRND+1)

第304行是原始代码,但我将其改为300和305行的组合,以便观察RND函数实际返回的值,而第300行总是打印出.6545178。

我必须承认,我不理解随机函数中括号内数字的作用。根据我的谷歌搜索,文档说明如下:

语法: RND[(x)]

  • 如果x大于0,或者省略x,则生成序列中的下一个随机数
  • 要获得0到n范围内的随机数,请使用以下公式: INT(RND*(n+1))
  • 通过对x使用负值,可以为随机数生成器设置种子

此外,文档还提供了一个示例程序,每次运行都会得到不同的值,但我注意到它没有对RND使用任何参数:

1
2
3
4
3 RANDOMIZE TIMER
5 FOR I=1 TO 5
10 PRINT INT(RND*101)
15 NEXT

在我的程序中,我尝试移除第300行中的(1),但仍然得到相同的结果。

解决方案发现:

我仍然不理解有无参数的区别,但将程序中所有的RND(-1)改为RND似乎解决了问题。现在我得到了不同的值。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计