Jump to content

Long multiplication: Difference between revisions

no edit summary
m (→‎{{header|Sidef}}: code simplifications)
No edit summary
Line 2,609:
println("18446744073709551616" * "18446744073709551616")
}</lang>
 
 
=={{header|Lambdatalk}}==
 
Tested in http://epsilonwiki.free.fr/lambdaway/?view=bignums
 
<lang scheme>
 
1) defining user functions:
 
{require lib_lists} ;; contains list.reverse
 
{def pk {lambda {:k :p}
{if {equal? :p nil} then nil
else {cons {* :k {car :p}} {pk :k {cdr :p} }}}}}
 
{def p+ {lambda {:p1 :p2}
{if {and {equal? :p1 nil} {equal? :p2 nil}} then nil
else {if {equal? :p1 nil} then :p2
else {if {equal? :p2 nil} then :p1
else {cons {+ {car :p1} {car :p2}}
{p+ {cdr :p1} {cdr :p2} }}}}}}}
 
{def p* {lambda {:p1 :p2}
{if {or {equal? :p1 nil} {equal? :p2 nil}} then nil
else {if {not {cons? :p1}} then {pk :p1 :p2}
else {p+ {pk {car :p1} :p2}
{cons 0 {p* {cdr :p1} :p2}}}}}}}
 
{def simplify
{def simplify.rec {lambda {:p :q :r}
{if {and {equal? :p nil} {= :r 0}} then :q
else {if {equal? :p nil} then {cons :r :q}
else {simplify.rec {cdr :p}
{cons {+ {% {car :p} 10} :r} :q}
{floor {/ {car :p} 10}} }}}}}
{lambda {:p} {simplify.rec {list.reverse :p} nil 0} }}
 
2) computing 2^128:
 
The input is 2^64 = 18,446,744,073,709,551,616
 
2.1) creating a list:
{def 2p64 {list 1 8 4 4 6 7 4 4 0 7 3 7 0 9 5 5 1 6 1 6}}
 
2.2) computing the product
{def 2p128 {simplify {simplify {simplify {p* {2p64} {2p64}}}}}}
 
2.3) displaying the result:
{list.disp {2p128}}
-> (3 4 0 2 8 2 3 6 6 9 2 0 9 3 8 4 6 3 4 6 3 3 7 4 6 0 7 4 3 1 7 6 8 2 1 1 4 5 6)
 
</lang>
 
=={{header|Liberty BASIC}}==
Cookies help us deliver our services. By using our services, you agree to our use of cookies.