From d939cb5deb038edd2cd02c3bff8b925d1857b2ec Mon Sep 17 00:00:00 2001 From: Tom St Denis Date: Mon, 21 Jun 2004 21:52:03 +0000 Subject: [PATCH] added libtomfloat-0.02 --- changes.txt | 20 ++++++++++++--- demos/ex1.c | 26 ++++++++++++++++++- float.pdf | Bin 172888 -> 172528 bytes float.tex | 2 +- makefile | 6 ++--- mpf_add.c | 14 ++++++++++ mpf_cos.c => mpf_atan.c | 67 +++++++++++++++++++++++++++++++++--------------- mpf_const_ln_d.c | 14 ++++++++++ mpf_cos.c | 11 +++++--- mpf_exp.c | 13 +++++++--- mpf_invsqrt.c | 21 +++++++++------ mpf_ln.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++ mpf_normalize.c | 17 ++++++++++-- mpf_sin.c | 12 ++++++--- mpf_sqrt.c | 17 +++++++----- mpf_sub.c | 16 +++++++++++- tomfloat.h | 2 +- 17 files changed, 268 insertions(+), 56 deletions(-) rewrite changes.txt (98%) copy mpf_cos.c => mpf_atan.c (56%) diff --git a/changes.txt b/changes.txt dissimilarity index 98% index f77fc00..91dd844 100644 --- a/changes.txt +++ b/changes.txt @@ -1,3 +1,17 @@ -May 5th, 2004 v0.01 -- wrote base of LTF - -Anytime v0.00 -- no LTF existed. +June 21st, 2004 +v0.02 -- Added missing objects to the makefile [oops] + -- fixed up mpf_add and mpf_sub to be more reliable about the precision + -- added required limited ln function mpf_ln_l (domain 0 < x <= 2) + It's still incomplete as it converges slowly (and therefore yields incorrect results) + -- Added mpf_ln and mpf_atan + -- Added short-circuits to sin, cos, invsqrt, atan, ln and sqrt [huge speedup] + -- Optimized mpf_sqrt and mpf_invsqrt by using quick estimates. Fixed + circular dependency as well (mpf_sqrt requires mpf_invsqrt but not vice versa) + ++ Note: No further releases are planned for a while. I encourage interested + parties to fork this code base and extend it! + +May 5th, 2004 +v0.01 -- wrote base of LTF + +Anytime +v0.00 -- no LTF existed. diff --git a/demos/ex1.c b/demos/ex1.c index c186421..1bdc535 100644 --- a/demos/ex1.c +++ b/demos/ex1.c @@ -10,7 +10,9 @@ void draw(mp_float *a) int main(void) { mp_float a, b, c, d, e; - mpf_init_multi(96, &a, &b, &c, &d, &e, NULL); + int err; + + mpf_init_multi(100, &a, &b, &c, &d, &e, NULL); mpf_const_d(&a, 1); draw(&a); mpf_const_d(&b, 2); draw(&b); @@ -21,6 +23,12 @@ int main(void) mpf_sub(&b, &c, &e); printf("2 - 3 =="); draw(&e); mpf_mul(&b, &c, &e); printf("2 * 3 == "); draw(&e); mpf_div(&b, &c, &e); printf("2 / 3 == "); draw(&e); + mpf_add_d(&b, 3, &e); printf("2 + 3 == "); draw(&e); + mpf_sub_d(&b, 3, &e); printf("2 - 3 =="); draw(&e); + mpf_mul_d(&b, 3, &e); printf("2 * 3 == "); draw(&e); + mpf_div_d (&b, 3, &e); printf("2 / 3 == "); draw(&e); + mpf_const_d(&e, 0); mpf_add_d(&e, 1, &e); printf("0 + 1 == "); draw(&e); + mpf_const_d(&e, 0); mpf_sub_d(&e, 1, &e); printf("0 - 1 == "); draw(&e); printf("\n"); mpf_invsqrt(&d, &e); printf("1/sqrt(4) == 1/2 == "); draw(&e); mpf_invsqrt(&c, &e); printf("1/sqrt(3) == "); draw(&e); @@ -29,6 +37,8 @@ int main(void) mpf_inv(&c, &e); printf("1/3 == "); draw(&e); mpf_inv(&d, &e); printf("1/4 == "); draw(&e); printf("\n"); + mpf_const_pi(&e); printf("Pi == "); draw(&e); + printf("\n"); mpf_const_e(&e); printf("e == "); draw(&e); mpf_exp(&c, &e); printf("e^3 == "); draw(&e); mpf_sqrt(&e, &e); printf("sqrt(e^3) == "); draw(&e); @@ -46,7 +56,21 @@ int main(void) mpf_tan(&b, &e); printf("tan(2) == "); draw(&e); mpf_tan(&c, &e); printf("tan(3) == "); draw(&e); mpf_tan(&d, &e); printf("tan(4) == "); draw(&e); + mpf_inv(&a, &e); mpf_atan(&e, &e); printf("atan(1/1) == "); draw(&e); + mpf_inv(&b, &e); mpf_atan(&e, &e); printf("atan(1/2) == "); draw(&e); + mpf_inv(&c, &e); mpf_atan(&e, &e); printf("atan(1/3) == "); draw(&e); + mpf_inv(&d, &e); mpf_atan(&e, &e); printf("atan(1/4) == "); draw(&e); printf("\n"); + #define lntest(x) if ((err = mpf_const_ln_d(&e, x)) != MP_OKAY) { printf("Failed ln(%3d), %d\n", x, err); } else { printf("ln(%3d) == ", x); draw(&e); }; + lntest(0); + lntest(1); + lntest(2); + lntest(4); + lntest(8); + lntest(17); + lntest(1000); + lntest(100000); + lntest(250000); return 0; } diff --git a/float.pdf b/float.pdf index aab20d684d868433dc1ab47094fc13295dc094d6..54aad4638d81cefc864be2f0569714212ead0db3 100644 GIT binary patch delta 53252 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%0D;^D+ic7L4PeZ@&EM3nEV#7 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

0FwtF}+PS-ReC-i? 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 + if ((err = mpf_copy(b, c)) != MP_OKAY) { + return err; + } + return mpf_normalize_to(c, diff); + } else if (mpf_iszero(b)) { + diff = c->radix; + if ((err = mpf_copy(a, c)) != MP_OKAY) { + return err; + } + return mpf_normalize_to(c, diff); + } + if (a->exp < b->exp) { /* tmp == a normalize to b's exp */ if ((err = mpf_init_copy(a, &tmp)) != MP_OKAY) { diff --git a/mpf_cos.c b/mpf_atan.c similarity index 56% copy from mpf_cos.c copy to mpf_atan.c index 421466c..870f193 100644 --- a/mpf_cos.c +++ b/mpf_atan.c @@ -12,48 +12,70 @@ */ #include -/* using cos x == \sum_{n=0}^{\infty} ((-1)^n/(2n)!) * x^2n */ -int mpf_cos(mp_float *a, mp_float *b) +/* y = y - (tan(y) - x)/(tan(y+0.1)-tan(x)) */ + +int mpf_atan(mp_float *a, mp_float *b) { - mp_float tmpovern, tmp, tmpx, res, sqr; - int oddeven, err, itts; + mp_float oldval, tmp, tmpx, res, sqr; + int oddeven, ires, err, itts; long n; + + /* ensure -1 <= a <= 1 */ + if ((err = mpf_cmp_d(a, -1, &ires)) != MP_OKAY) { + return err; + } + if (ires == MP_LT) { + return MP_VAL; + } + + if ((err = mpf_cmp_d(a, 1, &ires)) != MP_OKAY) { + return err; + } + if (ires == MP_GT) { + return MP_VAL; + } + + /* easy out if a == 0 */ + if (mpf_iszero(a) == MP_YES) { + return mpf_const_d(b, 1); + } + + /* now a != 0 */ + /* initialize temps */ - if ((err = mpf_init_multi(b->radix, &tmpx, &tmpovern, &tmp, &res, &sqr, NULL)) != MP_OKAY) { + if ((err = mpf_init_multi(b->radix, &oldval, &tmpx, &tmp, &res, &sqr, NULL)) != MP_OKAY) { return err; } /* initlialize temps */ - /* three start at one, sqr is the square of a */ - if ((err = mpf_const_d(&res, 1)) != MP_OKAY) { goto __ERR; } - if ((err = mpf_const_d(&tmpovern, 1)) != MP_OKAY) { goto __ERR; } - if ((err = mpf_const_d(&tmpx, 1)) != MP_OKAY) { goto __ERR; } + /* res = 0 */ + /* tmpx = 1/a */ + if ((err = mpf_inv(a, &tmpx)) != MP_OKAY) { goto __ERR; } + + /* sqr = a^2 */ if ((err = mpf_sqr(a, &sqr)) != MP_OKAY) { goto __ERR; } /* this is the denom counter. Goes up by two per pass */ - n = 0; + n = 1; /* we alternate between adding and subtracting */ - oddeven = 1; + oddeven = 0; /* get number of iterations */ itts = mpf_iterations(b); while (itts-- > 0) { - /* compute 1/(2n)! from 1/(2(n-1))! by multiplying by (1/n)(1/(n+1)) */ - if ((err = mpf_const_d(&tmp, ++n)) != MP_OKAY) { goto __ERR; } - if ((err = mpf_inv(&tmp, &tmp)) != MP_OKAY) { goto __ERR; } - if ((err = mpf_mul(&tmpovern, &tmp, &tmpovern)) != MP_OKAY) { goto __ERR; } - /* we do this twice */ - if ((err = mpf_const_d(&tmp, ++n)) != MP_OKAY) { goto __ERR; } + if ((err = mpf_copy(&res, &oldval)) != MP_OKAY) { goto __ERR; } + + /* compute 1/(2n-1) */ + if ((err = mpf_const_d(&tmp, (2*n++ - 1))) != MP_OKAY) { goto __ERR; } if ((err = mpf_inv(&tmp, &tmp)) != MP_OKAY) { goto __ERR; } - if ((err = mpf_mul(&tmpovern, &tmp, &tmpovern)) != MP_OKAY) { goto __ERR; } /* now multiply a into tmpx twice */ if ((err = mpf_mul(&tmpx, &sqr, &tmpx)) != MP_OKAY) { goto __ERR; } /* now multiply the two */ - if ((err = mpf_mul(&tmpx, &tmpovern, &tmp)) != MP_OKAY) { goto __ERR; } + if ((err = mpf_mul(&tmpx, &tmp, &tmp)) != MP_OKAY) { goto __ERR; } /* now depending on if this is even or odd we add/sub */ oddeven ^= 1; @@ -62,8 +84,13 @@ int mpf_cos(mp_float *a, mp_float *b) } else { if ((err = mpf_sub(&res, &tmp, &res)) != MP_OKAY) { goto __ERR; } } + + if (mpf_cmp(&oldval, &res) == MP_EQ) { + break; + } } mpf_exch(&res, b); -__ERR: mpf_clear_multi(&tmpx, &tmpovern, &tmp, &res, &sqr, NULL); +__ERR: mpf_clear_multi(&oldval, &tmpx, &tmp, &res, &sqr, NULL); return err; + } diff --git a/mpf_const_ln_d.c b/mpf_const_ln_d.c index fbe7927..6ddf4e8 100644 --- a/mpf_const_ln_d.c +++ b/mpf_const_ln_d.c @@ -15,6 +15,20 @@ int mpf_const_ln_d(mp_float *a, long b) { int err; + + /* test input */ + if (b < 0) { + return MP_VAL; + } + + if (b == 0) { + return mpf_const_d(a, 1); + } + + if (b == 1) { + return mpf_const_d(a, 0); + } + if ((err = mpf_const_d(a, b)) != MP_OKAY) { return err; } diff --git a/mpf_cos.c b/mpf_cos.c index 421466c..09675b1 100644 --- a/mpf_cos.c +++ b/mpf_cos.c @@ -15,11 +15,11 @@ /* using cos x == \sum_{n=0}^{\infty} ((-1)^n/(2n)!) * x^2n */ int mpf_cos(mp_float *a, mp_float *b) { - mp_float tmpovern, tmp, tmpx, res, sqr; + mp_float oldval, tmpovern, tmp, tmpx, res, sqr; int oddeven, err, itts; long n; /* initialize temps */ - if ((err = mpf_init_multi(b->radix, &tmpx, &tmpovern, &tmp, &res, &sqr, NULL)) != MP_OKAY) { + if ((err = mpf_init_multi(b->radix, &oldval, &tmpx, &tmpovern, &tmp, &res, &sqr, NULL)) != MP_OKAY) { return err; } @@ -40,6 +40,7 @@ int mpf_cos(mp_float *a, mp_float *b) itts = mpf_iterations(b); while (itts-- > 0) { + if ((err = mpf_copy(&res, &oldval)) != MP_OKAY) { goto __ERR; } /* compute 1/(2n)! from 1/(2(n-1))! by multiplying by (1/n)(1/(n+1)) */ if ((err = mpf_const_d(&tmp, ++n)) != MP_OKAY) { goto __ERR; } if ((err = mpf_inv(&tmp, &tmp)) != MP_OKAY) { goto __ERR; } @@ -62,8 +63,12 @@ int mpf_cos(mp_float *a, mp_float *b) } else { if ((err = mpf_sub(&res, &tmp, &res)) != MP_OKAY) { goto __ERR; } } + + if (mpf_cmp(&res, &oldval) == MP_EQ) { + break; + } } mpf_exch(&res, b); -__ERR: mpf_clear_multi(&tmpx, &tmpovern, &tmp, &res, &sqr, NULL); +__ERR: mpf_clear_multi(&oldval, &tmpx, &tmpovern, &tmp, &res, &sqr, NULL); return err; } diff --git a/mpf_exp.c b/mpf_exp.c index f779aeb..ed2bb54 100644 --- a/mpf_exp.c +++ b/mpf_exp.c @@ -16,12 +16,12 @@ /* compute b = e^a using e^x == \sum_{n=0}^{\infty} {1 \over n!}x^n */ int mpf_exp(mp_float *a, mp_float *b) { - mp_float tmpx, tmpovern, tmp, res; + mp_float oldval, tmpx, tmpovern, tmp, res; int err, itts; long n; /* initialize temps */ - if ((err = mpf_init_multi(b->radix, &tmpx, &tmpovern, &tmp, &res, NULL)) != MP_OKAY) { + if ((err = mpf_init_multi(b->radix, &oldval, &tmpx, &tmpovern, &tmp, &res, NULL)) != MP_OKAY) { return err; } @@ -36,8 +36,9 @@ int mpf_exp(mp_float *a, mp_float *b) itts = mpf_iterations(b); while (itts-- > 0) { + if ((err = mpf_copy(&res, &oldval)) != MP_OKAY) { goto __ERR; } + /* compute 1/n! as 1/(n-1)! * 1/n */ -// hack: this won't be portable for n>127 if ((err = mpf_const_d(&tmp, n++)) != MP_OKAY) { goto __ERR; } if ((err = mpf_inv(&tmp, &tmp)) != MP_OKAY) { goto __ERR; } if ((err = mpf_mul(&tmp, &tmpovern, &tmpovern)) != MP_OKAY) { goto __ERR; } @@ -48,10 +49,14 @@ int mpf_exp(mp_float *a, mp_float *b) /* multiply and sum them */ if ((err = mpf_mul(&tmpovern, &tmpx, &tmp)) != MP_OKAY) { goto __ERR; } if ((err = mpf_add(&tmp, &res, &res)) != MP_OKAY) { goto __ERR; } + + if (mpf_cmp(&oldval, &res) == MP_EQ) { + break; + } } mpf_exch(&res, b); -__ERR: mpf_clear_multi(&tmpx, &tmpovern, &tmp, &res, NULL); +__ERR: mpf_clear_multi(&oldval, &tmpx, &tmpovern, &tmp, &res, NULL); return err; } diff --git a/mpf_invsqrt.c b/mpf_invsqrt.c index 67963b2..9566d06 100644 --- a/mpf_invsqrt.c +++ b/mpf_invsqrt.c @@ -15,7 +15,7 @@ /* using newtons method we have 1/sqrt(x) = Y_{n+1} = y_n * ((3 - xy^2_n)/2) */ int mpf_invsqrt(mp_float *a, mp_float *b) { - mp_float tmp1, tmp2, const_3; + mp_float oldval, tmp1, tmp2, const_3; int err, itts; /* ensure a is not zero or negative */ @@ -27,7 +27,7 @@ int mpf_invsqrt(mp_float *a, mp_float *b) itts = mpf_iterations(b); /* init temps */ - if ((err = mpf_init_multi(b->radix, &tmp1, &tmp2, &const_3, NULL)) != MP_OKAY) { + if ((err = mpf_init_multi(b->radix, &oldval, &tmp1, &tmp2, &const_3, NULL)) != MP_OKAY) { return err; } @@ -36,13 +36,13 @@ int mpf_invsqrt(mp_float *a, mp_float *b) /* tmp1 == reasonable guess at sqrt */ if ((err = mpf_copy(a, &tmp1)) != MP_OKAY) { goto __ERR; } - - /* negate exponent and halve */ - tmp1.radix = b->radix; - if ((err = mp_sqrt(&(tmp1.mantissa), &(tmp1.mantissa))) != MP_OKAY) { goto __ERR; } - if ((err = mpf_normalize(&tmp1)) != MP_OKAY) { goto __ERR; } + mp_rshd(&(tmp1.mantissa), tmp1.mantissa.used>>1); + if ((err = mpf_normalize_to(&tmp1, b->radix)) != MP_OKAY) { goto __ERR; } while (itts-- > 0) { + /* grap copy of tmp1 for early out */ + if ((err = mpf_copy(&tmp1, &oldval)) != MP_OKAY) { goto __ERR; } + /* first tmp2 = y^2 == tmp1^2 */ if ((err = mpf_sqr(&tmp1, &tmp2)) != MP_OKAY) { goto __ERR; } /* multiply by x, tmp1 * a */ @@ -53,10 +53,15 @@ int mpf_invsqrt(mp_float *a, mp_float *b) if ((err = mpf_div_2(&tmp2, &tmp2)) != MP_OKAY) { goto __ERR; } /* multiply by y_n and feedback */ if ((err = mpf_mul(&tmp1, &tmp2, &tmp1)) != MP_OKAY) { goto __ERR; } + + /* early out if stable */ + if (mpf_cmp(&oldval, &tmp1) == MP_EQ) { + break; + } } mpf_exch(&tmp1, b); -__ERR: mpf_clear_multi(&tmp1, &tmp2, &const_3, NULL); +__ERR: mpf_clear_multi(&oldval, &tmp1, &tmp2, &const_3, NULL); return err; } diff --git a/mpf_ln.c b/mpf_ln.c index 66ee656..6a71bec 100644 --- a/mpf_ln.c +++ b/mpf_ln.c @@ -12,6 +12,72 @@ */ #include +/* + +Using the newton approximation y1 = y - (e^y - x)/e^y + +Which converges quickly and we can reuse e^y so we only calc it once per loop + +*/ int mpf_ln(mp_float *a, mp_float *b) { + mp_float oldval, tmpey, tmpy, val; + int itts, err; + long k; + + /* ensure positive */ + if (a->mantissa.sign == MP_NEG) { + return MP_VAL; + } + + /* easy out for 0 */ + if (mpf_iszero(a) == MP_YES) { + return mpf_const_d(b, 1); + } + + /* initialize temps */ + if ((err = mpf_init_multi(b->radix, &oldval, &tmpey, &tmpy, &val, NULL)) != MP_OKAY) { + return err; + } + + /* initial guess */ + if ((err = mpf_const_e(&val)) != MP_OKAY) { goto __ERR; } + if ((err = mpf_sqr(&val, &val)) != MP_OKAY) { goto __ERR; } + if ((err = mpf_inv(&val, &tmpey)) != MP_OKAY) { goto __ERR; } + if ((err = mpf_copy(a, &tmpy)) != MP_OKAY) { goto __ERR; } + if ((err = mpf_normalize_to(&tmpy, b->radix)) != MP_OKAY) { goto __ERR; } + + /* divide out e's */ + k = 0; + while (mpf_cmp(&tmpy, &val) == MP_GT) { + ++k; + if ((err = mpf_mul(&tmpy, &tmpey, &tmpy)) != MP_OKAY) { goto __ERR; } + } + if ((err = mpf_const_d(&tmpy, k*2)) != MP_OKAY) { goto __ERR; } + + /* number of iterations */ + itts = mpf_iterations(b); + + while (itts--) { + if ((err = mpf_copy(&tmpy, &oldval)) != MP_OKAY) { goto __ERR; } + + /* get e^y and save it */ + if ((err = mpf_exp(&tmpy, &tmpey)) != MP_OKAY) { goto __ERR; } + + /* now compute e^y - x */ + if ((err = mpf_sub(&tmpey, a, &val)) != MP_OKAY) { goto __ERR; } + + /* now compute (e^y - x) / e^y */ + if ((err = mpf_div(&val, &tmpey, &val)) != MP_OKAY) { goto __ERR; } + + /* y = y - (e^y - x)/e^y */ + if ((err = mpf_sub(&tmpy, &val, &tmpy)) != MP_OKAY) { goto __ERR; } + + if (mpf_cmp(&tmpy, &oldval) == MP_EQ) { + break; + } + } + mpf_exch(&tmpy, b); +__ERR: mpf_clear_multi(&oldval, &tmpey, &tmpy, &val, NULL); + return err; } diff --git a/mpf_normalize.c b/mpf_normalize.c index 01ef423..0b7dab2 100644 --- a/mpf_normalize.c +++ b/mpf_normalize.c @@ -14,7 +14,9 @@ int mpf_normalize(mp_float *a) { - long cb, diff; + long cb, diff; + int err; + mp_digit c; /* sanity */ if (a->radix < 2) { @@ -25,7 +27,18 @@ int mpf_normalize(mp_float *a) if (cb > a->radix) { diff = cb - a->radix; a->exp += diff; - return mp_div_2d(&(a->mantissa), diff, &(a->mantissa), NULL); + + /* round it, add 1 after shift if diff-1'th bit is 1 */ + c = a->mantissa.dp[diff/DIGIT_BIT] & (1U<<(diff%DIGIT_BIT)); + if ((err = mp_div_2d(&(a->mantissa), diff, &(a->mantissa), NULL)) != MP_OKAY) { + return err; + } + + if (c != 0) { + return mp_add_d(&(a->mantissa), 1, &(a->mantissa)); + } else { + return MP_OKAY; + } } else if (cb < a->radix) { if (mp_iszero(&(a->mantissa)) == MP_YES) { return mpf_const_0(a); diff --git a/mpf_sin.c b/mpf_sin.c index e5d672d..934bf72 100644 --- a/mpf_sin.c +++ b/mpf_sin.c @@ -15,12 +15,12 @@ /* using sin x == \sum_{n=0}^{\infty} ((-1)^n/(2n+1)!) * x^(2n+1) */ int mpf_sin(mp_float *a, mp_float *b) { - mp_float tmpovern, tmp, tmpx, res, sqr; + mp_float oldval, tmpovern, tmp, tmpx, res, sqr; int oddeven, err, itts; long n; /* initialize temps */ - if ((err = mpf_init_multi(b->radix, &tmpx, &tmpovern, &tmp, &res, &sqr, NULL)) != MP_OKAY) { + if ((err = mpf_init_multi(b->radix, &oldval, &tmpx, &tmpovern, &tmp, &res, &sqr, NULL)) != MP_OKAY) { return err; } @@ -49,6 +49,8 @@ int mpf_sin(mp_float *a, mp_float *b) itts = mpf_iterations(b); while (itts-- > 0) { + if ((err = mpf_copy(&res, &oldval)) != MP_OKAY) { goto __ERR; } + /* compute 1/(2n)! from 1/(2(n-1))! by multiplying by (1/n)(1/(n+1)) */ if ((err = mpf_const_d(&tmp, ++n)) != MP_OKAY) { goto __ERR; } if ((err = mpf_inv(&tmp, &tmp)) != MP_OKAY) { goto __ERR; } @@ -71,8 +73,12 @@ int mpf_sin(mp_float *a, mp_float *b) } else { if ((err = mpf_sub(&res, &tmp, &res)) != MP_OKAY) { goto __ERR; } } + + if (mpf_cmp(&res, &oldval) == MP_EQ) { + break; + } } mpf_exch(&res, b); -__ERR: mpf_clear_multi(&tmpx, &tmpovern, &tmp, &res, &sqr, NULL); +__ERR: mpf_clear_multi(&oldval, &tmpx, &tmpovern, &tmp, &res, &sqr, NULL); return err; } diff --git a/mpf_sqrt.c b/mpf_sqrt.c index ddfb4b8..d120cec 100644 --- a/mpf_sqrt.c +++ b/mpf_sqrt.c @@ -15,7 +15,7 @@ /* compute using sqrt(x) = y_{n+1} = 0.5 * (y_{n} + x/y_{n}) */ int mpf_sqrt(mp_float *a, mp_float *b) { - mp_float tmp, res; + mp_float oldval, tmp, res; int err, itts; /* make sure it's positive */ @@ -24,31 +24,36 @@ int mpf_sqrt(mp_float *a, mp_float *b) } /* let's roll */ - if ((err = mpf_init_multi(b->radix, &tmp, &res, NULL)) != MP_OKAY) { + if ((err = mpf_init_multi(b->radix, &oldval, &tmp, &res, NULL)) != MP_OKAY) { return err; } /* get copy of a and make reasonable guestimte towards the sqrt */ if ((err = mpf_copy(a, &res)) != MP_OKAY) { goto __ERR; } - if ((err = mp_sqrt(&res.mantissa, &res.mantissa)) != MP_OKAY) { goto __ERR; } + mp_rshd(&(res.mantissa), res.mantissa.used >> 1); res.exp = res.exp / 2; - res.radix = b->radix; - if ((err = mpf_normalize(&res)) != MP_OKAY) { goto __ERR; } + if ((err = mpf_normalize_to(&res, b->radix)) != MP_OKAY) { goto __ERR; } /* number of iterations */ itts = mpf_iterations(b); while (itts--) { + if ((err = mpf_copy(&res, &oldval)) != MP_OKAY) { goto __ERR; } + /* compute x/res */ if ((err = mpf_div(a, &res, &tmp)) != MP_OKAY) { goto __ERR; } /* res + x/res */ if ((err = mpf_add(&res, &tmp, &res)) != MP_OKAY) { goto __ERR; } /* 0.5 * (res + x/res) */ if ((err = mpf_div_2(&res, &res)) != MP_OKAY) { goto __ERR; } + + if (mpf_cmp(&res, &oldval) == MP_EQ) { + break; + } } mpf_exch(&res, b); -__ERR: mpf_clear_multi(&tmp, &res, NULL); +__ERR: mpf_clear_multi(&oldval, &tmp, &res, NULL); return err; } diff --git a/mpf_sub.c b/mpf_sub.c index cf819c1..649bbb2 100644 --- a/mpf_sub.c +++ b/mpf_sub.c @@ -18,6 +18,20 @@ int mpf_sub(mp_float *a, mp_float *b, mp_float *c) mp_float tmp; long diff; + if (mpf_iszero(a)) { + diff = c->radix; + if ((err = mpf_neg(b, c)) != MP_OKAY) { + return err; + } + return mpf_normalize_to(c, diff); + } else if (mpf_iszero(b)) { + diff = c->radix; + if ((err = mpf_copy(a, c)) != MP_OKAY) { + return err; + } + return mpf_normalize_to(c, diff); + } + if (a->exp < b->exp) { /* tmp == a normalize to b's exp */ if ((err = mpf_init_copy(a, &tmp)) != MP_OKAY) { @@ -40,7 +54,7 @@ int mpf_sub(mp_float *a, mp_float *b, mp_float *c) diff = a->exp - tmp.exp; tmp.exp = a->exp; if ((err = mp_div_2d(&(tmp.mantissa), diff, (&tmp.mantissa), NULL)) != MP_OKAY) { goto __TMP; } - if ((err = mp_sub(&(a->mantissa), &(tmp.mantissa), &(c->mantissa))) != MP_OKAY) { goto __TMP; } + if ((err = mp_sub(&(a->mantissa), &(tmp.mantissa), &(c->mantissa))) != MP_OKAY) { goto __TMP; } c->exp = a->exp; } diff --git a/tomfloat.h b/tomfloat.h index a7c3af2..85cd8f0 100644 --- a/tomfloat.h +++ b/tomfloat.h @@ -34,7 +34,7 @@ int mpf_init_copy(mp_float *a, mp_float *b); int mpf_copy(mp_float *src, mp_float *dest); void mpf_exch(mp_float *a, mp_float *b); -/* maintainers */ +/* maintainers/misc */ int mpf_normalize(mp_float *a); int mpf_normalize_to(mp_float *a, long radix); int mpf_iterations(mp_float *a); -- 2.11.4.GIT