独創的なアイデア
古い 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 に増やしたところ、41.2、41,8、42.4、42.9999999、43.5999999 など、42 から始まる奇妙な数字が再び表示されました。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 が 0.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 など。
失敗の繰り返し数
ステップは次の反復で失敗します。
- 反復で 0.6 のインクリメントが失敗する
- 52 (31.6000001)、
- 51 ~ 70 は問題ありません。
- 71–87 は 0.0000001 から少し (例: 42.9999999)、
- 88–103 はさらに 1 つ少ない (例: 53.1999998)、
- 104 以降はさらに削減されます (例: 62.7999997)。
- 反復で 0.4 のインクリメントが失敗する
- 18,
- 19 ~ 55 は問題ありません。
- 56 ~ 64 は -.9999999、
- 65でいいよ
- 66–84 は -.9999999、
- 85 ~ 100 で十分です。
- 101–116 は +.0000001 です。
- 117 は 0.000002 で続きます。
- 反復で 0.2 インクリメントが失敗する
- −.9999999で28、
- 47 ~ 107 は問題ありません。
- 108 ~ 140 は +0.0000001 で失敗し、
- 141 以降は +0.0000002 で失敗します。
- 反復で 0.1 インクリメントが失敗する
- −.9999999で28、
- 79 ~ 88 は問題ありません。
- 89–90 は +0.00000001 (原文のまま) で失敗します。
- 91 ~ 116 は問題ありません。
- 117–187 は +0.0000001 で失敗し、
- 188 以降は +0.0000002 で失敗します。
- 反復で 0.05 のインクリメントが失敗する
- −.00000001 で 28 ~ 33、
- 34 ~ 35 は問題ありません。
- 36–68 は -0.00000001 で失敗し、
- 69 ~ 78 は問題ありません。
- 79 ~ 92 は +0.00000001 で失敗し、
- 93 ~ 106 は +0.00000002 で失敗し、
- 107 以降は +0.00000003 で失敗します。
上記の注意事項
記録のために、レポートを簡単にするためにカウンターを追加しました。したがって、プログラムは次のようになります。
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
主な質問
問題は 10 進数を 2 進数に変換する方法にあると思われますが、0.5 ステップで完全に正常に機能するのは奇妙です。このエラーの原因は何ですか? また、どのように修正することができますか、またはどのように説明する必要がありますか? 私のコモドールは Basic v2 を実行しています。