Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit c51b7fd

Browse files
author
Stefan Krah
committed
1) Simplify comment -- one has to read the complete proof (available in ACL2)
in order to understand the algorithm anyway. 2) v->exp == -v->digits may be assumed. 3) Fix comment (v always shares data with a).
1 parent 5d0d2e2 commit c51b7fd

1 file changed

Lines changed: 6 additions & 7 deletions

File tree

Modules/_decimal/libmpdec/mpdecimal.c

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6691,17 +6691,16 @@ recpr_schedule_prec(mpd_ssize_t klist[MPD_MAX_PREC_LOG2],
66916691
return i-1;
66926692
}
66936693

6694-
/*
6695-
* Initial approximation for the reciprocal. Result has MPD_RDIGITS-2
6696-
* significant digits.
6697-
*/
6694+
/* Initial approximation for the reciprocal. */
66986695
static void
66996696
_mpd_qreciprocal_approx(mpd_t *z, const mpd_t *v, uint32_t *status)
67006697
{
67016698
mpd_uint_t p10data[2] = {0, mpd_pow10[MPD_RDIGITS-2]}; /* 10**(2*MPD_RDIGITS-2) */
67026699
mpd_uint_t dummy, word;
67036700
int n;
67046701

6702+
assert(v->exp == -v->digits);
6703+
67056704
_mpd_get_msdigits(&dummy, &word, v, MPD_RDIGITS);
67066705
n = mpd_word_digits(word);
67076706
word *= mpd_pow10[MPD_RDIGITS-n];
@@ -6710,7 +6709,7 @@ _mpd_qreciprocal_approx(mpd_t *z, const mpd_t *v, uint32_t *status)
67106709
(void)_mpd_shortdiv(z->data, p10data, 2, word);
67116710

67126711
mpd_clear_flags(z);
6713-
z->exp = -(v->exp + v->digits) - (MPD_RDIGITS-2);
6712+
z->exp = -(MPD_RDIGITS-2);
67146713
z->len = (z->data[1] == 0) ? 1 : 2;
67156714
mpd_setdigits(z);
67166715
}
@@ -6723,7 +6722,7 @@ _mpd_qreciprocal(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
67236722
mpd_context_t varcontext, maxcontext;
67246723
mpd_t *z = result; /* current approximation */
67256724
mpd_t *v; /* a, normalized to a number between 0.1 and 1 */
6726-
MPD_NEW_SHARED(vtmp, a); /* by default v will share data with a */
6725+
MPD_NEW_SHARED(vtmp, a); /* v shares data with a */
67276726
MPD_NEW_STATIC(s,0,0,0,0); /* temporary variable */
67286727
MPD_NEW_STATIC(t,0,0,0,0); /* temporary variable */
67296728
MPD_NEW_CONST(two,0,0,1,1,1,2); /* const 2 */
@@ -6732,9 +6731,9 @@ _mpd_qreciprocal(mpd_t *result, const mpd_t *a, const mpd_context_t *ctx,
67326731
uint8_t sign = mpd_sign(a);
67336732
int i;
67346733

6735-
v = &vtmp;
67366734
assert(result != a);
67376735

6736+
v = &vtmp;
67386737
mpd_clear_flags(v);
67396738
adj = v->digits + v->exp;
67406739
v->exp = -v->digits;

0 commit comments

Comments
 (0)