Slide 11
Slide 11 text
ͲΜͳ࣮ʁ
static VALUE
int_pow(long x, unsigned long y)
{
// ...
y &= ~1;
do {
while (y % 2 == 0) {
if (!FIT_SQRT_LONG(x)) {
VALUE v;
bignum:
v = rb_big_pow(rb_int2big(x), LONG2NUM(y));
if (RB_FLOAT_TYPE_P(v)) /* infinity due to overflow */
return v;
if (z != 1) v = rb_big_mul(rb_int2big(neg ? -z : z), v);
return v;
}
x = x * x;
y >>= 1;
}
{
if (MUL_OVERFLOW_FIXNUM_P(x, z)) {
goto bignum;
}
z = x * z;
}
} while (--y);
if (neg) z = -z;
return LONG2NUM(z);
}
ԿΘ͔Βͳ͍
OVNFSJDDSVCZSVCZc(JU)VC
IUUQTHJUIVCDPNSVCZSVCZCMPCEBCDFFGCBBGDOVNFSJDD