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

* ext/bigdecimal (BigDecimal_to_i): Integer#** may return flonum.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@31976 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
tadf 2011-06-09 16:08:38 +00:00
parent 14c504b3cc
commit c2f9e1b100
2 changed files with 13 additions and 4 deletions

View file

@ -1,3 +1,7 @@
Fri Jun 10 01:06:29 2011 Tadayoshi Funaba <tadf@dotrb.org>
* ext/bigdecimal (BigDecimal_to_i): Integer#** may return flonum.
Fri Jun 10 00:35:12 2011 Tadayoshi Funaba <tadf@dotrb.org>
* complex.c (string_to_c_internal): uses rb_reg_nth_match;

View file

@ -564,19 +564,24 @@ BigDecimal_to_i(VALUE self)
VALUE a = BigDecimal_split(self);
VALUE digits = RARRAY_PTR(a)[1];
VALUE numerator = rb_funcall(digits, rb_intern("to_i"), 0);
VALUE ret;
ssize_t dpower = e - (ssize_t)RSTRING_LEN(digits);
if (VpGetSign(p) < 0) {
numerator = rb_funcall(numerator, '*', 1, INT2FIX(-1));
}
if (dpower < 0) {
return rb_funcall(numerator, rb_intern("div"), 1,
ret = rb_funcall(numerator, rb_intern("div"), 1,
rb_funcall(INT2FIX(10), rb_intern("**"), 1,
INT2FIX(-dpower)));
}
return rb_funcall(numerator, '*', 1,
rb_funcall(INT2FIX(10), rb_intern("**"), 1,
INT2FIX(dpower)));
else
ret = rb_funcall(numerator, '*', 1,
rb_funcall(INT2FIX(10), rb_intern("**"), 1,
INT2FIX(dpower)));
if (TYPE(ret) == T_FLOAT)
rb_raise(rb_eFloatDomainError, "Infinity");
return ret;
}
}