mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
Rationalize floats in coerce [Bug #17572]
This commit is contained in:
parent
9de68a5221
commit
9efd590a13
1 changed files with 11 additions and 5 deletions
16
rational.c
16
rational.c
|
@ -51,6 +51,7 @@ static ID id_abs, id_integer_p,
|
||||||
#define f_to_s rb_obj_as_string
|
#define f_to_s rb_obj_as_string
|
||||||
|
|
||||||
static VALUE nurat_to_f(VALUE self);
|
static VALUE nurat_to_f(VALUE self);
|
||||||
|
static VALUE float_to_r(VALUE self);
|
||||||
|
|
||||||
inline static VALUE
|
inline static VALUE
|
||||||
f_add(VALUE x, VALUE y)
|
f_add(VALUE x, VALUE y)
|
||||||
|
@ -1172,11 +1173,17 @@ nurat_coerce(VALUE self, VALUE other)
|
||||||
return rb_assoc_new(other, self);
|
return rb_assoc_new(other, self);
|
||||||
}
|
}
|
||||||
else if (RB_TYPE_P(other, T_COMPLEX)) {
|
else if (RB_TYPE_P(other, T_COMPLEX)) {
|
||||||
if (k_exact_zero_p(RCOMPLEX(other)->imag))
|
if (!k_exact_zero_p(RCOMPLEX(other)->imag))
|
||||||
return rb_assoc_new(f_rational_new_bang1
|
|
||||||
(CLASS_OF(self), RCOMPLEX(other)->real), self);
|
|
||||||
else
|
|
||||||
return rb_assoc_new(other, rb_Complex(self, INT2FIX(0)));
|
return rb_assoc_new(other, rb_Complex(self, INT2FIX(0)));
|
||||||
|
other = RCOMPLEX(other)->real;
|
||||||
|
if (RB_FLOAT_TYPE_P(other)) {
|
||||||
|
other = float_to_r(other);
|
||||||
|
RBASIC_SET_CLASS(other, CLASS_OF(self));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
other = f_rational_new_bang1(CLASS_OF(self), other);
|
||||||
|
}
|
||||||
|
return rb_assoc_new(other, self);
|
||||||
}
|
}
|
||||||
|
|
||||||
rb_raise(rb_eTypeError, "%s can't be coerced into %s",
|
rb_raise(rb_eTypeError, "%s can't be coerced into %s",
|
||||||
|
@ -2060,7 +2067,6 @@ integer_denominator(VALUE self)
|
||||||
return INT2FIX(1);
|
return INT2FIX(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE float_to_r(VALUE self);
|
|
||||||
/*
|
/*
|
||||||
* call-seq:
|
* call-seq:
|
||||||
* flo.numerator -> integer
|
* flo.numerator -> integer
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue