Skip to content

Commit 59accf3

Browse files
committed
Using rem in bc_do_div
1 parent b6d7903 commit 59accf3

File tree

1 file changed

+17
-2
lines changed
  • ext/bcmath/libbcmath/src

1 file changed

+17
-2
lines changed

ext/bcmath/libbcmath/src/div.c

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,8 @@ static void bc_do_div(
256256
const char *numerator, size_t numerator_size, size_t numerator_readable_size,
257257
const char *divisor, size_t divisor_size,
258258
bc_num *quot, size_t quot_size,
259-
bool use_quot
259+
bc_num *rem, size_t rem_over_size, size_t rem_write_size,
260+
bool use_quot, bool use_rem
260261
) {
261262
size_t numerator_arr_size = (numerator_size + BC_VECTOR_SIZE - 1) / BC_VECTOR_SIZE;
262263
size_t divisor_arr_size = (divisor_size + BC_VECTOR_SIZE - 1) / BC_VECTOR_SIZE;
@@ -290,6 +291,18 @@ static void bc_do_div(
290291
char *qend = qptr + (*quot)->n_len + (*quot)->n_scale - 1;
291292
bc_convert_vector_to_char(qptr, qend, quot_vectors, quot_real_arr_size);
292293
}
294+
if (use_rem) {
295+
size_t rem_arr_size = (rem_write_size + rem_over_size + BC_VECTOR_SIZE - 1) / BC_VECTOR_SIZE;
296+
BC_VECTOR *rem_vectors = numerator_vectors;
297+
298+
char *rptr = (*rem)->n_value;
299+
char *rend = rptr + rem_write_size - 1;
300+
if (rem_over_size > 0) {
301+
bc_convert_vector_to_char_with_skip(rptr, rend, rem_vectors, rem_arr_size, rem_over_size);
302+
} else {
303+
bc_convert_vector_to_char(rptr, rend, rem_vectors, rem_arr_size);
304+
}
305+
}
293306

294307
efree(numerator_vectors);
295308
}
@@ -512,7 +525,9 @@ bool bc_divide_ex(bc_num numerator, bc_num divisor, bc_num *quot, bc_num *rem, s
512525
bc_do_div(
513526
numeratorptr, numerator_size, numerator_readable_size,
514527
divisorptr, divisor_size,
515-
quot, quot_size
528+
quot, quot_size,
529+
rem, rem_over_size, rem_write_size,
530+
use_quot, use_rem
516531
);
517532

518533
if (use_quot) {

0 commit comments

Comments
 (0)