Yukihiro "Matz" Matsumoto
aebf75fed4
bigint.c (mrb_bint_as_int): change overflow message.
...
From "integer too big" to "integer out of range" because the integer can
be too small if it's negative.
2022-07-30 08:58:30 +09:00
Yukihiro "Matz" Matsumoto
89b0c7d7ab
complex.c (mrb_complex_to_i): return bigint if possible.
2022-07-30 08:44:15 +09:00
Yukihiro "Matz" Matsumoto
6da34fa735
numeric.c (int_div): add checks for division by zero.
2022-07-29 17:48:02 +09:00
Yukihiro "Matz" Matsumoto
387f383eeb
bigint.c (mrb_sizeinbase): cast to remove a signedness warning.
2022-07-29 10:26:04 +09:00
Yukihiro "Matz" Matsumoto
5df3f8221d
bigint.c (lzb): check x==0 before calling clz().
...
In theory, we should not call lzb() with 0, and we assume checks are
done before calling it. But we got a report that we call lzb(0) in some
use-case. We could not reproduce the issue, so we add this guard.
2022-07-29 10:24:41 +09:00
Yukihiro "Matz" Matsumoto
23cb2a73ff
bigint.c (mpz_move): reduce copying of digits arrays.
2022-07-29 10:24:41 +09:00
Yukihiro "Matz" Matsumoto
de2ea3c389
bigint.c (udiv): avoid integer underflow.
2022-07-28 15:07:22 +09:00
Yukihiro "Matz" Matsumoto
25a32ed681
bigint.c (ulshift,urshift): check uzero before actual shifting.
...
Bit-shifting zero always result in zero.
2022-07-26 15:06:06 +09:00
Yukihiro "Matz" Matsumoto
97b9bfc4fa
bigint.c (mpz_init_set_str): move negative trick to mrb_bint_new_str().
...
It used to take negative base to generate negative value. But this weird
trick is now belong to the mruby API side.
2022-07-26 15:03:52 +09:00
Yukihiro "Matz" Matsumoto
c2e4b82d84
codegen.c (new_litbint): remove surrounding braces.
...
It was to allow local variable declarations, but now we allow
declarations in the middle.
2022-07-26 13:55:54 +09:00
Yukihiro "Matz" Matsumoto
26ce85bd5d
bigint.c (ucmp): fixed error with zero length zero value.
...
Big integers have two kind of zero values:
- digits in `p` array are all zeros
- length `sn` is zero
The old code crashed with the latter zero.
2022-07-26 00:13:15 +09:00
Yukihiro "Matz" Matsumoto
e8ce82bf31
codegen.c (new_litbint): forgot else in a107b85.
2022-07-26 00:11:53 +09:00
Yukihiro "Matz" Matsumoto
c6bf4eaac0
codegen.c (new_litbint): renamed from new_litbn.
2022-07-25 15:33:43 +09:00
Yukihiro "Matz" Matsumoto
a107b850eb
codegen.c (new_bitbn): fixed wrong packing of integer radix.
2022-07-25 15:31:43 +09:00
Yukihiro "Matz" Matsumoto
d2d105b589
bigint.c (mpz_get_int): should work with zero (i.e. y->p == NULL).
2022-07-25 14:54:41 +09:00
Yukihiro "Matz" Matsumoto
6a4c8e36b5
bigint.c (udiv): should trim remainder before bit shifting.
2022-07-25 14:54:41 +09:00
Yukihiro "Matz" Matsumoto
e02e9ae434
bigint.c (mpz_mmod): should call mpz_clear() for internal mpz_t.
2022-07-25 14:54:41 +09:00
Yukihiro "Matz" Matsumoto
7d5475916c
bigint.c (udiv): avoid out of bound access in division.
2022-07-25 14:54:40 +09:00
Yukihiro "Matz" Matsumoto
657263446e
bigint.c: cosmetic changes (add spaces, etc.)
2022-07-25 14:54:40 +09:00
Yukihiro "Matz" Matsumoto
866ab88c94
mruby-os-memsize/memsize.c: add fall through comment.
2022-07-25 10:58:03 +09:00
Yukihiro "Matz" Matsumoto
199758c0b9
bigint.c (mpz_sizeinbase): should return size_t instead of int.
...
`int` may overflow.
2022-07-25 10:58:02 +09:00
Yukihiro "Matz" Matsumoto
e04184185a
bigint.c: heavy restructuring of big-integers.
...
Instead of splitting mp_limb by bit operations (using HIGH/LOW macros),
now we use mp_limb2 (which is bigger integer size, e.g uint64_t). It
makes operations (especially mulitiplication) a lot faster. As a side
effect, it also reduces memory consumption (16,452,033 -> 15,545,853 on
my Linux machine).
Other changes:
- trailing zeros are removed after operations.
- division algorithm is simplified.
2022-07-23 07:50:30 +09:00
Yukihiro "Matz" Matsumoto
c0a636c007
mruby-os-memsize/memsize.c: add up digit spaces for big-integers.
2022-07-21 20:56:32 +09:00
Yukihiro "Matz" Matsumoto
8bd1c56465
bigint.c (mpz_get_str): fixed wrong loop termination condition.
2022-07-21 20:40:35 +09:00
Yukihiro "Matz" Matsumoto
450382735b
bigint.c (mrb_bint_to_s): shortcut for bigint zero.
2022-07-20 14:40:45 +09:00
Yukihiro "Matz" Matsumoto
a4ce63abc5
bigint.c (mpz_sizeinbase): check zero length bigint.
2022-07-20 14:40:12 +09:00
Yukihiro "Matz" Matsumoto
cfea0c28a0
bigint.c (digits): check zero length bigint.
2022-07-20 14:39:05 +09:00
Yukihiro "Matz" Matsumoto
2b07489372
codegen.c: keep stack space for block argument.
2022-07-20 14:27:02 +09:00
Yukihiro "Matz" Matsumoto
b84bca666f
bigint.c (mpz_get_int): avoid buffer overflow.
2022-07-19 18:20:28 +09:00
Yukihiro "Matz" Matsumoto
714e8a57af
bigint.c: avoid default allocation.
...
The digit space would be allocated on demand.
2022-07-19 00:52:54 +09:00
Yukihiro "Matz" Matsumoto
04ec65b87a
mruby-numeric-ext/numeric.rb: add reference description.
...
- zero?
- nonzero?
- positive?
- negative?
2022-07-18 15:46:47 +09:00
Yukihiro "Matz" Matsumoto
56af812b98
mruby-numeric-ext/numeric.rb: bit predicates are implemented in Ruby now.
2022-07-18 12:59:10 +09:00
Yukihiro "Matz" Matsumoto
2d749f5275
mruby-compar-ext/compar.rb (clamp): update document; ref #5748
2022-07-17 18:53:55 +09:00
Yukihiro "Matz" Matsumoto
33bf027d79
mruby-compar-ext/compar.rb (clamp): support endless/beginless range.
...
Ref #5748
2022-07-17 18:52:59 +09:00
Yukihiro "Matz" Matsumoto
b1bfa1d5c8
mruby-compar-ext/compar.rb (clamp): should take ranges too; fix #5748
2022-07-17 07:49:34 +09:00
Yukihiro "Matz" Matsumoto
53f131d8f1
bigint.c: remove unnecessary break in for loop.
2022-07-16 12:26:08 +09:00
Yukihiro "Matz" Matsumoto
4f737b8afb
bigint.c: adjust integer types to remove warnings.
2022-07-15 18:37:45 +09:00
Yukihiro "Matz" Matsumoto
275684cf07
bigint.c: update header commend description.
2022-07-15 18:36:47 +09:00
Yukihiro "Matz" Matsumoto
30f6ad314d
bigint.c (mpz_get_str): stringify multiple digits at once.
...
Instead of dividing by 10, 10000 (32 bit) or 100000000 (64 bit), for
example (Karatsuba method?).
2022-07-15 13:45:17 +09:00
Yukihiro "Matz" Matsumoto
d9e0f3328b
bigint.c (mpz_get_str): avoid bigint division for performance.
2022-07-15 13:45:17 +09:00
Yukihiro "Matz" Matsumoto
f1f8221bf3
Merge pull request #5747 from dearblue/errno-summary
...
Added summary for `mrbgems/mruby-errno`
2022-07-15 13:45:09 +09:00
Yukihiro "Matz" Matsumoto
1d8f4bc775
Merge pull request #5746 from dearblue/cleanup-errno
...
Delete unnecessary files in `mrbgems/mruby-errno`
2022-07-15 13:44:35 +09:00
dearblue
bd98b71668
Added summary for mrbgems/mruby-errno
2022-07-14 21:55:15 +09:00
dearblue
a74b0fb62b
Delete unnecessary files in mrbgems/mruby-errno
...
This is because it has been integrated into the mruby repository.
2022-07-14 21:53:03 +09:00
dearblue
66b72430e6
Allow negative errno to be handled as well
2022-07-14 21:49:44 +09:00
Yukihiro "Matz" Matsumoto
7733f6b246
Merge pull request #5743 from dearblue/dummy-errno
...
Define `Errno::EXXX` when needed
2022-07-12 18:16:28 +09:00
Yukihiro "Matz" Matsumoto
bae11ef689
complex.c (mrb_complex_copy): allow copying of complex numbers.
2022-07-11 11:25:31 +09:00
Yukihiro "Matz" Matsumoto
67f47c9b42
rational.c (mrb_rational_copy): allow copying of rational numbers.
2022-07-11 11:19:22 +09:00
Yukihiro "Matz" Matsumoto
3ebb55b75f
bigint.c (mrb_bint_copy): allow dup operation for bigints.
2022-07-11 11:02:27 +09:00
Yukihiro "Matz" Matsumoto
95610a292b
bigint.c (lzb): use __builtin_clz() if available.
2022-07-11 08:01:52 +09:00