Yukihiro "Matz" Matsumoto
89830296eb
numeric.c (int_round): n may not be a bigint
...
`mrb_bint_add()` expects its first operand to be a bigint.
2022-12-24 19:20:37 +09:00
John Bampton
8208a836ff
Fix spelling: floating point -> floating-point
...
https://en.wikipedia.org/wiki/Floating-point_arithmetic
2022-10-27 00:09:12 +10:00
Yukihiro "Matz" Matsumoto
268f6dcab3
numeric.c (mrb_float_to_integer): isinf/isnan takes any float values.
...
So don't need to cast to `float`, just use `mrb_float`.
2022-10-04 11:05:15 +09:00
Yukihiro "Matz" Matsumoto
d9061bd969
numeric.c: update documents [ci skip].
2022-09-23 22:13:28 +09:00
Yukihiro "Matz" Matsumoto
b891c63ae1
numeric.c: calculate correct rounding for bigger numbers.
2022-08-12 12:31:38 +09:00
Yukihiro "Matz" Matsumoto
1a95da4ac2
numeric.c (mrb_cmp): inline big-integer comparison.
2022-08-12 12:24:04 +09:00
Yukihiro "Matz" Matsumoto
d14fd77148
numeric.c (mrb_int_pow): make the function to take 2 operands.
2022-08-12 12:19:21 +09:00
Yukihiro "Matz" Matsumoto
8cdf14c06b
numeric.c (int_rounding): unify code duplication.
2022-08-10 13:38:24 +09:00
Yukihiro "Matz" Matsumoto
4e735eb8ba
numeric.c (flo_rounding): refactor float rounding methods.
2022-08-10 13:38:24 +09:00
Yukihiro "Matz" Matsumoto
7ffdb4c30e
numeric.c: implement ndigits truncation for rounding methods.
...
- ceil
- floor
- round
- truncate
2022-08-10 13:38:23 +09:00
Yukihiro "Matz" Matsumoto
abec98c681
numeric.c: implement ceil, floor, round, truncate methods in C.
...
- ISO 15.2.8.3.14 Integer#ceil
- ISO 15.2.8.3.17 Integer#floor
- ISO 15.2.8.3.20 Integer#round
- ISO 15.2.8.3.26 Integer#truncate
2022-08-10 13:38:23 +09:00
Yukihiro "Matz" Matsumoto
78a3200fa5
etc.c (mrb_obj_id): separate object_id and hash values.
...
It's OK for hash values to conflict. But object_id is not (in theory).
2022-08-08 23:00:13 +09:00
Yukihiro "Matz" Matsumoto
585d80e0a7
numeric.c (num_eql): move eql? definition to Numeric class.
...
We no longer need Float#eql? etc.
2022-08-01 16:20:35 +09:00
Yukihiro "Matz" Matsumoto
b77b8f4deb
numeric.c (flo_ceil_floor): negate after converting integer to float.
...
Otherwise integer negate may overflow.
2022-07-30 09:08:42 +09:00
Yukihiro "Matz" Matsumoto
9d774bc011
numeric.c (flo_ceil_floor): return bigint if possible.
2022-07-30 09:08:02 +09:00
Yukihiro "Matz" Matsumoto
eb392cb643
numeric.c (mrb_float_to_integer): check for RangeError.
...
Otherwise flo_to_i raises FloatDomainError instead.
2022-07-30 09:06:49 +09:00
Yukihiro "Matz" Matsumoto
e4bcd8a96a
numeric.c (mrb_float_to_integer): unify with flo_to_i().
2022-07-30 09:05:21 +09:00
Yukihiro "Matz" Matsumoto
5af98f2088
numeric.c (flo_ceil_floor): add exact number check.
2022-07-30 09:01:24 +09:00
Yukihiro "Matz" Matsumoto
b8d3bc0eae
numeric.c: move FloatDomainError description to the sufficient place.
2022-07-30 08:46:06 +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
0e530dbb63
numeric.c: fix smallint op bigint error in bitwise logical operators.
2022-07-18 08:29:52 +09:00
Yukihiro "Matz" Matsumoto
37c2f080f0
numeric.c (int_to_s): should not bypass base range check.
2022-07-12 14:48:36 +09:00
Yukihiro "Matz" Matsumoto
48b43af37f
numeric.c (mrb_div_int_value): should support integer overflow.
...
Especially in `MRB_INT_MIN/-1` which is bigger than MRB_INT_MAX.
2022-07-09 15:21:45 +09:00
Yukihiro "Matz" Matsumoto
fa0ff7cf86
numeric.c: better error message (Float -> Integer).
2022-07-09 15:13:52 +09:00
Yukihiro "Matz" Matsumoto
7de03cbb68
numeric.c: add mrb_noreturn qualifier to error functions.
...
- mrb_int_zerodiv()
- mrb_int_overflow()
2022-07-09 15:12:37 +09:00
Yukihiro "Matz" Matsumoto
e1980d7596
numeric.c (mrb_div_int): separate the function in two.
...
- mrb_div_int() does integer division in Ruby way (mdiv)
returns mrb_int
- mrb_div_int_value() division with zero div and overflow checks.
returns mrb_value
2022-07-09 14:38:18 +09:00
Yukihiro "Matz" Matsumoto
a2f0fd81e6
numeric.c (mrb_int_mul): fix error message (Float -> Integer).
2022-07-09 10:45:44 +09:00
Yukihiro "Matz" Matsumoto
8d34981530
numeric.c: avoid mathematical operations for simple cases.
2022-07-09 10:45:11 +09:00
Yukihiro "Matz" Matsumoto
960021e519
numeric.c (cmpnum): call mrb_bigint_cmp() if v1 is bigint, not v2.
2022-07-08 21:57:05 +09:00
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