ruby-changes:25516
From: usa <ko1@a...>
Date: Fri, 9 Nov 2012 13:16:37 +0900 (JST)
Subject: [ruby-changes:25516] usa:r37573 (ruby_1_9_3): merge revision(s) 37567: [Backport #7315]
usa 2012-11-09 13:16:27 +0900 (Fri, 09 Nov 2012) New Revision: 37573 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=37573 Log: 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. Modified directories: branches/ruby_1_9_3/ Modified files: branches/ruby_1_9_3/ChangeLog branches/ruby_1_9_3/bignum.c branches/ruby_1_9_3/test/ruby/test_bignum.rb branches/ruby_1_9_3/version.h Index: ruby_1_9_3/ChangeLog =================================================================== --- ruby_1_9_3/ChangeLog (revision 37572) +++ ruby_1_9_3/ChangeLog (revision 37573) @@ -1,8 +1,17 @@ -Thu Nov 9 05:33:99 2012 Kenta Murata <mrkn@m...> +Fri Nov 9 13:16:16 2012 Kenta Murata <mrkn@m...> - * 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@m...> + + * bignum.c (bigmul0): disable big_mul_toom3 temporalily. + [ruby-core:48552] [Bug #7242] + * test/ruby/test_bignum.rb (test_mul_large_numbers): add a test for bigmul1_toom3 suggested in [Bug #7242]. Index: ruby_1_9_3/version.h =================================================================== --- ruby_1_9_3/version.h (revision 37572) +++ ruby_1_9_3/version.h (revision 37573) @@ -1,5 +1,5 @@ #define RUBY_VERSION "1.9.3" -#define RUBY_PATCHLEVEL 319 +#define RUBY_PATCHLEVEL 320 #define RUBY_RELEASE_DATE "2012-11-09" #define RUBY_RELEASE_YEAR 2012 Index: ruby_1_9_3/bignum.c =================================================================== --- ruby_1_9_3/bignum.c (revision 37572) +++ ruby_1_9_3/bignum.c (revision 37573) @@ -2419,7 +2419,7 @@ z2 = bigtrunc(bigadd(u2, u0, 0)); /* 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); t = big_lshift(u4, 1); /* TODO: combining with next addition */ z3 = bigtrunc(bigadd(z3, t, 1)); @@ -2535,8 +2535,13 @@ /* balance multiplication by slicing y when x is much smaller than y */ if (2 * xn <= yn) return bigmul1_balance(x, y); - /* multiplication by karatsuba method */ - return bigmul1_karatsuba(x, y); + if (xn < TOOM3_MUL_DIGITS) { + /* multiplication by karatsuba method */ + return bigmul1_karatsuba(x, y); + } + else if (3*xn <= 2*(yn + 2)) + return bigmul1_balance(x, y); + return bigmul1_toom3(x, y); } /* Index: ruby_1_9_3/test/ruby/test_bignum.rb =================================================================== --- ruby_1_9_3/test/ruby/test_bignum.rb (revision 37572) +++ ruby_1_9_3/test/ruby/test_bignum.rb (revision 37573) @@ -274,7 +274,6 @@ 69131640408147806442422254638590386673344704147156793990832671592488742473 31524606724894164324227362735271650556732855509929890983919463699819116427 ].join.to_i - b = %w[ 31519454770031243652776765515030872050264386564379909299874378289835540661 99756262835346828114038365624177182230027040172583473561802565238817167503 @@ -354,7 +353,7 @@ 21851731257845562153822058534043916834839514338448582518847879059020959697 90538105704766415685100946308842788321400392381169436435078204622400475281 ].join.to_i - assert_equal(c, a*b) + assert_equal(c, a*b, '[ruby-core:48552]') end def test_divrem Property changes on: ruby_1_9_3 ___________________________________________________________________ Modified: svn:mergeinfo Merged /trunk:r37567 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/