Can*_*Man 1 floating-point for-loop basic c64
我刚刚找到了我的旧Commodore 64计算机,将它连接起来,并决定再次尝试学习Basic.我刚刚完成了第3章,其中演示了一个简单的FOR循环:
10 FOR NB = 1 TO 10 STEP 1
20 PRINT NB,
30 NEXT NB
Run Code Online (Sandbox Code Playgroud)
正如预期的那样,这会产生以下结果:
1 2 3 4
5 6 7 8
9 10
Run Code Online (Sandbox Code Playgroud)
当步骤设置为1.0时,上述结果相同.除0.5之外的其他数字会导致问题:
如果我将步长增加到除了 .5(或1)以外的任何值,我会得到奇怪的浮点,显然出现在浮点数设置越低的前面.对于第一次测试,我将NB更改为1 TO 40
.
FOR NB = 1 TO 40 STEP .6
:正常结果为1-31,然后为31.6000001.为了看看我是否会得到更奇怪的结果,我将NB增加到100,并且从42s再次看到奇怪的数字:41.2,41,8,42.4,42.9999999,43.5999999等.FOR NB = 1 TO 40 STEP .4
:正常结果为1-7.4,然后是7,8000001,然后是正常结果8.2-22.6,然后是22.9999999,23.3999999等.FOR NB = 1 TO 40 STEP .2
:正常结果为1-6.2,然后是6.3999999,以.2为增量,直至8.5999999,然后从8.7999998更改为9.9999998,然后是10.2的正常结果.FOR NB = 1 TO 40 STEP .1
:正常结果为1-3.6,然后是3.6999999等.FOR NB = 1 TO 40 STEP .05
:正常结果为1-2.3,然后是2.34999999(注意额外数字)直到2.59999999,然后是2.65-2.7,然后是2.74999999等.以下迭代中的步骤失败:
为了记录,我添加了一个便于报告的计数器; 该程序因此看起来像这样:
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
Run Code Online (Sandbox Code Playgroud)
我怀疑问题是如何将十进制转换为二进制,但发现奇怪的是它与.5步完全正常.导致此错误的原因是什么?如何修复它,或者应该如何解释它?我的Commodore运行Basic v2.
我猜想,因为.5的倍数可以很容易地转换为基数2,这就是为什么它不会产生任何问题.我敢打赌,如果你尝试使用.25增量,它也可以正常工作.