diff options
author | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2000-06-29 13:18:58 +0000 |
---|---|---|
committer | zimmerma <zimmerma@280ebfd0-de03-0410-8827-d642c229c3f4> | 2000-06-29 13:18:58 +0000 |
commit | 8afee997974d9028428db165c59480f0871686bc (patch) | |
tree | 7af6d7f75d6c54d4422a534555af936b22c93dc0 | |
parent | f84538de8cdb6b63060bd73926b8c42768fc5ac6 (diff) | |
download | mpfr-8afee997974d9028428db165c59480f0871686bc.tar.gz |
be careful not to call mpn_sub_n/mpn_sub_1 with a size 0
git-svn-id: svn://scm.gforge.inria.fr/svn/mpfr/trunk@657 280ebfd0-de03-0410-8827-d642c229c3f4
-rw-r--r-- | sub.c | 5 |
1 files changed, 3 insertions, 2 deletions
@@ -301,8 +301,9 @@ mpfr_sub1(a, b, c, rnd_mode, diff_exp) imax = (int)an-(int)bn+cancel1; for (i=0;i<imax;i++) ap[i] = ~ap[i]; cc = (i) ? mpn_add_1(ap, ap, i, 1) : 1; - mpn_sub_lshift_n(ap+i, bp, bn-cancel1, cancel2, an); - mpn_sub_1(ap+i, ap+i, an-i, ONE-cc); + if (cancel1<bn) mpn_sub_lshift_n(ap+i, bp, bn-cancel1, cancel2, an); + /* warning: mpn_sub_1 doesn't accept a zero length */ + if (i<an) mpn_sub_1(ap+i, ap+i, an-i, ONE-cc); } else /* PREC(b) > PREC(a): we have to truncate b */ mpn_sub_lshift_n(ap, bp+(bn-an-cancel1), an, cancel2, an); |