2018年11月15日 星期四

大整數計算能力加入Lina64系統


大整數計算能力加入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
50 NEXT I
60 RUN Y BIG.
70 END ;


: BIG! ( n -- addr )
[[ 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
50 NEXT I
70 END
B{{ Y }}B ;


執行結果:
















沒有留言: