array.c (rb_ary_sum): use rb_rational_add directly
* rational.c (rb_rational_add): rename from nurat_add. * array.c (rb_ary_sum): use rb_rational_add directly. * test/ruby/test_array.rb (test_sum): add assertions for an array of Rational values. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54602 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
a945eb9dda
commit
0a267b79f6
@ -1,3 +1,12 @@
|
||||
Fri Apr 15 23:42:00 2016 Kenta Murata <mrkn@mrkn.jp>
|
||||
|
||||
* rational.c (rb_rational_add): rename from nurat_add.
|
||||
|
||||
* array.c (rb_ary_sum): use rb_rational_add directly.
|
||||
|
||||
* test/ruby/test_array.rb (test_sum): add assertions for an array of
|
||||
Rational values.
|
||||
|
||||
Fri Apr 15 22:31:00 2016 Kenta Murata <mrkn@mrkn.jp>
|
||||
|
||||
* array.c (rb_ary_sum): apply the precision compensated algorithm
|
||||
|
2
array.c
2
array.c
@ -5762,7 +5762,7 @@ rb_ary_sum(int argc, VALUE *argv, VALUE ary)
|
||||
v = rb_to_float(v);
|
||||
goto float_value;
|
||||
}
|
||||
v = rb_funcall(v, idPLUS, 1, e);
|
||||
v = rb_rational_add(e, v);
|
||||
}
|
||||
return v;
|
||||
}
|
||||
|
@ -1204,6 +1204,7 @@ rb_pid_t rb_fork_ruby(int *status);
|
||||
void rb_last_status_clear(void);
|
||||
|
||||
/* rational.c */
|
||||
VALUE rb_rational_add(VALUE self, VALUE other);
|
||||
VALUE rb_lcm(VALUE x, VALUE y);
|
||||
VALUE rb_rational_reciprocal(VALUE x);
|
||||
VALUE rb_cstr_to_rat(const char *, int);
|
||||
|
@ -741,8 +741,8 @@ f_addsub(VALUE self, VALUE anum, VALUE aden, VALUE bnum, VALUE bden, int k)
|
||||
* Rational(9, 8) + 4 #=> (41/8)
|
||||
* Rational(20, 9) + 9.8 #=> 12.022222222222222
|
||||
*/
|
||||
static VALUE
|
||||
nurat_add(VALUE self, VALUE other)
|
||||
VALUE
|
||||
rb_rational_add(VALUE self, VALUE other)
|
||||
{
|
||||
if (RB_TYPE_P(other, T_FIXNUM) || RB_TYPE_P(other, T_BIGNUM)) {
|
||||
{
|
||||
@ -2538,7 +2538,7 @@ Init_Rational(void)
|
||||
rb_define_method(rb_cRational, "numerator", nurat_numerator, 0);
|
||||
rb_define_method(rb_cRational, "denominator", nurat_denominator, 0);
|
||||
|
||||
rb_define_method(rb_cRational, "+", nurat_add, 1);
|
||||
rb_define_method(rb_cRational, "+", rb_rational_add, 1);
|
||||
rb_define_method(rb_cRational, "-", nurat_sub, 1);
|
||||
rb_define_method(rb_cRational, "*", nurat_mul, 1);
|
||||
rb_define_method(rb_cRational, "/", nurat_div, 1);
|
||||
|
@ -2761,6 +2761,8 @@ class TestArray < Test::Unit::TestCase
|
||||
assert_float_equal((FIXNUM_MAX+1).to_f, [FIXNUM_MAX, 1, 0.0].sum)
|
||||
assert_float_equal((FIXNUM_MAX+1).to_f, [0.0, FIXNUM_MAX+1].sum)
|
||||
|
||||
assert_rational_equal(5/6r, [1/2r, 1/3r].sum)
|
||||
|
||||
assert_equal(2.0+3.0i, [2.0, 3.0i].sum)
|
||||
|
||||
assert_int_equal(13, [1, 2].sum(10))
|
||||
|
Loading…
x
Reference in New Issue
Block a user