我刚刚找到了旧的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
。
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,然后以.2表示的6.3999999递增到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
我怀疑问题在于如何将小数转换为二进制,但是奇怪的是它仅用.5步就可以正常工作。是什么导致此错误,以及如何纠正该错误,或者应该如何解决?我的准将运行Basic v2。
答案 0 :(得分:5)
我想这是因为.5的倍数可以轻松转换为以2为底的原因,因此它不会产生任何问题。我敢打赌,如果您尝试使用.25增量,它也可以正常工作。