@@ -330,7 +330,9 @@ static inline void bc_divide_by_one(
330
330
}
331
331
332
332
static inline void bc_divide_by_pow_10 (
333
- const char * numeratorptr , size_t numerator_readable_size , bc_num * quot , size_t quot_size , size_t quot_scale , bool use_quot )
333
+ const char * numeratorptr , size_t numerator_len , size_t numerator_readable_size , size_t numerator_leading_zeros ,
334
+ bc_num * quot , size_t quot_size , size_t quot_scale , bool use_quot ,
335
+ bc_num * rem , bool use_rem )
334
336
{
335
337
if (use_quot ) {
336
338
char * qptr = (* quot )-> n_value ;
@@ -353,6 +355,23 @@ static inline void bc_divide_by_pow_10(
353
355
(* quot )-> n_scale -= qend - qptr ;
354
356
}
355
357
}
358
+ if (use_rem ) {
359
+ size_t rem_leading_zeros = numerator_leading_zeros + quot_size - (numerator_len - (* rem )-> n_len );
360
+ if ((* rem )-> n_len + (* rem )-> n_scale <= rem_leading_zeros ) {
361
+ bc_free_num (rem );
362
+ * rem = bc_copy_num (BCG (_zero_ ));
363
+ return ;
364
+ }
365
+ /* The values after this have already been copied, so just need to set them to 0. */
366
+ for (size_t i = 0 ; i < rem_leading_zeros ; i ++ ) {
367
+ (* rem )-> n_value [i ] = 0 ;
368
+ }
369
+ _bc_rm_leading_zeros (* rem );
370
+ if (bc_is_zero (* rem )) {
371
+ (* rem )-> n_sign = PLUS ;
372
+ (* rem )-> n_scale = 0 ;
373
+ }
374
+ }
356
375
}
357
376
358
377
bool bc_divide_ex (bc_num numerator , bc_num divisor , bc_num * quot , bc_num * rem , size_t scale , bool use_quot , bool use_rem )
@@ -481,7 +500,11 @@ bool bc_divide_ex(bc_num numerator, bc_num divisor, bc_num *quot, bc_num *rem, s
481
500
482
501
/* If divisor is 1 here, return the result of adjusting the decimal point position of numerator. */
483
502
if (divisor_size == 1 && * divisorptr == 1 ) {
484
- bc_divide_by_pow_10 (numeratorptr , numerator_readable_size , quot , quot_size , quot_scale );
503
+ bc_divide_by_pow_10 (
504
+ numeratorptr , numerator -> n_len , numerator_readable_size , numerator_leading_zeros ,
505
+ quot , quot_size , quot_scale , use_quot ,
506
+ rem , use_rem
507
+ );
485
508
return true;
486
509
}
487
510
0 commit comments