@@ -107,27 +107,8 @@ static inline void bc_mul_finish_from_vector(BC_VECTOR *prod_vector, size_t prod
107107 * prod = bc_new_num_nonzeroed (prodlen , 0 );
108108 char * pptr = (* prod )-> n_value ;
109109 char * pend = pptr + prodlen - 1 ;
110- size_t i = 0 ;
111- while (i < prod_arr_size - 1 ) {
112- #if BC_VECTOR_SIZE == 4
113- bc_write_bcd_representation (prod_vector [i ], pend - 3 );
114- pend -= 4 ;
115- #else
116- bc_write_bcd_representation (prod_vector [i ] / 10000 , pend - 7 );
117- bc_write_bcd_representation (prod_vector [i ] % 10000 , pend - 3 );
118- pend -= 8 ;
119- #endif
120- i ++ ;
121- }
122110
123- /*
124- * The last digit may carry over.
125- * Also need to fill it to the end with zeros, so loop until the end of the string.
126- */
127- while (pend >= pptr ) {
128- * pend -- = prod_vector [i ] % BASE ;
129- prod_vector [i ] /= BASE ;
130- }
111+ bc_convert_vector_to_char (prod_vector , pptr , pend , prod_arr_size );
131112}
132113
133114/*
@@ -145,9 +126,9 @@ static void bc_standard_mul(bc_num n1, size_t n1len, bc_num n2, size_t n2len, bc
145126 const char * n2end = n2 -> n_value + n2len - 1 ;
146127 size_t prodlen = n1len + n2len ;
147128
148- size_t n1_arr_size = (n1len + BC_VECTOR_SIZE - 1 ) / BC_VECTOR_SIZE ;
149- size_t n2_arr_size = (n2len + BC_VECTOR_SIZE - 1 ) / BC_VECTOR_SIZE ;
150- size_t prod_arr_size = (prodlen + BC_VECTOR_SIZE - 1 ) / BC_VECTOR_SIZE ;
129+ size_t n1_arr_size = BC_ARR_SIZE_FROM_LEN (n1len ) ;
130+ size_t n2_arr_size = BC_ARR_SIZE_FROM_LEN (n2len ) ;
131+ size_t prod_arr_size = BC_ARR_SIZE_FROM_LEN (prodlen ) ;
151132
152133 BC_VECTOR stack_vectors [BC_STACK_VECTOR_SIZE ];
153134 size_t allocation_arr_size = n1_arr_size + n2_arr_size + prod_arr_size ;
@@ -206,8 +187,8 @@ static void bc_standard_square(bc_num n1, size_t n1len, bc_num *prod)
206187 const char * n1end = n1 -> n_value + n1len - 1 ;
207188 size_t prodlen = n1len + n1len ;
208189
209- size_t n1_arr_size = (n1len + BC_VECTOR_SIZE - 1 ) / BC_VECTOR_SIZE ;
210- size_t prod_arr_size = (prodlen + BC_VECTOR_SIZE - 1 ) / BC_VECTOR_SIZE ;
190+ size_t n1_arr_size = BC_ARR_SIZE_FROM_LEN (n1len ) ;
191+ size_t prod_arr_size = BC_ARR_SIZE_FROM_LEN (prodlen ) ;
211192
212193 BC_VECTOR * buf = safe_emalloc (n1_arr_size + n1_arr_size + prod_arr_size , sizeof (BC_VECTOR ), 0 );
213194
0 commit comments