1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

numeric.c: avoid division by zero

same as r65642.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65725 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
shyouhei 2018-11-14 09:53:11 +00:00
parent ed42b0102d
commit a6e887153e

View file

@ -929,8 +929,11 @@ nurat_div(VALUE self, VALUE other)
other, ONE, '/'); other, ONE, '/');
} }
} }
else if (RB_FLOAT_TYPE_P(other)) else if (RB_FLOAT_TYPE_P(other)) {
return DBL2NUM(nurat_to_double(self) / RFLOAT_VALUE(other)); double d = nurat_to_double(self);
VALUE v = rb_float_new(d);
return rb_flo_div_flo(v, other);
}
else if (RB_TYPE_P(other, T_RATIONAL)) { else if (RB_TYPE_P(other, T_RATIONAL)) {
if (f_zero_p(other)) if (f_zero_p(other))
rb_num_zerodiv(); rb_num_zerodiv();
@ -968,7 +971,7 @@ nurat_fdiv(VALUE self, VALUE other)
{ {
VALUE div; VALUE div;
if (f_zero_p(other)) if (f_zero_p(other))
return DBL2NUM(nurat_to_double(self) / 0.0); return nurat_div(self, rb_float_new(0.0));
if (FIXNUM_P(other) && other == LONG2FIX(1)) if (FIXNUM_P(other) && other == LONG2FIX(1))
return nurat_to_f(self); return nurat_to_f(self);
div = nurat_div(self, other); div = nurat_div(self, other);