Kenta Murata
75f552e973
[ruby/bigdecimal] Fix the precision of the adjusted quotient
...
8dc8cd339d
2021-12-24 02:28:56 +09:00
Kenta Murata
7b2cfce543
[ruby/bigdecimal] Let BigDecimal_DoDivmod use the same precision calculation as BigDecimal_divide
...
11cb2c8840
2021-12-24 02:28:55 +09:00
Kenta Murata
e1265c8198
[ruby/bigdecimal] Use larger precision in divide for irrational or recurring results
...
Just in case for irrational or recurring results, the precision of the
quotient is set to at least more than 2*Float::DIG plus alpha.
[Bug #13754 ] [Fix GH-94]
99442c75d3
2021-12-24 02:28:55 +09:00
Kenta Murata
8ee8ac6423
[ruby/bigdecimal] Fix trailing zeros handling in rb_uint64_convert_to_BigDecimal
...
Fix GH-192
eebc98b85a
2021-12-24 02:28:55 +09:00
BurdetteLamar
ed7f4c24d7
[ruby/bigdecimal] Respond to review
...
f528a0006e
2021-12-24 02:28:54 +09:00
BurdetteLamar
ed8ec5dcb3
[ruby/bigdecimal] Respond to review
...
4eadcdf0a6
2021-12-24 02:28:54 +09:00
BurdetteLamar
44acab76af
[ruby/bigdecimal] Respond to review
...
6d69422e37
2021-12-24 02:28:53 +09:00
BurdetteLamar
973e508472
[ruby/bigdecimal] Respond to review for #precision
...
681cd2d81d
2021-12-24 02:28:53 +09:00
BurdetteLamar
5888d3030d
[ruby/bigdecimal] Enhanced RDoc for bigdecimal.c
...
3a35f92f8b
2021-12-24 02:28:53 +09:00
BurdetteLamar
01b2ccaa95
[ruby/bigdecimal] Enhanced RDoc for bigdecimal.c
...
31a7a37426
2021-12-24 02:28:52 +09:00
Jean Boussier
ec478d947f
[ruby/bigdecimal] Fix negative Bignum conversion
...
Introduced in 4792a917d8
`rb_absint_size` return the number of bytes needed to fit
the absolute integer, but negative integers need the sign, so one more
bit, and potentially one more byte.
0f3d5d0eb7
2021-12-24 02:28:51 +09:00
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