Commit graph

8776 commits

Author SHA1 Message Date
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
e129be7592 [ruby/bigdecimal] Suppress warning at NO_SANITIZE on gcc
f6765b8071
2021-01-14 10:20:30 +09:00
Nobuyoshi Nakada
521ad9a13a Moved Fiber methods into core [Feature #17407] 2021-01-13 23:20:02 +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
0a4f719a06
Update ext/bigdecimal/depend 2021-01-13 09:36:17 +09:00
Kenta Murata
28321e400e
Update ext/bigdecimal/depend 2021-01-13 09:08:48 +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
Nobuyoshi Nakada
d2aaf865e3 [ruby/etc] Added fallback definition of RUBY_ATOMIC_EXCHANGE
0c5900bd21
2021-01-11 11:39:12 +09:00
Nobuyoshi Nakada
f6e2c41db3 [ruby/etc] Check blocking variables at release
f017bdfedf
2021-01-11 11:39:10 +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
Nobuyoshi Nakada
590dc06e38 Get rid of defining methods for tests in core classes
Not to interfere in other tests.
2021-01-09 22:38:06 +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
31854403b3
[ruby/bigdecimal] Check the function availabilities separately
cf839a34c8
75db4dabb9
2021-01-06 09:25:13 +09:00
Marcus Stollsteimer
3108ad7bf3 [DOC] Fix grammar: "is same as" -> "is the same as" 2021-01-05 15:13:53 +01:00
Kazuhiro NISHIYAMA
3d43944725
Fix a typo [ci skip] 2021-01-05 23:10:39 +09:00
Nobuyoshi Nakada
83e62d7798 [ruby/io-console] Shrink struct query_args
720be0a3e5
2021-01-05 21:26:15 +09:00
Nobuyoshi Nakada
4272395982 [ruby/io-console] Pre-define chomp! ID
028e1c9497
2021-01-05 21:26:13 +09:00
Nobuyoshi Nakada
ead8d89bd7 [ruby/io-console] Ignore chomp! result and return the modified string
09e5ccc729
2021-01-05 21:26:11 +09:00
Marcus Stollsteimer
451b456051 [ruby/io-console] [DOC] Note that IO#getpass returns a chomped string
IO#getpass uses String#chomp! on the read input line.

1e98c93bc8
2021-01-05 12:59:53 +09:00
Koichi Sasada
e7fc353f04 enable constant cache on ractors
constant cache `IC` is accessed by non-atomic manner and there are
thread-safety issues, so Ruby 3.0 disables to use const cache on
non-main ractors.

This patch enables it by introducing `imemo_constcache` and allocates
it by every re-fill of const cache like `imemo_callcache`.
[Bug #17510]

Now `IC` only has one entry `IC::entry` and it points to
`iseq_inline_constant_cache_entry`, managed by T_IMEMO object.

`IC` is atomic data structure so `rb_mjit_before_vm_ic_update()` and
`rb_mjit_after_vm_ic_update()` is not needed.
2021-01-05 02:27:58 +09:00
Nobuyoshi Nakada
433a3be86a
ripper: call #pretty_print on also state 2021-01-04 23:37:00 +09:00
Kenta Murata
4b90ea8480
Update ext/bigdecimal/depend 2021-01-04 13:42:10 +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
597e063606
Revert "Include RUBY_EXTCONF_H if available"
It is unnecessary because RUBY_EXTCONF_H has already been included in
ruby/internal/config.h.

This reverts commit 0644f466b0.
2021-01-04 12:01:04 +09:00
Kenta Murata
0644f466b0
Include RUBY_EXTCONF_H if available 2021-01-03 23:38:21 +09:00
Kenta Murata
a6bbba1135
Avoid to use __builtin_clzl in SPARC Solaris 2021-01-02 12:06:14 +09:00
Kenta Murata
ef6ab776d5
Add __x86_64__ guard to include x86intrin.h 2021-01-02 10:18:58 +09:00
Nobuyoshi Nakada
5aa28d9d6d
Check if x86intrin.h is available not only existing 2021-01-02 09:48:42 +09:00
Kenta Murata
830afd94fe
[ruby/bigdecimal] Update depend 2021-01-02 01:03:32 +09:00
Kenta Murata
c2c0147538
[ruby/bigdecimal] Fix test for Ruby 2.4
Ruby 2.4 does not have RbConfig::LIMITS.

c8087523b0
2021-01-02 00:54:09 +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
47a1f5ff73
[ruby/bigdecimal] Define bool, true, and false for old Ruby
a6d3bd2d44
2020-12-29 17:46:37 +09:00