numeric.c: Fix Integer#pow with a large Fixnum modulo
* numeric.c: Fix Integer#pow with a large Fixnum modulo [Bug #14259] [ruby-core:84562] * test/ruby/test_numeric.rb: add assertions for reproducing this bug. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61517 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
d83e02017e
commit
f92924923d
4
bignum.c
4
bignum.c
@ -7016,7 +7016,9 @@ int_pow_tmp2(VALUE x, VALUE y, long mm, int nega_flg)
|
|||||||
xx = MUL_MODULO(xx, xx, m);
|
xx = MUL_MODULO(xx, xx, m);
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifndef DLONG
|
#ifdef DLONG
|
||||||
|
tmp = tmp2;
|
||||||
|
#else
|
||||||
tmp = FIX2LONG(tmp2);
|
tmp = FIX2LONG(tmp2);
|
||||||
#endif
|
#endif
|
||||||
if (nega_flg && tmp) {
|
if (nega_flg && tmp) {
|
||||||
|
@ -400,6 +400,11 @@ class TestNumeric < Test::Unit::TestCase
|
|||||||
2120078484650058507891187874713297895455.
|
2120078484650058507891187874713297895455.
|
||||||
pow(5478118174010360425845660566650432540723,
|
pow(5478118174010360425845660566650432540723,
|
||||||
5263488859030795548286226023720904036518))
|
5263488859030795548286226023720904036518))
|
||||||
|
|
||||||
|
assert_equal(12, 12.pow(1, 10000000000), '[Bug #14259]')
|
||||||
|
assert_equal(12, 12.pow(1, 10000000001), '[Bug #14259]')
|
||||||
|
assert_equal(12, 12.pow(1, 10000000002), '[Bug #14259]')
|
||||||
|
assert_equal(17298641040, 12.pow(72387894339363242, 243682743764), '[Bug #14259]')
|
||||||
end
|
end
|
||||||
|
|
||||||
end
|
end
|
||||||
|
Loading…
x
Reference in New Issue
Block a user