Yukihiro "Matz" Matsumoto
39c8c051f8
numeric.c: mrb_integer_to_str now supports big integers.
2022-04-25 10:03:47 +09:00
Yukihiro "Matz" Matsumoto
df09838503
numeric.c: mrb_float_to_integer can return a big integer.
2022-04-25 10:02:54 +09:00
Yukihiro "Matz" Matsumoto
0f4769536b
src/numeric.c: use mrb_ensure_float_type().
...
Instead of obsolete `mrb_to_float()` or the combination of
`mrb_float_value(mrb_as_float())`.
2022-04-25 07:29:55 +09:00
Yukihiro "Matz" Matsumoto
56a35131a4
numeric.c (mrb_cmp): should not raise NoMethodError.
...
Even when `obj1` does not have `<=>` method.
2022-04-24 14:02:00 +09:00
Yukihiro "Matz" Matsumoto
9dd45df804
numeric.c (int_pow): should not overflow.
2022-04-21 11:35:52 +09:00
Yukihiro "Matz" Matsumoto
b38a766427
numeric.c (flo_to_i): use bigint if the value is bigger than mrb_int.
2022-04-18 12:31:15 +09:00
Yukihiro "Matz" Matsumoto
c0ef940c90
numeric.c: add boundary checks in Float#to_f.
...
- check_num_exact() before rounding the float value
- check integer (mrb_int) overflow.
2022-04-17 09:32:04 +09:00
Yukihiro "Matz" Matsumoto
dcaf4083d5
src/bigint.c: implement multi-precision integer.
...
To enable multi-precision integer support, you need to link
`mruby-bigint` mrbgem. The gem itself is empty but it turns on
the "bigint" support.
2022-04-09 17:16:10 +09:00
Yukihiro "Matz" Matsumoto
5a27b69aa6
numeric.c: remove duplicated code in int_divmod.
2022-04-06 17:04:40 +09:00
Yukihiro "Matz" Matsumoto
5bef8e4135
numeric.c: the result of -5.div(2) should be -3 as CRuby does.
2022-04-06 17:04:40 +09:00
Yukihiro "Matz" Matsumoto
b99c389ec3
internal.h: aggregate internal functions.
...
Internal functions can only be called from within the library.
Functions listed in `mruby/internal.h` can be called from:
* core (src/*.c)
* gems (mrbgems/**/*.c)
But not from the application linked with `libmruby`.
2022-04-02 18:25:13 +09:00
Yukihiro "Matz" Matsumoto
74597c6159
numeric.c: fix compile errors with MRB_NO_FLOAT; fix #5672
2022-03-20 19:04:00 +09:00
Yukihiro "Matz" Matsumoto
4f869f3367
numeric.c: enhance float division to support Complex.
2022-03-18 14:23:17 +09:00
Yukihiro "Matz" Matsumoto
fe03e01078
numeric.c: enhance integer division to support Rational and Complex.
...
No longer need to override division methods in mrbgems.
2022-03-18 12:27:46 +09:00
Yukihiro "Matz" Matsumoto
4dcdf78f8a
numeric_ext.c: add Integer#pow() method.
...
Which takes optional second argument of modulo.
2022-03-17 23:25:50 +09:00
Yukihiro "Matz" Matsumoto
6aa5d53867
numeric.c: avoid mrb_float with MRB_NO_FLOAT; fix #5671
...
`MRB_USE_COMPLEX` is exclusive with `MRB_NO_FLOAT`, so we only need to
check the former.
2022-03-15 19:07:28 +09:00
Yukihiro "Matz" Matsumoto
7659b3b271
numeric.c: avoid mrb_funcall; call functions directly.
...
When you try to call functions defined in mrbgems, you need to add the
names of functions to `mrbc.c`, since `mrbc` does not link any mrbgem
regardless of the configuration.
2022-03-12 13:31:38 +09:00
Yukihiro "Matz" Matsumoto
a20064bcb7
numops.c: separate API functions not used from mruby.
...
* mrb_num_plus()
* mrb_num_minus()
* mrb_num_mul()
2022-03-12 10:53:59 +09:00
Yukihiro "Matz" Matsumoto
5636e6ab54
numeric.c: rename and expose integer arithmetic functions.
...
* mrb_int_add()
* mrb_int_sub()
* mrb_int_mul()
2022-03-12 08:44:04 +09:00
Yukihiro "Matz" Matsumoto
9037e447a5
numeric.c: avoid implicit cast from integer to double.
2022-02-08 13:11:44 +09:00
Yukihiro "Matz" Matsumoto
b9e1b9b328
numeric.c: merge mrb_as_float implementation to mrb_ensure_float_type.
...
Since they are basically duplicated functionality. `mrb_as_float` is now
a macro defined using `mrb_ensure_float_type`; #5620
2021-12-31 15:14:37 +09:00
Yukihiro "Matz" Matsumoto
7f40b645d2
numeric.c: mrb_as_float should not call to_f for generic objects.
...
It should only call `to_f` for Rational and Complex numbers.
Ref #5540 #5613 #5620
2021-12-31 10:54:28 +09:00
Yukihiro "Matz" Matsumoto
fc1f7c4bf0
numeric.c: shortcut overflowing operation when ndigit is too small.
2021-09-06 10:21:42 +09:00
Yukihiro "Matz" Matsumoto
6f46f88873
numeric.c: fix: -0.0.abs returned -0.0.
2021-08-23 10:53:23 +09:00
dearblue
5a57602860
Organize the include of header files
...
- `#include <math.h>` is done in `mruby.h`.
Eliminate the need to worry about the `MRB_NO_FLOAT` macro.
- Include mruby header files before standard header files.
If the standard header file is already placed before `mruby.h`, the standard header file added in the future tends to be placed before `mruby.h`.
This change should some reduce the chances of macros that must be defined becoming undefined in C++ or including problematic header files in a particular mruby build configuration.
2021-08-21 15:42:57 +09:00
Yukihiro "Matz" Matsumoto
ff2da0b66e
numeric.c: fix a bug regarding MRB_INT_MIN.
2021-08-06 11:15:46 +09:00
Yukihiro "Matz" Matsumoto
9f37733382
numeric.c: fix a bug in left shift of negative integer.
...
`-1 * (1<<63)` causes overflow, but `-1<<63` is a valid value.
2021-08-04 12:05:09 +09:00
Yukihiro "Matz" Matsumoto
9b3b2a4c95
numeric.c: check zero division before modulo.
2021-08-03 16:45:08 +09:00
Yukihiro "Matz" Matsumoto
b70fd09f47
Revert "numeric.c: simplifies int_mod definition."
...
This reverts commit 3738d62a86 .
The change changed the behavior with floating point numbers.
2021-08-03 16:11:02 +09:00
Yukihiro "Matz" Matsumoto
3738d62a86
numeric.c: simplifies int_mod definition.
2021-08-03 13:14:23 +09:00
Yukihiro "Matz" Matsumoto
b9d2b47f16
Replace mrb_fixnum_value() with mrb_int_value().
...
Use `mrb_fixnum_value()` only when you are absolutely sure that the
value is within `Fixnum` range, i.e. 31 bits signed integer at least.
2021-08-03 13:00:11 +09:00
Yukihiro "Matz" Matsumoto
23e7cb41e5
Replace fixnum references with int.
...
The `Fixnum` class is no longer provided by `mruby`.
2021-08-03 13:00:10 +09:00
Yukihiro "Matz" Matsumoto
1f0238a928
numeric.c: rename fixdivmod to intdivmod.
2021-08-03 07:30:59 +09:00
Yukihiro "Matz" Matsumoto
81d56477f2
numeric.c: simpler integer modulo calculation.
2021-08-02 16:47:50 +09:00
Yukihiro "Matz" Matsumoto
6ea0c04c06
numeric.c: use C's modulo operator if both operands are positive.
2021-08-02 14:09:38 +09:00
Yukihiro "Matz" Matsumoto
a9d721ea8f
numeric.c: refactor integer bit shift operations.
2021-08-02 08:53:14 +09:00
Yukihiro "Matz" Matsumoto
5c804cf68f
Remove redundant include headers.
...
- stdlib.h
- stddef.h
- stdint.h
- stdarg.h
- limits.h
- float.h
2021-07-25 13:07:10 +09:00
Yukihiro "Matz" Matsumoto
ce2d7c2e01
numeric.c: self should always be an integer in __coerce_step_counter.
2021-07-10 17:04:57 +09:00
Yukihiro "Matz" Matsumoto
be6d559853
Update internal methods not to be listed in backtraces.
...
- String#__lines
- Array#__ary_eq
- Array#__ary_cmp
- Hash#__delete
- Kernel#__case_eqq
- Integer#__coerce_step_counter
2021-07-10 14:15:43 +09:00
Yukihiro "Matz" Matsumoto
8416e706ba
numeric.c: add optional ndigits argument to rounding methods.
...
- `truncate`
- `floor`
- `ceil`
`round` already takes `ndigits`.
2021-06-21 10:24:55 +09:00
Yukihiro "Matz" Matsumoto
7c8a91ff5a
numeric.c: restore fmt argument for backward compatibility.
...
`mrb_float_to_str()` used to take `fmt` argument. We thought no one used
the function, and OK to remove the argument. But at least `mruby-redis`
gem used the function.
2021-06-15 16:19:16 +09:00
Yukihiro "Matz" Matsumoto
cf2e78de44
numeric.c: fixed a silly bug related to pointer decrement.
2021-05-31 02:59:33 +09:00
Yukihiro "Matz" Matsumoto
8a4bcc58c9
numeric.c: introduce mrb_int_to_cstr() to dump mrb_int.
...
* refactor `mrb_integer_to_str()`
* refactor `mrb_str_format()`
2021-05-30 08:15:51 +09:00
Yukihiro "Matz" Matsumoto
c019d8d34d
fmt_fp.c: move mruby specific mrb_float_to_str to numeric.c
2021-05-26 17:29:18 +09:00
Yukihiro "Matz" Matsumoto
fa29bb3bb4
fmt_fp.c: remove fmt argument from mrb_float_to_str().
...
With major refactoring to prepare removing `snprintf(3) calls.
2021-05-21 08:13:38 +09:00
Yukihiro "Matz" Matsumoto
5eebbd7df2
Global renaming regarding integer and float.
...
Consistent number conversion function names:
* `mrb_value` to immediate (C) value
* `mrb_int()` -> `mrb_as_int()`
* `mrb_to_flo()` -> `mrb_as_float()`
* `mrb_value` to `mrb_value` (converted)
* `mrb_to_int()'
* `mrb_Integer()` - removed
* `mrb_Float()` -> `mrb_to_float`
Consistent function name (avoid `_flo` suffix):
* `mrb_div_flo()` -> `mrb_div_float`
2021-05-17 15:07:05 +09:00
Yukihiro "Matz" Matsumoto
ea7f1953c3
Rename mrb_fixnum_to_str to mrb_integer_to_str.
2021-05-17 13:59:01 +09:00
Yukihiro "Matz" Matsumoto
080fdbf9e8
Rename mrb_flo_to_fixnum to mrb_float_to_integer.
2021-05-17 13:58:54 +09:00
Yukihiro "Matz" Matsumoto
f46b4056f8
numeric.c: remove duplicated definitions; #5421
...
Following functions are defined in `mrblib/numeric.c`:
- `Integer#ceil`
- `Integer#floor`
- `Integer#round`
- `Integer#truncate`
2021-04-24 11:56:50 +09:00
Yukihiro "Matz" Matsumoto
90a59efbec
numeric.c: fix errors from MRB_NO_FLOAT; close #5421
2021-04-24 10:23:40 +09:00