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
Kenta Murata
d5ab8e8562
[bigdecimal] Use rb_undef_alloc_func to undefine allocate
2020-12-19 02:29:31 +09:00
Kenta Murata
a86c147579
Import bigdecimal 2.0.2 ( #3905 )
...
* remove duplicated include
* Make BigDecimal#round with argument < 1 return Integer
Fixes [Bug #12780 ]
* Use a higher default precision for BigDecimal#power and #**
When a fractional power is given, increase the precision if the
precision isn't specified via power's second argument:
Float: increase by 15 (rough number of decimal precision in float)
BigDecimal: increase by adding similar precision modifier as done to
calculate the base precision.
Rational: double the precision, since a BigDecimal is created, but
the created BigDecimal uses the same precision.
Increasing the precision for these power calculations has the obvious
tradeoff of making the calculations slower.
Fixes Ruby Bug #17264
* Use DBLE_FIG for a Float value
* Version 2.0.1
Co-authored-by: pavel <pavel.rosicky@easy.cz>
Co-authored-by: Jeremy Evans <code@jeremyevans.net>
2020-12-15 15:17:15 +09:00
Ikko Ashimine
df25007046
Fixed typo in comment
...
alway -> always
2020-10-10 02:32:21 -04:00