Long multiplication: Difference between revisions

Content deleted Content added
→‎{{header|Python}}: (Note that Python comes with arbitrary length integers).
m →‎{{Header|AWK}}: add local vars to function param list
Line 207: Line 207:
{{trans|Tcl}}
{{trans|Tcl}}
<lang awk>BEGIN {
<lang awk>BEGIN {
DEBUG = 0
DEBUG = 1
n = 2^64
n = 2^64
nn = sprintf("%.0f", n)
nn = sprintf("%.0f", n)
Line 215: Line 215:
}
}


function multiply(x, y) {
function multiply(x, y, len_x,len_y,ax,ay,j,m,c,i,k,d,v,res,mul,result) {
len_x = split_reverse(x, ax)
len_x = split_reverse(x, ax)
len_y = split_reverse(y, ay)
len_y = split_reverse(y, ay)
Line 245: Line 245:
}
}


function split_reverse(x, a) {
function split_reverse(x, a, a_x) {
split(x, a_x, //)
split(x, a_x, //)
return reverse_array(a_x, a)
return reverse_array(a_x, a)
}
}


function reverse_array(a,b) {
function reverse_array(a,b, len,i) {
len = length_array(a)
len = length_array(a)
for (i in a) {
for (i in a) {
Line 258: Line 258:
}
}


function length_array(a, len,i) {
# work around a bug in gawk 3.1.6 where length(array) doesn't work
len = 0
# if the array is a function parameter
for (i in a) len++
function length_array(a) {
len = asort(a, x)
return len
return len
}
}


function append_array(a, value) {
function append_array(a, value, len) {
len = length_array(a)
len = length_array(a)
a[++len] = value
a[++len] = value
}
}


function reverse_join(a) {
function reverse_join(a, len,str,i) {
len = length_array(a)
len = length_array(a)
str = ""
str = ""
Line 279: Line 278:
}
}


function print_array(a) {
function print_array(a, len,i) {
if (DEBUG) {
if (DEBUG) {
len = length_array(a)
len = length_array(a)