int bc_divmod (bc_num num1, bc_num num2, bc_num *quot, bc_num *rem, int scale TSRMLS_DC) { bc_num quotient = NULL; bc_num temp; int rscale; /* Check for correct numbers. */ if (bc_is_zero (num2 TSRMLS_CC)) return -1; /* Calculate final scale. */ rscale = MAX (num1->n_scale, num2->n_scale+scale); bc_init_num(&temp TSRMLS_CC); /* Calculate it. */ bc_divide (num1, num2, &temp, scale TSRMLS_CC); if (quot) quotient = bc_copy_num (temp); bc_multiply (temp, num2, &temp, rscale TSRMLS_CC); bc_sub (num1, temp, rem, rscale); bc_free_num (&temp); if (quot) { bc_free_num (quot); *quot = quotient; } return 0; /* Everything is OK. */ }
bool BigNumber::isZero () const { return bc_is_zero (num_) == true; } // end of BigNumber::isZero