@@ -59,14 +59,14 @@ divmod_by_inv_mul(VALUE x, VALUE y, VALUE inv, VALUE *res_div, VALUE *res_mod) {
5959
6060static void
6161slice_copy (DECDIG * dest , Real * src , size_t rshift , size_t length ) {
62- ssize_t start = src -> exponent - rshift - length ;
62+ ssize_t start = src -> exponent - ( ssize_t ) rshift - ( ssize_t ) length ;
6363 if (start >= (ssize_t )src -> Prec ) return ;
6464 if (start < 0 ) {
6565 dest -= start ;
66- length += start ;
66+ length -= ( size_t )( - start ) ;
6767 start = 0 ;
6868 }
69- size_t max_length = src -> Prec - start ;
69+ size_t max_length = ( size_t )(( ssize_t ) src -> Prec - start ) ;
7070 memcpy (dest , src -> frac + start , Min (length , max_length ) * sizeof (DECDIG ));
7171}
7272
@@ -101,28 +101,28 @@ divmod_newton(VALUE x, VALUE y, VALUE *div_out, VALUE *mod_out) {
101101 BDVALUE div_result = NewZeroWrap (1 , BIGDECIMAL_COMPONENT_FIGURES * (num_blocks * block_figs + 1 ));
102102 BDVALUE bdx = GetBDValueMust (x );
103103
104- VALUE mod = BigDecimal_fix (BigDecimal_decimal_shift (x , SSIZET2NUM (- num_blocks * block_digits )));
105- for (ssize_t i = num_blocks - 1 ; i >= 0 ; i -- ) {
104+ VALUE mod = BigDecimal_fix (BigDecimal_decimal_shift (x , SSIZET2NUM (- ( ssize_t )( num_blocks * block_digits ) )));
105+ for (ssize_t i = ( ssize_t )( num_blocks - 1 ) ; i >= 0 ; i -- ) {
106106 memset (divident .real -> frac , 0 , (y_figs + block_figs ) * sizeof (DECDIG ));
107107
108108 BDVALUE bdmod = GetBDValueMust (mod );
109109 slice_copy (divident .real -> frac , bdmod .real , 0 , y_figs );
110- slice_copy (divident .real -> frac + y_figs , bdx .real , i * block_figs , block_figs );
110+ slice_copy (divident .real -> frac + y_figs , bdx .real , ( size_t ) i * block_figs , block_figs );
111111 RB_GC_GUARD (bdmod .bigdecimal );
112112
113113 VpSetSign (divident .real , 1 );
114- divident .real -> exponent = y_figs + block_figs ;
114+ divident .real -> exponent = ( ssize_t )( y_figs + block_figs ) ;
115115 divident .real -> Prec = y_figs + block_figs ;
116116 VpNmlz (divident .real );
117117
118118 VALUE div ;
119119 divmod_by_inv_mul (divident .bigdecimal , y , yinv , & div , & mod );
120120 BDVALUE bddiv = GetBDValueMust (div );
121- slice_copy (div_result .real -> frac + (num_blocks - i - 1 ) * block_figs , bddiv .real , 0 , block_figs + 1 );
121+ slice_copy (div_result .real -> frac + (num_blocks - ( size_t ) i - 1 ) * block_figs , bddiv .real , 0 , block_figs + 1 );
122122 RB_GC_GUARD (bddiv .bigdecimal );
123123 }
124124 VpSetSign (div_result .real , 1 );
125- div_result .real -> exponent = num_blocks * block_figs + 1 ;
125+ div_result .real -> exponent = ( ssize_t )( num_blocks * block_figs + 1 ) ;
126126 div_result .real -> Prec = num_blocks * block_figs + 1 ;
127127 VpNmlz (div_result .real );
128128 RB_GC_GUARD (bdx .bigdecimal );
@@ -148,8 +148,8 @@ VpDivdNewtonInner(VALUE args_ptr)
148148 VpAsgn (b2 .real , b , 1 );
149149 VpSetSign (a2 .real , 1 );
150150 VpSetSign (b2 .real , 1 );
151- a2 .real -> exponent = base_prec + div_prec ;
152- b2 .real -> exponent = base_prec ;
151+ a2 .real -> exponent = ( ssize_t )( base_prec + div_prec ) ;
152+ b2 .real -> exponent = ( ssize_t ) base_prec ;
153153
154154 if ((ssize_t )a2 .real -> Prec > a2 .real -> exponent ) {
155155 a2_frac = BigDecimal_frac (a2 .bigdecimal );
@@ -164,9 +164,9 @@ VpDivdNewtonInner(VALUE args_ptr)
164164 VpAsgn (r , r2 .real , VpGetSign (a ));
165165 AddExponent (c , a -> exponent );
166166 AddExponent (c , - b -> exponent );
167- AddExponent (c , - div_prec );
167+ AddExponent (c , - ( ssize_t ) div_prec );
168168 AddExponent (r , a -> exponent );
169- AddExponent (r , - base_prec - div_prec );
169+ AddExponent (r , - ( ssize_t )( base_prec + div_prec ) );
170170 RB_GC_GUARD (a2 .bigdecimal );
171171 RB_GC_GUARD (a2 .bigdecimal );
172172 RB_GC_GUARD (c2 .bigdecimal );
0 commit comments