Граф коммитов

649 Коммитов

Автор SHA1 Сообщение Дата
nobu c26293dccf bignum.c, math.c: type predicates
* bignum.c, math.c: use type predicate macros instead of TYPE().

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42873 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-07 19:04:18 +00:00
nobu a77ae1eced bignum.c: split rb_big_fdiv and big_fdiv
* bignum.c (rb_big_fdiv): split with big_fdiv by divider type.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42872 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-07 19:04:15 +00:00
akr b1b395911c * bignum.c (GMP_DIV_DIGITS): New macro.
(bary_divmod_gmp): New function.
  (rb_big_divrem_gmp): Ditto.
  (bary_divmod_branch): Ditto.
  (bary_divmod): Use bary_divmod_branch.
  (bigdivrem): Ditto.

* internal.h (rb_big_divrem_gmp): Declared.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42840 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-04 23:22:27 +00:00
akr 3b1ab2a6b7 * bignum.c (bary_divmod_normal): Reduce temporary array allocations.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42839 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-04 21:23:21 +00:00
akr 8745bc676e * bignum.c (rb_big_divrem_normal): Add GC guards.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42837 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-04 17:21:43 +00:00
akr 8f8bf8243d * bignum.c (rb_big_divrem_normal): New function.
* internal.h (rb_big_divrem_normal): Declared.

* ext/-test-/bignum/div.c: New file.

* test/-ext-/bignum/test_div.rb: New file.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42834 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-04 16:10:06 +00:00
akr cf3736a75a * bignum.c (bigdivrem_normal): Removed.
(bary_divmod_normal): New function.
  (bary_divmod): Use bary_divmod_normal.
  (bigdivrem): Use bary_divmod_normal.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42832 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-04 15:10:48 +00:00
akr 102a2c2e80 * bignum.c (bigdivrem): Useless declaration removed.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42830 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-04 14:03:29 +00:00
akr dd95c9b1cd * bignum.c (bigdivrem_normal): Add assertions.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42828 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-04 11:23:05 +00:00
akr 2583689340 * bignum.c (GMP_STR2BIG_DIGITS): New macro.
(str2big_gmp): New function.
  (rb_cstr_to_inum): Use str2big_gmp for big bignums.
  (rb_str2big_gmp): New function.

* internal.h (rb_str2big_gmp): Declared.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42806 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-03 11:20:02 +00:00
akr 0b2413b471 * bignum.c (rb_str2big_poweroftwo): New function.
(rb_str2big_normal): Ditto.
  (rb_str2big_karatsuba): Ditto.

* internal.h (rb_str2big_poweroftwo): Declared.
  (rb_str2big_normal): Ditto.
  (rb_str2big_karatsuba): Ditto.

* ext/-test-/bignum/str2big.c: New file.

* test/-ext-/bignum/test_str2big.rb: New file.

* ext/-test-/bignum/depend: Add the dependency for str2big.c.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42797 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-03 03:50:15 +00:00
akr c048ad23b6 * bignum.c (str2big_scan_digits): Extracted from rb_cstr_to_inum.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42794 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-03 03:03:32 +00:00
akr 0c3d124571 * bignum.c (bytes_2comp): Define it only for little endian
environment.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42787 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-02 22:41:07 +00:00
akr 1d7611ff48 * bignum.c (ISDIGIT): Unused macro removed.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42777 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-02 13:56:23 +00:00
akr 5f61a592e9 * bignum.c (str2big_poweroftwo): Extracted from rb_cstr_to_inum.
(str2big_normal): Ditto.
  (str2big_karatsuba): Ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42776 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-02 13:52:05 +00:00
akr 0effd06122 * bignum.c (Init_Bignum): Define Bignum::GMP_VERSION when GMP is used.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42767 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-01 22:04:35 +00:00
akr c48e169fb9 * bignum.c (big2str_generic): Reduce arguments.
(big2str_gmp): Ditto.
  (rb_big2str1): Follow the above change.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42766 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-01 16:47:20 +00:00
akr b64c2c348f * bignum.c (GMP_BIG2STR_DIGITS): New constant.
(big2str_gmp): New function.
  (rb_big2str1): Use big2str_gmp for big bignums.

* internal.h (rb_big2str_gmp): Declared.

* ext/-test-/bignum/big2str.c (big2str_gmp): New method.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42762 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-01 14:34:53 +00:00
akr 4dd7a13a0a * bignum.c (bary_mul_gmp): Use mpz_init and mpz_clear instead of
mpz_inits and mpz_clears.
  Older GMP don't have them.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42761 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-01 13:38:49 +00:00
akr 7dd1604603 * bignum.c (big2str_base_poweroftwo): Renamed from
big2str_base_powerof2.
  (rb_big2str_poweroftwo): New function for test.
  (big2str_generic): Extracted from rb_big2str1.
  (rb_big2str_generic): New function for test.

* internal.h (rb_big2str_poweroftwo): Declared.
  (rb_big2str_generic): Ditto.

* ext/-test-/bignum/big2str.c: New file.

* test/-ext-/bignum/test_big2str.rb: New file.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42758 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-01 11:35:57 +00:00
akr 34004844cd * bignum.c (big2str_2bdigits): Renamed from big2str_orig.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42756 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-01 06:21:52 +00:00
akr 6fe40011a8 * bignum.c: Remove BITSPERDIG >= INT_MAX test. The static assertion,
SIZEOF_BDIGITS <= sizeof(BDIGIT) is enough.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42755 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-01 04:03:32 +00:00
akr c9b3571ceb * bignum.c (maxpow_in_bdigit): Removed.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42754 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-01 02:39:05 +00:00
akr 77f245e62e * numeric.c (rb_fix_bit_length): Moved from bignum.c.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42752 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-01 01:31:16 +00:00
akr a0a0b61b68 [DOC]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42751 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-01 01:00:15 +00:00
akr 7bb549d6b5 * internal.h (bit_length): Moved from bignum.c.
(nlz_int): Ditto.
  (nlz_long): Ditto.
  (nlz_long_long): Ditto.
  (nlz_int128): Ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42750 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-09-01 00:57:00 +00:00
akr 8bd7af6794 * bignum.c (bit_length): Renamed from bitsize.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42749 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-31 18:34:42 +00:00
akr 89744e75bd * bignum.c (rb_big_bit_length): New method.
(rb_fix_bit_length): Ditto.
  [ruby-core:56247] [Feature #8700]



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42746 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-31 15:09:20 +00:00
akr 83a0709174 * bignum.c: Use GMP to accelerate big Bignum multiplication.
(bary_mul_gmp): New function.
  (bary_mul): Use bary_mul_gmp.
  (bigsq): Use different threshold with GMP.

* configure.in: Detect GMP.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42743 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-31 12:17:18 +00:00
akr 5a0e4a5871 * bignum.c (BARY_SHORT_MUL): Renamed from BARY_MUL1.
(bary_short_mul): Renamed from bary_mul1.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42679 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-24 16:51:23 +00:00
akr 364237623b * bignum.c (rb_big2str1): Make an expression more explicit.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42603 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-18 01:07:50 +00:00
akr c106d19445 * bignum.c (rb_big2str1): Use power_level instead of bitsize(xn).
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42602 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-17 18:21:46 +00:00
akr 908e7312c4 * bignum.c (BIGDIVREM_EXTRA_WORDS): Redefine to 1.
(bigdivrem_num_extra_words): Removed.
  (bigdivrem_normal): Simplefied.
  (big2str_karatsuba): Ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42600 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-17 15:48:44 +00:00
akr dcd4832d69 * bignum.c (bigdivrem_single1): Renamed from bigdivrem_single. Add
x_higher_bdigit argument.
  (bigdivrem_single): Just call bigdivrem_single1.
  (bigdivrem_restoring): Use bigdivrem_single1 to avoid memmove.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42576 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-16 01:11:18 +00:00
akr 9f6c62ad5f * bignum.c (bary_small_rshift): Specify the higher BDIGIT instead of
sign bit.
  (big_shift3): Follow the above change.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42575 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-16 00:19:51 +00:00
akr d0b5d2016d * bignum.c (bary_mul_toom3): Reduce a branch.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42574 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-15 17:24:41 +00:00
akr 6df786c79f * bignum.c (bigdivrem_single): Use shift when y is a power of two.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42572 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-15 16:47:08 +00:00
akr 49e8387bae * bignum.c (bigdivrem_restoring): Use bigdivrem_single if non-topmost
BDIGITs of y are zero.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42571 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-15 16:16:08 +00:00
akr 7fc4142a02 * bignum.c (rb_big2str1): Truncate topmost zeros of x.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42570 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-15 15:36:00 +00:00
akr 02b6f663c5 * bignum.c (bary_divmod): Simplify an expression.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42569 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-15 15:03:35 +00:00
akr 942a3c9985 * bignum.c (bigdivrem_normal): Remove a local variable.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42567 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-15 15:01:38 +00:00
akr d94fc786a4 * bignum.c (big2str_karatsuba): Use bigdivrem_restoring directly to
reduce working buffer and memory copy.
  (rb_big2str1): Allocate working buffer for big2str_karatsuba here.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42566 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-15 14:25:19 +00:00
akr 38be07f833 * bignum.c (bigdivrem_restoring): xn argument removed.
(bigdivrem_normal): Follow the above change.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42548 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-13 15:54:27 +00:00
akr f069f26bc2 * bignum.c (big_div_struct): Remove xn and j field. Add zn field.
(bigdivrem1): Follow the above change.
  (bigdivrem_restoring): Ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42545 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-13 15:21:42 +00:00
akr 26e69a89fa * bignum.c (big_div_struct): ynzero field removed.
(bigdivrem1): Follow the above change.
  (bigdivrem_restoring): Ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42544 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-13 14:43:10 +00:00
akr adaa5650cd * bignum.c (bigdivrem_restoring): Extracted from bigdivrem_normal.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42543 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-13 14:03:55 +00:00
akr 06ed1c781a * bignum.c (bitsize): Fix a conditional expression.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42497 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-10 18:26:28 +00:00
akr 180d461a22 * bignum.c (big_div_struct): Use size_t.
(bigdivrem1): Ditto.
  (bigdivrem_num_extra_words): Ditto.
  (bigdivrem_single): Ditto.
  (bigdivrem_normal): Ditto.
  (bary_divmod): Ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42477 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-09 19:55:24 +00:00
nobu ca3b9bbfe0 bignum.c: suppress warning
* bignum.c (rb_big_mul_karatsuba): suppress logical-op-parentheses
  warning.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42470 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-09 13:41:23 +00:00
akr fe6273975e * bignum.c (rb_big_odd_p): Check the bignum length.
(rb_big_even_p): Ditto.



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@42424 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2013-08-07 11:08:03 +00:00