带有小数增量的 For 循环 !=.5 会产生奇怪的结果

For-loop with decimal increment !=.5 yields strange results

最初的想法

我刚刚找到我的旧 Commodore 64 电脑,将其连接起来,并决定再次尝试学习 Basic。我刚刚完成第 3 章,其中演示了一个简单的 FOR 循环:

10 FOR NB = 1 TO 10 STEP 1
20 PRINT NB,
30 NEXT NB

正如预期的那样,这会产生以下结果:

1       2       3       4
5       6       7       8
9       10

介绍浮点数

上面的结果在step设置为1.0时是一样的。然而,除 0.5 之外的其他数字会导致问题:

如果我将步长增量更改为 任何东西 但 .5(或 1),我会得到奇怪的浮点数,显然浮点数设置得越低出现得越早。对于第一次测试,我将 NB 更改为 1 TO 40.

测试结果

失败迭代次数

步骤在以下迭代中失败:

以上注释

郑重声明,我添加了一个计数器来简化报告;因此程序看起来像这样:

05 NC = 1
10 FOR NB = 1 TO 100 STEP 0.05: REM 0.6, 0.4, 0.2, 0.1, 0.05
20 PRINT NC;":";NB,
25 NC = NC + 1
30 NEXT NB

主要问题

我怀疑问题出在如何将十进制转换为二进制,但奇怪的是它在 0.5 步的情况下工作得很好。是什么导致了这个错误,如何补救它,或者应该如何解释它?我的 Commodore 运行 Basic v2.

我猜想因为 .5 的倍数可以很容易地转换为基数 2,所以它不会产生任何问题。我敢打赌,如果您尝试使用 .25 增量,它也会正常工作。