93 lines
1.6 KiB
Plaintext
93 lines
1.6 KiB
Plaintext
print "2^64"
|
|
a$ = "1"
|
|
for i = 1 to 64
|
|
a$ = multByD$(a$, 2)
|
|
next
|
|
print a$
|
|
print "(check with native BASIC-256)"
|
|
print 2^64
|
|
print "(looks OK)"
|
|
|
|
#now let's do b$*a$ stuff
|
|
print
|
|
print "2^64*2^64"
|
|
print longMult$(a$, a$)
|
|
print "(check with native BASIC-256)"
|
|
print 2^64*2^64
|
|
print "(looks OK)"
|
|
end
|
|
|
|
function max(a, b)
|
|
if a > b then
|
|
return a
|
|
else
|
|
return b
|
|
end if
|
|
end function
|
|
|
|
function longMult$(a$, b$)
|
|
signA = 1
|
|
if left(a$,1) = "-" then
|
|
a$ = mid(a$,2,1)
|
|
signA = -1
|
|
end if
|
|
signB = 1
|
|
if left(b$,1) = "-" then
|
|
b$ = mid(b$,2,1)
|
|
signB = -1
|
|
end if
|
|
|
|
c$ = ""
|
|
t$ = ""
|
|
shift$ = ""
|
|
for i = length(a$) to 1 step -1
|
|
d = fromradix((mid(a$,i,1)),10)
|
|
t$ = multByD$(b$, d)
|
|
c$ = addLong$(c$, t$+shift$)
|
|
shift$ += "0"
|
|
next
|
|
if signA * signB < 0 then c$ = "-" + c$
|
|
return c$
|
|
end function
|
|
|
|
function multByD$(a$, d)
|
|
#multiply a$ by digit d
|
|
c$ = ""
|
|
carry = 0
|
|
for i = length(a$) to 1 step -1
|
|
a = fromradix((mid(a$,i,1)),10)
|
|
c = a * d + carry
|
|
carry = int(c/10)
|
|
c = c mod 10
|
|
c$ = string(c) + c$
|
|
next
|
|
if carry > 0 then c$ = string(carry) + c$
|
|
return c$
|
|
end function
|
|
|
|
function addLong$(a$, b$)
|
|
#add a$ + b$, for now only positive
|
|
l = max(length(a$), length(b$))
|
|
a$ = pad$(a$,l)
|
|
b$ = pad$(b$,l)
|
|
c$ = "" #result
|
|
carry = 0
|
|
for i = l to 1 step -1
|
|
a = fromradix((mid(a$,i,1)),10)
|
|
b = fromradix((mid(b$,i,1)),10)
|
|
c = a + b + carry
|
|
carry = int(c/10)
|
|
c = c mod 10
|
|
c$ = string(c) + c$
|
|
next
|
|
if carry > 0 then c$ = string(carry) + c$
|
|
return c$
|
|
end function
|
|
|
|
function pad$(a$,n) #pad$ from right with 0 to length n
|
|
pad$ = a$
|
|
while length(pad$) < n
|
|
pad$ = "0" + pad$
|
|
end while
|
|
end function
|