29 lines
824 B
Plaintext
29 lines
824 B
Plaintext
twoto64$ = "18446744073709551616"
|
|
PRINT "2^64 * 2^64 = " ; FNlongmult(twoto64$, twoto64$)
|
|
END
|
|
|
|
DEF FNlongmult(num1$, num2$)
|
|
LOCAL C%, I%, J%, S%, num1&(), num2&(), num3&()
|
|
S% = LEN(num1$)+LEN(num2$)
|
|
DIM num1&(S%), num2&(S%), num3&(S%)
|
|
IF LEN(num1$) > LEN(num2$) SWAP num1$,num2$
|
|
$$^num1&(1) = num1$
|
|
num1&() AND= 15
|
|
FOR I% = LEN(num1$) TO 1 STEP -1
|
|
$$^num2&(I%) = num2$
|
|
num2&() AND= 15
|
|
num3&() += num2&() * num1&(I%)
|
|
IF I% MOD 3 = 1 THEN
|
|
C% = 0
|
|
FOR J% = S%-1 TO I%-1 STEP -1
|
|
C% += num3&(J%)
|
|
num3&(J%) = C% MOD 10
|
|
C% DIV= 10
|
|
NEXT
|
|
ENDIF
|
|
NEXT I%
|
|
num3&() += &30
|
|
num3&(S%) = 0
|
|
IF num3&(0) = &30 THEN = $$^num3&(1)
|
|
= $$^num3&(0)
|