mirror of
https://github.com/ruby/ruby.git
synced 2025-09-19 10:33:58 +02:00
merge revision(s) 37567: [Backport #7315]
* bignum.c (bigmul0): enable big_mul_toom3. [ruby-core:48552] [Bug #7242] * bignum.c (bigmul1_toom3): fix incorrect calculation. the patch is made by Heesob Park. [ruby-core:48552] [Bug #7242] * bignum.c (bigmul0): disable big_mul_toom3 temporalily. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/branches/ruby_1_9_3@37573 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
122b6dbcb7
commit
995e42817c
4 changed files with 21 additions and 8 deletions
13
ChangeLog
13
ChangeLog
|
@ -1,6 +1,15 @@
|
||||||
Thu Nov 9 05:33:99 2012 Kenta Murata <mrkn@mrkn.jp>
|
Fri Nov 9 13:16:16 2012 Kenta Murata <mrkn@mrkn.jp>
|
||||||
|
|
||||||
* bignum.c (bigmul0): disable big_mul_toom3_temporalily.
|
* bignum.c (bigmul0): enable big_mul_toom3.
|
||||||
|
[ruby-core:48552] [Bug #7242]
|
||||||
|
|
||||||
|
* bignum.c (bigmul1_toom3): fix incorrect calculation.
|
||||||
|
the patch is made by Heesob Park.
|
||||||
|
[ruby-core:48552] [Bug #7242]
|
||||||
|
|
||||||
|
Fri Nov 9 13:16:16 2012 Kenta Murata <mrkn@mrkn.jp>
|
||||||
|
|
||||||
|
* bignum.c (bigmul0): disable big_mul_toom3 temporalily.
|
||||||
[ruby-core:48552] [Bug #7242]
|
[ruby-core:48552] [Bug #7242]
|
||||||
|
|
||||||
* test/ruby/test_bignum.rb (test_mul_large_numbers):
|
* test/ruby/test_bignum.rb (test_mul_large_numbers):
|
||||||
|
|
7
bignum.c
7
bignum.c
|
@ -2419,7 +2419,7 @@ bigmul1_toom3(VALUE x, VALUE y)
|
||||||
z2 = bigtrunc(bigadd(u2, u0, 0));
|
z2 = bigtrunc(bigadd(u2, u0, 0));
|
||||||
|
|
||||||
/* z3 <- (z2 - z3) / 2 + 2 * z(inf) == (z2 - z3) / 2 + 2 * u4 */
|
/* z3 <- (z2 - z3) / 2 + 2 * z(inf) == (z2 - z3) / 2 + 2 * u4 */
|
||||||
z3 = bigadd(z2, z3, 0);
|
z3 = bigtrunc(bigadd(z2, z3, 0));
|
||||||
bigrsh_bang(BDIGITS(z3), RBIGNUM_LEN(z3), 1);
|
bigrsh_bang(BDIGITS(z3), RBIGNUM_LEN(z3), 1);
|
||||||
t = big_lshift(u4, 1); /* TODO: combining with next addition */
|
t = big_lshift(u4, 1); /* TODO: combining with next addition */
|
||||||
z3 = bigtrunc(bigadd(z3, t, 1));
|
z3 = bigtrunc(bigadd(z3, t, 1));
|
||||||
|
@ -2535,9 +2535,14 @@ bigmul0(VALUE x, VALUE y)
|
||||||
/* balance multiplication by slicing y when x is much smaller than y */
|
/* balance multiplication by slicing y when x is much smaller than y */
|
||||||
if (2 * xn <= yn) return bigmul1_balance(x, y);
|
if (2 * xn <= yn) return bigmul1_balance(x, y);
|
||||||
|
|
||||||
|
if (xn < TOOM3_MUL_DIGITS) {
|
||||||
/* multiplication by karatsuba method */
|
/* multiplication by karatsuba method */
|
||||||
return bigmul1_karatsuba(x, y);
|
return bigmul1_karatsuba(x, y);
|
||||||
}
|
}
|
||||||
|
else if (3*xn <= 2*(yn + 2))
|
||||||
|
return bigmul1_balance(x, y);
|
||||||
|
return bigmul1_toom3(x, y);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* call-seq:
|
* call-seq:
|
||||||
|
|
|
@ -274,7 +274,6 @@ class TestBignum < Test::Unit::TestCase
|
||||||
69131640408147806442422254638590386673344704147156793990832671592488742473
|
69131640408147806442422254638590386673344704147156793990832671592488742473
|
||||||
31524606724894164324227362735271650556732855509929890983919463699819116427
|
31524606724894164324227362735271650556732855509929890983919463699819116427
|
||||||
].join.to_i
|
].join.to_i
|
||||||
|
|
||||||
b = %w[
|
b = %w[
|
||||||
31519454770031243652776765515030872050264386564379909299874378289835540661
|
31519454770031243652776765515030872050264386564379909299874378289835540661
|
||||||
99756262835346828114038365624177182230027040172583473561802565238817167503
|
99756262835346828114038365624177182230027040172583473561802565238817167503
|
||||||
|
@ -354,7 +353,7 @@ class TestBignum < Test::Unit::TestCase
|
||||||
21851731257845562153822058534043916834839514338448582518847879059020959697
|
21851731257845562153822058534043916834839514338448582518847879059020959697
|
||||||
90538105704766415685100946308842788321400392381169436435078204622400475281
|
90538105704766415685100946308842788321400392381169436435078204622400475281
|
||||||
].join.to_i
|
].join.to_i
|
||||||
assert_equal(c, a*b)
|
assert_equal(c, a*b, '[ruby-core:48552]')
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_divrem
|
def test_divrem
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#define RUBY_VERSION "1.9.3"
|
#define RUBY_VERSION "1.9.3"
|
||||||
#define RUBY_PATCHLEVEL 319
|
#define RUBY_PATCHLEVEL 320
|
||||||
|
|
||||||
#define RUBY_RELEASE_DATE "2012-11-09"
|
#define RUBY_RELEASE_DATE "2012-11-09"
|
||||||
#define RUBY_RELEASE_YEAR 2012
|
#define RUBY_RELEASE_YEAR 2012
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue