Skip to content

Commit

Permalink
Use new conversion functions in BigDecimal_DoDivmod
Browse files Browse the repository at this point in the history
  • Loading branch information
mrkn committed Jan 15, 2021
1 parent a109d09 commit 68c2020
Showing 1 changed file with 12 additions and 5 deletions.
17 changes: 12 additions & 5 deletions ext/bigdecimal/bigdecimal.c
Expand Up @@ -1425,18 +1425,25 @@ BigDecimal_DoDivmod(VALUE self, VALUE r, Real **div, Real **mod)
Real *a, *b;
size_t mx;

GUARD_OBJ(a, GetVpValue(self, 1));
TypedData_Get_Struct(self, Real, &BigDecimal_data_type, a);
SAVE(a);

VALUE rr = Qnil;
if (RB_TYPE_P(r, T_FLOAT)) {
b = GetVpValueWithPrec(r, 0, 1);
rr = rb_float_convert_to_BigDecimal(r, 0, true);
}
else if (RB_TYPE_P(r, T_RATIONAL)) {
b = GetVpValueWithPrec(r, a->Prec*VpBaseFig(), 1);
rr = rb_rational_convert_to_BigDecimal(r, a->Prec*BASE_FIG, true);
}
else {
b = GetVpValue(r, 0);
rr = rb_convert_to_BigDecimal(r, 0, false);
}

if (!b) return Qfalse;
if (!is_kind_of_BigDecimal(rr)) {
return Qfalse;
}

TypedData_Get_Struct(rr, Real, &BigDecimal_data_type, b);
SAVE(b);

if (VpIsNaN(a) || VpIsNaN(b)) goto NaN;
Expand Down

0 comments on commit 68c2020

Please sign in to comment.