summaryrefslogtreecommitdiffstats
path: root/lib.c
diff options
context:
space:
mode:
authorKaz Kylheku <kaz@kylheku.com>2011-12-10 20:41:06 -0800
committerKaz Kylheku <kaz@kylheku.com>2011-12-10 20:41:06 -0800
commit858859cf6fd6becef038cf4d9c1e650c3f2a9cc6 (patch)
tree081517aa9628b45d86e7fb1e139e3da996bdc89b /lib.c
parentc940739b8f863f3331f00b36c23ad1526ab1147e (diff)
downloadtxr-858859cf6fd6becef038cf4d9c1e650c3f2a9cc6.tar.gz
txr-858859cf6fd6becef038cf4d9c1e650c3f2a9cc6.tar.bz2
txr-858859cf6fd6becef038cf4d9c1e650c3f2a9cc6.zip
Bignum support in mult function.
* arith.c: Regenerated. * arith.txr (CNUM_BIT): New constant. (bignum, bignum_dbl_ipt): New static functions. (@{add-fname}): Use bignum function. (mul): New functions, rewrite of mul from lib.c. * lib.c (mul): Function removed. * mpi-patches/add-mp-set-intptr (mp_set_intptr): Revised patch. Local variable v should be int_ptr_t not unsigned long. Also, the mp_set interface doesn't set the sign; it's an unsigned interface. We must do that ourselves. * mpi-patches/fix-mult-bug: The main multiplication function is also broken in the same way, requiring the cast. * mpi-patches/mpi-set-double-intptr: Fixed use of wrong type for local variable v.
Diffstat (limited to 'lib.c')
-rw-r--r--lib.c31
1 files changed, 0 insertions, 31 deletions
diff --git a/lib.c b/lib.c
index 84d61371..1c510fd2 100644
--- a/lib.c
+++ b/lib.c
@@ -848,37 +848,6 @@ val minusv(val minuend, val nlist)
return neg(minuend);
}
-val mul(val anum, val bnum)
-{
- cnum a = c_num(anum);
- cnum b = c_num(bnum);
-
-#ifdef HAVE_LONGLONG_T
- if (sizeof (longlong_t) >= 2 * sizeof (cnum)) {
- longlong_t product = a * b;
- numeric_assert (product >= NUM_MIN && product <= NUM_MAX);
- return num(product);
- } else
-#endif
- {
- if (a > 0){
- if (b > 0) {
- numeric_assert (a <= (NUM_MAX / b));
- } else {
- numeric_assert (b >= (NUM_MIN / a));
- }
- } else {
- if (b > 0) {
- numeric_assert (a >= (NUM_MIN / b));
- } else {
- numeric_assert ((a == 0) || (b >= (NUM_MIN / a)));
- }
- }
-
- return num(a * b);
- }
-}
-
val mulv(val nlist)
{
if (!nlist)