大整數計算能力加入Lina64系統
Ching-Tang Tseng
Hamilton, New Zealand
16 November 2018
國際論壇網站曾於今年九月三日公開貼出Lina64作者推介我如何使用這個系統的推薦文章,那時,我尚未將大整數的計算功能加入系統,現在,加入。
加入後的特色,在讓大整數計算可以程式化,程式執行完畢後,系統不會耗用記憶體而回到原點。
我這一次的努力,則顯現在獨特的大數字顯示方式上:起頭處有總位數列印。大整數旁有邊標
(Side marks) , 每 50 個數字一標。底部有字元尺 (Bottom ruler),每10個數字一標,尺長共50個字。這樣的顯示法,算是我個人創作的專利,引用者必須得到我的同意,否則我會公開貼文,痛斥瓢竊者,而且日後我就不再公佈任何創意。
下列兩個簡單易懂的大數計算程式,供大家參考。一是計算
Fibonacci 級數的結果,另一則為計算大階乘 (Factorial) 的結果。
1. Fibonacci numbers
程式
程式受輸出位數最多為10000位數的限制,下列程式使用上限,N大約為四萬七千多。
2 INTEGERS I N
0 BIGVARIABLE F(N)
10000 ALLOT
0 BIGVARIABLE F(N-1) 10000 ALLOT
0 BIGVARIABLE F(N-2) 10000 ALLOT
: EnterN BASIC
10 PRINT " Enter n =: "
20 INPUTI N
30 END ;
: MAIN BASIC
10 RUN EnterN
20 LET B{ F(N-1) = I>BIG ( 1 ) }B
30 LET B{ F(N-2) = I>BIG ( 1 ) }B
40 FOR I = 1 TO N
50 LET B{ F(N) = F(N-1) + F(N-2) }B
60 LET B{ F(N-2) = F(N-1) }B
70 LET B{ F(N-1) = F(N) }B
80 NEXT I
90 PRINT " Fibonacci ( " ; N + 2 ; " ) =
"
100 RUN F(N) BIG.
110 END ;
執行結果:
2. 階乘 (Factorial) 計算
程式:大階乘
INTEGER I
INTEGER N
0 BIGVARIABLE X
0 BIGVARIABLE Y 40000 ALLOT
: BIG!. ( n -- )
[[ N ]] !
BASIC
10 LET B{ X = BIG0 }B
15 LET B{ Y = BIG1 }B
20 FOR I = 1 TO N
30 LET B{ X = X + BIG1 }B
40 LET B{ Y = Y * X }B
60 RUN Y BIG.
70 END ;
: BIG! ( n -- addr )
BASIC
10 LET B{ X = BIG0 }B
15 LET B{ Y = BIG1 }B
20 FOR I = 1 TO N
30 LET B{ X = X + BIG1 }B
40 LET B{ Y = Y * X }B
50 NEXT I
70 END
B{{ Y }}B ;
沒有留言:
張貼留言