Commit graph

391 commits

Author SHA1 Message Date
Olle Jonsson
03507498b6
[ruby/bigdecimal] VpCheckException: improve grammar
I added a space before the parenthesis, too.

159af10b17
2021-12-24 02:28:47 +09:00
Nobuyoshi Nakada
1dfe75b0be
Fixed 'maybe_unused' attribute
```
../../../src/ext/bigdecimal/bigdecimal.c:303:5: error: 'maybe_unused' attribute cannot be applied to types
    ENTER(1);
    ^
```
2021-07-06 01:13:54 +09:00
Kenta Murata
4e2e1d6093
[ruby/bigdecimal] Fix uint64 conversion
Stop using logarithm to compute the number of components.
Instead, use the theoretical maximum number of components for buffer,
and count up the actual number of components during conversion.

9067b353ac
2021-02-04 13:18:58 +09:00
Kenta Murata
868d66e0b5
[ruby/bigdecimal] Stop using rmpd and RMPD prefixes and DBLE_FIG
7479923fdb
2021-02-04 13:18:52 +09:00
Kenta Murata
8df1881c8f [ruby/bigdecimal] Fix the maximum length of float number
This change is for preventing the false-positive alert by CoverityScan.
See CID-1471770 for the detail.

4d5b97125b
2021-02-03 18:25:03 +09:00
Kenta Murata
a1bb110b56 [ruby/bigdecimal] [Doc] Fix the comment of BigDecimal_div2 [ci skip]
a109d0984f
2021-01-22 14:07:32 +09:00
Kenta Murata
887a1bfbbc [ruby/bigdecimal] Stop using GetVpValue in rb_big_convert_to_BigDecimal
034fd2b25e
2021-01-22 13:59:04 +09:00
Kenta Murata
b130644584 [ruby/bigdecimal] Fix for the coerce cases in divide and DoDivmod
1cb92487f7
2021-01-16 00:09:26 +09:00
Kenta Murata
9d0c5e2754 [ruby/bigdecimal] Use pre-allocated special values in BigDecimal_DoDivmod
d2746121cf
2021-01-16 00:08:09 +09:00
Kenta Murata
f95f85b215 [ruby/bigdecimal] Use new conversion functions in BigDecimal_DoDivmod
68c20200d5
2021-01-16 00:07:48 +09:00
Kenta Murata
0a039c5fbb [ruby/bigdecimal] Use new conversion functions in BigDecimal_divide
3b55ad1c42
2021-01-15 06:42:48 +09:00
Kenta Murata
500fc63cd0 [ruby/bigdecimal] Reorder the arguments of BigDecimal_divide
1e03da7076
2021-01-15 06:42:38 +09:00
Kenta Murata
4d13f3e9da [ruby/bigdecimal] Explicitly cast size_t to int
b1f1ed26c9
2021-01-14 10:21:10 +09:00
Kenta Murata
b4ade73974
[ruby/bigdecimal] Explicitly cast uint64_t to double
f0d94e6843
2021-01-14 10:20:47 +09:00
Kenta Murata
a5b4b806de
[ruby/bigdecimal] Allow digits=0 in BigDecimal(flt) and Float#to_d
Using dtoa of mode=0, we can determine the number of digits in decimal that is
necessary to represent the given Float number without errors.

This change permits digits=0 in BigDecimal(flt) and Float#to_d, and these
methods use dtoa of mode=0 when the given digits is 0.

Internal implicit conversion from Float also uses digits=0.

[Fix GH-70]

2dbe170e35
2021-01-13 11:49:18 +09:00
Kenta Murata
4ba3a4491e
[ruby/bigdecimal] Optimize rb_float_convert_to_BigDecimal by using dtoa
This improve the conversion speed several times faster than before.

```
RUBYLIB= BUNDLER_ORIG_RUBYLIB= /home/mrkn/.rbenv/versions/3.0.0/bin/ruby -v -S benchmark-driver /home/mrkn/src/github.com/ruby/bigdecimal/benchmark/from_float.yml
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]
Calculating -------------------------------------
                     bigdecimal 3.0.0      master
              flt_e0         156.400k    783.356k i/s -    100.000k times in 0.639388s 0.127656s
            flt_ep10         158.640k    777.978k i/s -    100.000k times in 0.630359s 0.128538s
           flt_ep100         101.676k    504.259k i/s -    100.000k times in 0.983512s 0.198311s
            flt_em10         103.439k    726.339k i/s -    100.000k times in 0.966751s 0.137677s
           flt_em100          79.675k    651.446k i/s -    100.000k times in 1.255095s 0.153505s

Comparison:
                           flt_e0
              master:    783355.6 i/s
    bigdecimal 3.0.0:    156399.5 i/s - 5.01x  slower

                         flt_ep10
              master:    777977.6 i/s
    bigdecimal 3.0.0:    158639.7 i/s - 4.90x  slower

                        flt_ep100
              master:    504259.4 i/s
    bigdecimal 3.0.0:    101676.5 i/s - 4.96x  slower

                         flt_em10
              master:    726338.6 i/s
    bigdecimal 3.0.0:    103439.2 i/s - 7.02x  slower

                        flt_em100
              master:    651446.3 i/s
    bigdecimal 3.0.0:     79675.3 i/s - 8.18x  slower

```

5bdaedd530
9bfff57f90
d071a0abbb
2021-01-13 02:11:18 +09:00
Kenta Murata
2175c2c957 [ruby/bigdecimal] Use pre-allocated objects for special values
95c201f2d3
2021-01-13 01:58:23 +09:00
Kenta Murata
6670de82c2
[ruby/bigdecimal] Fix exception message raised in Kernel.BigDecimal
d163f170a4
ff8eeeb064
2021-01-13 01:27:04 +09:00
Kenta Murata
ccabf4966f [ruby/bigdecimal] Fix length calculation in rb_uint64_convert_to_BigDecimal
14e53ed7f6
2021-01-12 17:38:43 +09:00
Kenta Murata
1d04faee23 [ruby/bigdecimal] Use rb_cstr_convert_to_BigDecimal in GetVpValueWithPrec
381ddf5ff6
2021-01-12 09:22:14 +09:00
Kenta Murata
78d3813c74 [ruby/bigdecimal] Add rb_cstr_convert_to_BigDecimal
ac230a996e
2021-01-12 09:21:58 +09:00
Kenta Murata
2e9b6096a6 [ruby/bigdecimal] Fix type name
2dad4d17b2
2021-01-10 08:40:05 +09:00
Kenta Murata
8b53cbaf5e
[ruby/bigdecimal] Avoid casting negative value to size_t
https://github.com/ruby/bigdecimal/f047b2786f
2021-01-10 08:36:29 +09:00
Kenta Murata
72d504c1fd
[ruby/bigdecimal] Use smallest local variable scope in GetVpValueWithPrec
44f26b9aa0
2021-01-10 08:35:43 +09:00
Kenta Murata
3d9c95996d
[ruby/bigdecimal] Stop using GetVpValueWithPrec in rb_rational_convert_to_BigDecimal
b4f470da61
44a78df866
2021-01-09 20:36:47 +09:00
Kenta Murata
be34e31d8e [ruby/bigdecimal] Add assertions for checking the argument types
96c9ebd886
2021-01-09 20:36:18 +09:00
Kenta Murata
fb18a8113a
[ruby/bigdecimal] Stop using GetVpValueWithPrec in rb_float_convert_to_BigDecimal
33e7c50263
d3c1b0b921
2021-01-09 20:35:52 +09:00
Kenta Murata
82f6085b3e [ruby/bigdecimal] Fix trailing zero handling in rb_uint64_convert_to_BigDecimal
2056604d56
2021-01-07 10:20:40 +09:00
Kenta Murata
fa8295ccb9
[ruby/bigdecimal] Rename BDIGIT to DECDIG
686487d942
2021-01-06 13:52:12 +09:00
Kenta Murata
7da06c04b2
Need to convert the return value of rb_big_cmp 2021-01-06 13:39:09 +09:00
Kenta Murata
f289f8ae3a [ruby/bigdecimal] Optimize the conversion from small Bignum
4792a917d8
2021-01-06 10:56:48 +09:00
Kenta Murata
71f0dd339b
[ruby/bigdecimal] Move some definitions to missing.h
c2b22cc8b3
8cbca8481d
f05aecf673
2021-01-04 13:29:10 +09:00
Kenta Murata
448a67cd81
[ruby/bigdecimal] Implement special conversions for 64-bit integers
This change improves the conversion speed from small integers.

```
Comparison:
                           big_n9
              master:   4003688.9 i/s
    bigdecimal 3.0.0:   1270551.0 i/s - 3.15x  slower

                          big_n19
              master:   5410096.4 i/s
    bigdecimal 3.0.0:   1000250.3 i/s - 5.41x  slower
```

3429bd7e6f
2021-01-02 00:54:09 +09:00
Kenta Murata
a8014dae47 [ruby/bigdecimal] Refactor object allocation
271cebe567
2020-12-31 02:05:02 +09:00
Kenta Murata
4569e46550 [ruby/bigdecimal] Remove ToValue
97e9feeebd
2020-12-31 02:04:53 +09:00
Kenta Murata
8d93c1e70f [ruby/bigdecimal] Remove VP_EXCEPTION_MEMORY
It is no longer used due to the previous commit.

7d463f802b
2020-12-30 00:22:21 +09:00
Kenta Murata
086f3f1872 [ruby/bigdecimal] Remove needless pointer checks
xmalloc and xrealloc return non-NULL pointers or raise memory error.

507f0a6a64
2020-12-30 00:22:11 +09:00
Kenta Murata
29d012c964
[ruby/bigdecimal] Alloc wrapper object before VpAlloc
Calling TypedData_Wrap_Struct after VpAlloc may cause memory leak.

This commit reverts d11b78f9c4.

2c5a288caf
2020-12-29 17:46:36 +09:00
Kenta Murata
13b520d578
[ruby/bigdecimal] Refactor to extract VpCheckException
6fd171308b
2020-12-29 17:46:36 +09:00
Kenta Murata
512e08895f [ruby/bigdecimal] Refactor to decompose VpNewVarArg into small functions
7504871c48
2020-12-29 12:56:10 +09:00
Kenta Murata
d11b78f9c4 [ruby/bigdecimal] Reduce needless object allocation in f_BigDecimal
5c808eeabb
2020-12-29 12:54:39 +09:00
Kenta Murata
06b44f819e [ruby/bigdecimal] [Doc] Fix the document of BigDecimal()
[ci-skip]

905d0345ec
2020-12-28 21:26:26 +09:00
Kenta Murata
80d9e457c5
[ruby/bigdecimal] Reduce conditional branch count in VpNewVarArg
741fb3e00f
2020-12-28 21:16:48 +09:00
Nobuyoshi Nakada
c01ad11f90
bigdecimal: initialize conditionally assigned variable 2020-12-20 03:13:33 +09:00
Kenta Murata
df3deb3baa
[bigdecimal] Add BigDecimal#n_significant_digits
981dc48f95
9ecf880ec0
2020-12-19 22:13:59 +09:00
Kenta Murata
654f6fbf19
[bigdecimal] Make BigDecimal#precs deprecated
7e80e6e145
0ed7846e8c
2020-12-19 22:13:58 +09:00
Kenta Murata
ff9e40811c
[bigdecimal] Add BigDecimal#precision
458eb66c49
2020-12-19 22:13:58 +09:00
Kenta Murata
928a06723d
[bigdecimal] Make bigdecimal Ractor safe
93fc392640
a90d13c4d0
2020-12-19 22:13:57 +09:00
Kenta Murata
97d4e72e0b
[bigdecimal] Use DBLE_FIG
12296dcb90
2020-12-19 22:13:57 +09:00
Kenta Murata
e1424c3501
[bigdecimal] Fix the default precision of Float#to_d
Fix https://github.com/ruby/bigdecimal/issues/70
[Bug #13331]

aa536cd4b5
2020-12-19 22:13:53 +09:00