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 = |
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: | ||
} |
} |
||
⚫ | |||
# work around a bug in gawk 3.1.6 where length(array) doesn't work |
|||
⚫ | |||
# if the array is a function parameter |
|||
for (i in a) len++ |
|||
⚫ | |||
⚫ | |||
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) |