爲了我自己的娛樂,我決定嘗試編寫一個批處理文件來計算Hailstone Sequences。但是,我遇到了一些大數字的小問題。批處理文件不能處理大量數據嗎?
首先,代碼:
: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
。
據Google,未來數應該已經2176782334
。
這是命令處理器處理大量數據的能力的自然限制嗎?類似的操作在Excel中運行良好 - 在那裏,我能夠確定數字應該在473次迭代中解決爲1。
我正在運行Windows 7 SP1 x64。
爲什麼我限制在64位系統上的32位? CMD.exe仍然是一個32位應用程序? – Iszi 2012-07-18 16:35:33
我不認爲它支持長數據類型,可能是因爲它不是爲這樣的程序構建的。它與操作系統沒有任何關係。是否有一個原因,你不想用另一種語言做到這一點? – 2012-07-18 16:37:04
很多隻是因爲我不知道任何真正的語言。學習其中一個或兩個仍在我的待辦事項清單上。 – Iszi 2012-07-18 16:44:30