@@ -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. */
66986695static 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