akr
04cf3fa346
* bignum.c (big2str_orig): Refactored.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42344 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-02 17:24:19 +00:00
akr
81f42c7576
* bignum.c (big2str_orig): Rename a local variable.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42343 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-02 16:42:40 +00:00
akr
d0741fdf1c
* bignum.c (bigadd_core): Removed.
...
(bigadd): Use bary_add instead of bigadd_core.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42342 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-02 16:22:47 +00:00
akr
ebbaec9696
* bignum.c (rb_big2str1): Simplify power_level calculation.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42341 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-02 15:55:07 +00:00
akr
54c3b1ba19
* bignum.c (power_cache_get_power): Appry bigtrunc to the result of
...
bigsq.
(big2str_karatsuba): Fix number of leading zero characters.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42335 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-02 14:53:22 +00:00
nobu
ba95b9787d
bignum.c: suppress a warning
...
* bignum.c (rb_cstr_to_inum): remove set but unused variable.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42329 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-02 14:10:51 +00:00
akr
bc7c0a63fd
* bignum.c (big2str_karatsuba): Reduce power_level more than one at
...
recursion, if possible.
(rb_big2str1): Follow the above change.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42325 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-02 09:36:23 +00:00
akr
9e8f82e087
* bignum.c (bary_mul): Swap x and y for bary_mul1 if x is longer than y.
...
[ruby-dev:47565] [Bug #8719 ] Reported by Narihiro Nakamura.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42324 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-02 03:28:33 +00:00
akr
474dc1e816
* bignum.c (big2str_orig): Remove len argument.
...
(big2str_karatsuba): Ditto.
(rb_big2str1): Follow above change.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42319 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-01 22:49:12 +00:00
akr
9ebd675c47
* bignum.c (rb_big2str1): Remove a local variable.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42310 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-01 14:57:21 +00:00
akr
69263bb755
* bignum.c (rb_cstr_to_inum): Use power_cache_get_power.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42309 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-01 14:34:59 +00:00
akr
d620b0b9cd
* bignum.c (rb_big2str1): Raise an error for too big number.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42307 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-01 12:05:04 +00:00
akr
780a125faf
* bignum.c (power_cache_get_power): Hide cached Bignum objects.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42306 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-01 11:48:42 +00:00
akr
0ade4f39fd
* bignum.c (rb_big2str1): Remove non-trim mode.
...
(rb_big2str0): Non-trim mode implemented here.
(big2str_find_n1): Change the result type to long again.
(big2str_base_powerof2): Don't take arguments: len and trim.
(rb_big2str): Follow above change.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42305 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-01 10:19:23 +00:00
akr
93055423bd
* bignum.c (big2str_alloc): New function to allocate the result string.
...
It is called after actual length is calculated.
(big2str_struct): Add fields: negative, result and ptr.
(big2str_orig): Write out the result via b2s->ptr.
(big2str_orig): Ditto.
(rb_big2str1): Don't allocate the result string at beginning.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42303 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-01 03:43:14 +00:00
akr
478bd3128c
* bignum.c (big2str_orig): Use temporary buffer when trim mode.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42302 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-31 22:38:53 +00:00
akr
39a00c6710
* bignum.c (big2str_orig): Simplified because RBIGNUM_LEN(x) <= 2 now.
...
(big2str_struct): Two fields added: hbase2, hbase2_numdigits.
(rb_big2str1): Initialize above fields.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42301 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-31 21:33:14 +00:00
akr
eed6c15a21
* bignum.c (big2str_karatsuba): Fix a condition of power_level.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42298 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-31 16:48:08 +00:00
nobu
278b494ba7
* remove trailing spaces.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42296 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-31 16:21:11 +00:00
akr
4f1b07e9eb
* bignum.c (LOG2_KARATSUBA_BIG2STR_DIGITS): Removed.
...
(KARATSUBA_BIG2STR_DIGITS): Removed.
(big2str_numdigits_cache): New variable.
(power_cache_get_power): Merged with power_cache_get_power0.
This function returns maxpow_in_bdigit_dbl(base)**(2**power_level).
(rb_big2str1): use power_cache_get_power.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42295 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-31 16:20:26 +00:00
akr
d28913b4b9
* bignum.c (big2str_find_n1): Change the return type to size_t.
...
(big2str_orig): Ditto.
(big2str_karatsuba): Ditto.
(rb_big2str1): Follow the above changes.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42294 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-31 15:01:55 +00:00
akr
9e84b33564
* bignum.c (power_cache_get_power): Change numdigits_ret to size_t *.
...
(big2str_orig): Change len argument to size_t.
(big2str_karatsuba): Ditto.
(rb_big2str1): Follow the above changes.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42291 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-31 14:21:54 +00:00
akr
621d2b3d6c
* bignum.c (bary_cmp): Extracted from rb_big_cmp.
...
(power_cache_get_power): Change n1 argument (number of digits) to
power_level which is just passed to power_cache_get_power0.
(big2str_karatsuba): Ditto.
(rb_big2str1): Calculate the initial power_level.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42285 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-31 13:42:22 +00:00
akr
aba8c29a8b
* bignum.c (MAX_BIG2STR_TABLE_ENTRIES): Use SIZEOF_SIZE_T.
...
(power_cache_get_power0): Add rb_bug call for too bit i argument.
(power_cache_get_power): Simplified.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42274 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-31 10:58:58 +00:00
akr
6189859101
* bignum.c (big2str_struct): New structure.
...
(big2str_orig): Use big2str_struct.
(big2str_karatsuba): Ditto.
(rb_big2str1): Ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42262 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-31 03:20:35 +00:00
akr
16bf45bf38
* bignum.c (LOG2_KARATSUBA_BIG2STR_DIGITS): Renamed from
...
LOG2_KARATSUBA_DIGITS.
(KARATSUBA_BIG2STR_DIGITS): Renamed from KARATSUBA_DIGITS.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42240 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-29 13:18:46 +00:00
akr
7a9aeb33db
* bignum.c (bigdivrem): Specialized implementation added for
...
nx == 2 && ny == 2
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42218 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-28 15:14:20 +00:00
akr
37377b24d1
* bignum.c (absint_numwords_generic): The char_bit variable changed
...
to a static constant.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42210 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-28 03:51:13 +00:00
akr
aecf007782
* bignum.c: Constify bary_* functions.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42209 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-28 03:12:36 +00:00
akr
e5ff9d58ef
* include/ruby/intern.h (rb_absint_size): Declaration moved from
...
internal.h to calculate required buffer size to pack integers.
(rb_absint_numwords): Ditto.
(rb_absint_singlebit_p): Ditto.
[ruby-core:42813] [Feature #6065 ]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42208 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-28 02:14:58 +00:00
akr
5b89a56b4f
* bignum.c (rb_big_size): Return the bignum "bytewise" size.
...
[ruby-core:55578] [Feature #8553 ]
This is accepted by matz on DevelopersMeeting20130727Japan.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42204 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-27 15:39:01 +00:00
akr
a84ea11986
* bignum.c: Move functions.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42140 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-23 11:49:25 +00:00
akr
ca3f5b533d
* bignum.c (bary_divmod): Add special cases for x < y easily detected
...
and nx == 2 && ny == 2.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42139 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-23 11:16:39 +00:00
akr
66cc0fa4ab
* bignum.c (bary_mulsub_1xN): New function.
...
(bary_mul_toom3): Use bary_mulsub_1xN.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42123 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-22 22:16:45 +00:00
akr
fdb991b9a0
* bignum.c (KARATSUBA_BALANCED): New macro.
...
(TOOM3_BALANCED): Ditto.
(bary_mul_balance_with_mulfunc): Use KARATSUBA_BALANCED and
TOOM3_BALANCED.
(rb_big_mul_balance): Relax a condition.
(rb_big_mul_karatsuba): Use KARATSUBA_BALANCED.
(rb_big_mul_toom3): Use TOOM3_BALANCED.
(bary_mul_karatsuba_branch): Use KARATSUBA_BALANCED.
(bary_mul_toom3_branch): Use TOOM3_BALANCED.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42122 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-22 18:35:27 +00:00
akr
685e4c67bf
* bignum.c (bigdivrem_mulsub): Extracted from bigdivrem1.
...
(bigdivrem1): Use bary_add.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42119 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-22 16:36:36 +00:00
akr
d3845ef8db
* bignum.c (bary_sq_fast): Refine expressions.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42097 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-21 15:17:09 +00:00
akr
5cf931d65e
* bignum.c (bary_mul): Use simple multiplication if yl is small.
...
(rb_cstr_to_inum): Invoke bigsq instead of bigmul0.
(bigsq): Re-implemented.
(bigmul0): Invoke bigsq if two arguments are identical.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42096 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-21 12:13:47 +00:00
akr
a2116ef2cd
* bignum.c (bary_mul_toom3): New function based on bigmul1_toom3.
...
(bary_mul_toom3_branch): Call bary_mul_toom3.
(rb_big_mul_toom3): Ditto.
(bigmul1_toom3): Removed.
(big_real_len): Ditto.
(big_split): Ditto.
(big_split3): Ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42095 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-21 01:01:26 +00:00
akr
abfb7b35a2
Update a comment for Toom3.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42084 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-20 13:32:11 +00:00
akr
2314c1bf47
* bignum.c (bary_sq_fast): Specialize the last iteration of the
...
outer loop.
(bigfixize): A condition simplified.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42044 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-18 12:58:46 +00:00
akr
80afc9b2f3
* bignum.c (BDIGITS_ZERO): Defined.
...
(bary_pack): Use BDIGITS_ZERO.
(bary_unpack): Ditto.
(bary_mul_single): Ditto.
(bary_mul_normal): Ditto.
(bary_sq_fast): Ditto.
(bary_mul_balance_with_mulfunc): Ditto.
(bary_mul_precheck): Ditto.
(bary_mul_toom3_branch): Ditto.
(rb_cstr_to_inum): Ditto.
(big_shift3): Ditto.
(bigmul1_toom3): Ditto.
(bary_divmod): Ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42032 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-18 04:00:49 +00:00
akr
15f7c7f9d4
* bignum.c: An static assertion for relation of SIZEOF_LONG and
...
SIZEOF_BDIGITS is added.
(bary_mul_precheck): Reduce comparisons.
(bary_mul): Invoke bary_sq_fast or bary_mul1 if the bignum size is
small.
(bigfixize): Resize the argument bignum here.
(bignorm): Don't call bigtrunc after bigfixize.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42028 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-17 13:53:24 +00:00
akr
deaec24790
* bignum.c (bigmul1_toom3): Use bigdivrem_single instead of bigdivrem.
...
(big_three): Removed.
(Init_Bignum): Don't initialize big_three.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42010 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-16 15:17:21 +00:00
akr
6be7c95734
* bignum.c (bigsq): Renamed from bigsqr.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42007 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-16 11:23:03 +00:00
akr
a08c5527ea
* bignum.c (USHORT): Unused macro removed.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42006 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-16 10:44:27 +00:00
akr
4106413465
* bignum.c (big_shift3): Big shift width is not a problem for right
...
shift.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42004 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-16 10:08:25 +00:00
akr
c0cce2938c
* bignum.c (bary_mul_karatsuba): Avoid duplicate calculation when
...
squaring.
((bary_mul_toom3_branch): Ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42001 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-16 09:37:42 +00:00
akr
a38f209a39
Fix spaces.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41988 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-15 12:56:29 +00:00
akr
46360975a4
* include/ruby/intern.h (rb_big2str0): Deprecated.
...
* bignum.c (rb_big2str1): Renamed from rb_big2str0.
(rb_big2str0): Deprecated wrapper for rb_big2str1.
(rb_big2str): Invoke rb_big2str1 instead of rb_big2str0.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@41987 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-07-15 05:42:22 +00:00