{Fixnum,Bignum}#** is unified into Integer.
* numeric.c (rb_int_pow): {Fixnum,Bignum}#** is unified into Integer. * bignum.c (rb_big_pow): Don't define Bignum#**. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@54831 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d73b431e50
commit
8a2df1ce3f
@ -1,3 +1,10 @@
|
|||||||
|
Sat Apr 30 12:25:43 2016 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
|
* numeric.c (rb_int_pow): {Fixnum,Bignum}#** is unified into
|
||||||
|
Integer.
|
||||||
|
|
||||||
|
* bignum.c (rb_big_pow): Don't define Bignum#**.
|
||||||
|
|
||||||
Sat Apr 30 12:28:59 2016 Tanaka Akira <akr@fsij.org>
|
Sat Apr 30 12:28:59 2016 Tanaka Akira <akr@fsij.org>
|
||||||
|
|
||||||
* bignum.c (rb_big_comp): Renamed from rb_big_neg.
|
* bignum.c (rb_big_comp): Renamed from rb_big_neg.
|
||||||
|
14
bignum.c
14
bignum.c
@ -6296,19 +6296,6 @@ rb_big_fdiv(VALUE x, VALUE y)
|
|||||||
return DBL2NUM(dx / dy);
|
return DBL2NUM(dx / dy);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* call-seq:
|
|
||||||
* big ** exponent -> numeric
|
|
||||||
*
|
|
||||||
* Raises _big_ to the _exponent_ power (which may be an integer, float,
|
|
||||||
* or anything that will coerce to a number). The result may be
|
|
||||||
* a Fixnum, Bignum, or Float
|
|
||||||
*
|
|
||||||
* 123456789 ** 2 #=> 15241578750190521
|
|
||||||
* 123456789 ** 1.2 #=> 5126464716.09932
|
|
||||||
* 123456789 ** -2 #=> 6.5610001194102e-17
|
|
||||||
*/
|
|
||||||
|
|
||||||
VALUE
|
VALUE
|
||||||
rb_big_pow(VALUE x, VALUE y)
|
rb_big_pow(VALUE x, VALUE y)
|
||||||
{
|
{
|
||||||
@ -6950,7 +6937,6 @@ Init_Bignum(void)
|
|||||||
rb_define_method(rb_cBignum, "modulo", rb_big_modulo, 1);
|
rb_define_method(rb_cBignum, "modulo", rb_big_modulo, 1);
|
||||||
rb_define_method(rb_cBignum, "remainder", rb_big_remainder, 1);
|
rb_define_method(rb_cBignum, "remainder", rb_big_remainder, 1);
|
||||||
rb_define_method(rb_cBignum, "fdiv", rb_big_fdiv, 1);
|
rb_define_method(rb_cBignum, "fdiv", rb_big_fdiv, 1);
|
||||||
rb_define_method(rb_cBignum, "**", rb_big_pow, 1);
|
|
||||||
|
|
||||||
rb_define_method(rb_cBignum, "==", rb_big_eq, 1);
|
rb_define_method(rb_cBignum, "==", rb_big_eq, 1);
|
||||||
rb_define_method(rb_cBignum, ">", big_gt, 1);
|
rb_define_method(rb_cBignum, ">", big_gt, 1);
|
||||||
|
26
numeric.c
26
numeric.c
@ -3557,16 +3557,22 @@ fix_divmod(VALUE x, VALUE y)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Document-method: Fixnum#**
|
* Document-method: Integer#**
|
||||||
* call-seq:
|
* call-seq:
|
||||||
* fix ** numeric -> numeric_result
|
* integer ** numeric -> numeric_result
|
||||||
*
|
*
|
||||||
* Raises +fix+ to the power of +numeric+, which may be negative or
|
* Raises +integer+ to the power of +numeric+, which may be negative or
|
||||||
* fractional.
|
* fractional.
|
||||||
|
* The result may be a Fixnum, Bignum, or Float
|
||||||
*
|
*
|
||||||
* 2 ** 3 #=> 8
|
* 2 ** 3 #=> 8
|
||||||
* 2 ** -1 #=> (1/2)
|
* 2 ** -1 #=> (1/2)
|
||||||
* 2 ** 0.5 #=> 1.4142135623731
|
* 2 ** 0.5 #=> 1.4142135623731
|
||||||
|
*
|
||||||
|
* 123456789 ** 2 #=> 15241578750190521
|
||||||
|
* 123456789 ** 1.2 #=> 5126464716.09932
|
||||||
|
* 123456789 ** -2 #=> 6.5610001194102e-17
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
@ -3666,6 +3672,18 @@ fix_pow(VALUE x, VALUE y)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static VALUE
|
||||||
|
rb_int_pow(VALUE x, VALUE y)
|
||||||
|
{
|
||||||
|
if (FIXNUM_P(x)) {
|
||||||
|
return fix_pow(x, y);
|
||||||
|
}
|
||||||
|
else if (RB_TYPE_P(x, T_BIGNUM)) {
|
||||||
|
return rb_big_pow(x, y);
|
||||||
|
}
|
||||||
|
return Qnil;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Document-method: Fixnum#==
|
* Document-method: Fixnum#==
|
||||||
* call-seq:
|
* call-seq:
|
||||||
@ -4799,7 +4817,7 @@ Init_Numeric(void)
|
|||||||
rb_define_method(rb_cFixnum, "modulo", fix_mod, 1);
|
rb_define_method(rb_cFixnum, "modulo", fix_mod, 1);
|
||||||
rb_define_method(rb_cFixnum, "divmod", fix_divmod, 1);
|
rb_define_method(rb_cFixnum, "divmod", fix_divmod, 1);
|
||||||
rb_define_method(rb_cFixnum, "fdiv", fix_fdiv, 1);
|
rb_define_method(rb_cFixnum, "fdiv", fix_fdiv, 1);
|
||||||
rb_define_method(rb_cFixnum, "**", fix_pow, 1);
|
rb_define_method(rb_cInteger, "**", rb_int_pow, 1);
|
||||||
|
|
||||||
rb_define_method(rb_cInteger, "abs", int_abs, 0);
|
rb_define_method(rb_cInteger, "abs", int_abs, 0);
|
||||||
rb_define_method(rb_cInteger, "magnitude", int_abs, 0);
|
rb_define_method(rb_cInteger, "magnitude", int_abs, 0);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user