dearblue
de494796ac
Fixed typo
2024-11-20 21:14:55 +09:00
Yukihiro "Matz" Matsumoto
dc5566e560
mruby-bigint (int_fit_limb_p): fix the logic to check mrb_int size
...
`int_fit_limb_p()` checks if `mrb_int` fits in `mp_limb`. Previous logic
did not work well with negative integers.
2024-11-20 11:27:54 +09:00
Yukihiro "Matz" Matsumoto
fed631c21b
mruby-bigint (mrb_bint_sub_n): avoid allocating mpz_z
2024-11-05 13:03:54 +09:00
Yukihiro "Matz" Matsumoto
6085ffb968
mruby-bigint (mrb_bint_add_n): avoid allocating mpz_z
2024-11-05 12:22:10 +09:00
Yukihiro "Matz" Matsumoto
ef18bd86a6
mruby-bigint (mpz_sub_int): avoid allocating mpz_t for mrb_int
2024-11-05 11:52:22 +09:00
Yukihiro "Matz" Matsumoto
fe12e840f3
mruby-bigint (mpz_add_int): move the function definition
...
To prepare `mpz_sub_int` update.
2024-11-05 11:52:22 +09:00
Yukihiro "Matz" Matsumoto
19d3620965
mruby-bigint (mrb_bint_powm): stop a warning for no return
2024-10-31 14:06:10 +09:00
Yukihiro "Matz" Matsumoto
f245943aed
mruby-bigint (mrb_bint_powm): fixed bugs in type casting
2024-10-24 07:21:12 +09:00
Yukihiro "Matz" Matsumoto
0b96f7f2f7
mruby-bigint (mrb_bint_to_s): add uzero_p() check
2024-10-24 07:20:24 +09:00
Yukihiro "Matz" Matsumoto
c5565a37ac
mruby-bigint: add checks for divided by zero by sizes and contents
2024-10-24 07:18:34 +09:00
Yukihiro "Matz" Matsumoto
5e9593e285
mruby-bigint (udiv): add assertion for divided by zero
2024-10-24 07:16:32 +09:00
Yukihiro "Matz" Matsumoto
11cff8fa7d
mruby-bigint (mpz_init_set_str): should skip + in the string
...
When the string starts with `+` it should not cause error silently. It
might cause serious error afterwards.
2024-10-22 14:44:51 +09:00
Yukihiro "Matz" Matsumoto
f3257c448b
mruby-bigint (mrb_bint_powm): should call mpz_clear() on exceptions
2024-10-19 13:09:03 +09:00
Yukihiro "Matz" Matsumoto
e4d2f343fe
mruby-bigint (mrb_bint_neg): move the function to group bit operations
2024-10-19 12:47:06 +09:00
Yukihiro "Matz" Matsumoto
ee13b9e67b
mruby-bigint: fix mrb_int optimization bugs for and, or, xor
...
If the operand is a small integer, those functions tried to reduce
bigint allocations, but we had some bugs in them. We removed those
imperfect optimization altogether.
2024-10-19 12:45:04 +09:00
Yukihiro "Matz" Matsumoto
2430eaba13
mruby-bigint (mrb_bint_powm): fixed memory leak
2024-10-19 07:32:06 +09:00
Yukihiro "Matz" Matsumoto
001d5fcc3f
mruby-bigint (mpz_get_str): get b2 by table lookup
...
The `b2` is the power of `base` no bigger than DIG_BASE.
2024-10-19 07:32:05 +09:00
Yukihiro "Matz" Matsumoto
4aa87acfc9
mruby-bigint (mpz_set_uint64): adjust reallocation size for uint64
...
The uint64_t value may fit in `mp_limb*n` where n is 1..4.
2024-10-19 07:32:05 +09:00
Yukihiro "Matz" Matsumoto
5e6d382782
mruby-bigint (mpz_set_uint64): fixed a bug in for loop
...
Found double increments in a loop. Since no one called mpz_set_int64()
in the real code, we could not find this bug for long time.
2024-10-18 12:27:02 +09:00
Yukihiro "Matz" Matsumoto
fe42f1d047
mruby-bigint (mpz_set_int): simplify using early return
2024-10-18 12:27:02 +09:00
Yukihiro "Matz" Matsumoto
a5c0b2114a
mruby-bigint (mrb_bint_2comp): need to initialize mpz_t
2024-10-18 12:27:02 +09:00
Yukihiro "Matz" Matsumoto
f1863163a8
mruby-bigint (uzero_p): avoid signed and unsigned comparison in loop
2024-10-16 16:33:43 +09:00
Yukihiro "Matz" Matsumoto
b5801cd730
mruby-bigint (mrb_bint_new_int64): fixed a bug on the 32bit platforms
2024-10-11 14:19:33 +09:00
Yukihiro "Matz" Matsumoto
f4fdf25bb0
mruby-bigint (mrb_bint_new_int64): wrong return value
2024-10-11 08:41:51 +09:00
John Bampton
6f97cf10e9
docs: fix grammar
2024-10-11 04:07:58 +10:00
Yukihiro "Matz" Matsumoto
6d4de2496c
mruby-bigint: remove unused macros; ref #6371
2024-10-10 23:14:27 +09:00
Yukihiro "Matz" Matsumoto
e21055604c
mruby-bigint: separate mpz and bint functions; ref #6371
...
The pull-request #6371 was tight integration of mpz and bint functions.
The mpz functions take `struct RBigint*` instead of `mpz_t*`. It
decrease maintainability, in my opinion. This commit initializes `mpz_t`
from `struct RBigint*` in bint functions, so that we can keep separation
of function roles.
2024-10-10 23:04:04 +09:00
Yukihiro "Matz" Matsumoto
12b97ceb78
fixup! Merge branch 'bigint-embed' of https://github.com/dearblue/mruby into bigint-embed
2024-10-10 22:57:32 +09:00
Yukihiro "Matz" Matsumoto
bda2fa39d2
Merge branch 'bigint-embed' of https://github.com/dearblue/mruby into bigint-embed
2024-10-10 22:31:55 +09:00
Yukihiro "Matz" Matsumoto
b56ad8fdee
mruby-bigint: improve mpz_mul_int() and mpz_add_int()
...
Both functions are only called from mpz_init_set_str(). We can assume
- mpz_t is modifiable
- mpz_t is positive
- n is positive and small (n <= 36)
Those new definitions consume less memory and are slightly faster.
2024-10-08 16:09:46 +09:00
Yukihiro "Matz" Matsumoto
3b06ad4737
mruby-bigint (mpz_mul): cancel Karatsuba algorithm
...
We tried many times to implement the Karatsuba method to improve the
performance of multiplication of large multi-precision integers. But it
did not speed up in all cases due to the cost of memory allocation. We
decided to go back to the basic multiplication method.
If anyone wants to take on the challenge of improving the performance of
multiplication, we welcome it.
2024-10-08 16:02:19 +09:00
Yukihiro "Matz" Matsumoto
77fb1b1b65
mruby-bigint (mul_karatsuba): use byte-wise addition to combine
2024-10-07 07:28:24 +09:00
dearblue
6366f1cbb9
Update mrbgems/mruby-bigint/core/bigint.h
...
Co-authored-by: John Bampton <jbampton@users.noreply.github.com >
2024-10-06 23:03:03 +09:00
dearblue
009a79b5c9
Embedding in RBigint objects
...
Integers up to 3 words long will no longer allocate heap space.
2024-10-06 22:28:22 +09:00
Yukihiro "Matz" Matsumoto
40c7febca8
mruby-bigint (uadd): remove redundant trim()
2024-10-05 15:08:16 +09:00
Yukihiro "Matz" Matsumoto
be9da7199b
mruby-bigint (mul_karatsuba) improve performance
...
Unnecessary mpz_t u0u1 and v0v1 are removed.
2024-10-05 10:57:42 +09:00
Yukihiro "Matz" Matsumoto
32aed6ad8c
mruby-bigint: increase KARATSUBA_THREASHOLD to 512
...
Since Karatsuba algorithm is far heavier than the basic multiplication,
we have increased KARATSUBA_THREASHOLD and decreased MAX_RECURSION_DEPTH.
2024-10-04 18:10:14 +09:00
Yukihiro "Matz" Matsumoto
6820da1526
mruby-bigint (mpz_abs): use zero_p()
2024-10-04 18:10:14 +09:00
Yukihiro "Matz" Matsumoto
fd8d3a8d70
mruby-bigint: use zero() to make mpz_t zero.
2024-10-04 18:10:14 +09:00
Yukihiro "Matz" Matsumoto
6274f8de43
mruby-bigint (mpz_sub): avoid data copy
...
Since mpz_sub() calls mpz_add() with opposite sign, refer same data from
the original, instead of copying whole data.
2024-10-04 18:10:14 +09:00
Yukihiro "Matz" Matsumoto
363754b5d1
mruby-bigint (uzero_p): check from the top, not bottom
...
For most of the case, the first non-zero value would be found earlier
when search starts from the top.
2024-10-04 18:10:14 +09:00
Yukihiro "Matz" Matsumoto
fcc1832efc
mruby-bigint (mul_karatsuba): avoid copying operand u and v
2024-09-30 18:32:26 +09:00
Yukihiro "Matz" Matsumoto
0023cbdb3d
mruby-bigint (mpz_mul): use Karatsuba algorithm to improve performance
2024-09-28 05:26:40 +09:00
Yukihiro "Matz" Matsumoto
f6caf0d788
mruby-bigint (mrb_init_set_str): reduce mpz_t allocations
2024-09-19 20:52:11 +09:00
Yukihiro "Matz" Matsumoto
bdbf8536a7
mruby-bigint: rename add_d and sub_d to add_n and sub_n respectively
...
`_n` suffix represents `no_normalize`.
2024-09-15 03:02:41 +09:00
Yukihiro "Matz" Matsumoto
44908e5cba
mruby-rational: support bigint numerators & denominators
2024-08-16 15:12:03 +09:00
Yukihiro "Matz" Matsumoto
92f476d8fa
mruby-bigint (mpz_set): trim destination mpz_t
2024-08-16 07:32:05 +09:00
Yukihiro "Matz" Matsumoto
e9c4486e27
mruby-bigint: add fast path to mrb_bint_mul() & mrb_bint_div()
2024-08-14 22:36:47 +09:00
Yukihiro "Matz" Matsumoto
6e5a493ff3
mruby-bigint (mrb_bint_new_float): add fast path for FIXABLE_FLOAT
2024-08-14 16:11:27 +09:00
Yukihiro "Matz" Matsumoto
6da2e60edc
mruby-bigint (mpz_get_str): avoid malloc when base is a power of 2
2024-08-05 10:43:47 +09:00