私自身の娯楽のために、 Hailstoneシーケンスを計算するためのバッチファイルを書いてみることにしました。しかし、私はいくつかの大きな数字で小さな問題に遭遇しました。
まず、コード:
:START
@ECHO OFF
SETLOCAL
SET /P InputVar="Input Number: "
ECHO.
ECHO %InputVar%
SET ItCount=0
:COLLATZ
SET /A ItCount=%ItCount%+1
SET /A Odd=%InputVar%%%2
IF %Odd% EQU 1 (
SET /A OutputNum=%InputVar%*3+1
) ELSE (
SET /A OutputNum=%InputVar%/2
)
ECHO %OutputNum%
IF %OutputNum% LSS 1 (
GOTO ERROR
) ELSE (
GOTO RECYCLE
)
:ERROR
ECHO.
ECHO ERROR!
GOTO END
:RECYCLE
IF %OutputNum% EQU 1 (
GOTO FINISH
) ELSE (
SET InputVar=%OutputNum%
GOTO COLLATZ
)
:FINISH
ECHO.
ECHO Completed in %ItCount% iterations.
:END
ENDLOCAL
PAUSE
これは、私がテストしたいくつかの数値で機能します。しかし、私が新しい数をテストすることに取り掛かったとき、完了するのに数百回の反復が必要であり、システムは負の出力を返し始めました。興味深いことに、負の出力は最終的にゼロに解決されました。ただし、このスクリプトの動作は、まったく予期されておらず、意図されていません。
エラー処理を追加した後、これは私が得た出力です8388607
。
グーグルによると、次の数字はであるはず2176782334
です。
これは、コマンドプロセッサが多数を処理する能力の自然な制限ですか?同様の操作はExcelでも正常に実行されます。そこで、473回の反復で1に解決されるべきであると判断できました。
Windows 7SP1x64を実行しています。