Граф коммитов

832 Коммитов

Автор SHA1 Сообщение Дата
Nobuyoshi Nakada 454b4da763
[DOC] Integer.try_convert [ci skip] 2021-12-08 17:59:16 +09:00
Burdette Lamar 28fb6d6b9e
Adding links to literals and Kernel (#5192)
* Adding links to literals and Kernel
2021-12-03 07:12:28 -06:00
Jeremy Evans fe1725236c Don't call + and < in Integer.times for !FIXNUM
The methods aren't called for FIXNUM, and it's best to have
consistent behavior.

Fixes [Bug #18377]
2021-12-01 16:21:50 -08:00
Burdette Lamar eac7c63538
Enhanced RDoc for numeric.c (#5184)
Adds remarks about literals and Kernel methods to Float and Integer.
2021-11-27 13:07:37 -06:00
Burdette Lamar e469ebd7d3
Correct indentation error in numeric.c (#5178) 2021-11-25 13:14:10 -06:00
Burdette Lamar 635efa594a
Whats here for float (#5170)
* What's Here for Float
2021-11-24 17:44:27 -06:00
Burdette Lamar 9faa599196
Enhanced RDoc for Float#floor (#5167)
* Enhanced RDoc for Float#floor

* Enhanced RDoc for Float

* Enhanced RDoc for Float
2021-11-24 15:15:12 -06:00
Burdette Lamar 7c3041047e
Enhanced RDoc for Float#prev_float (#5162)
* Enhanced RDoc for Float#prev_float
2021-11-24 08:34:30 -06:00
Burdette Lamar df8f858115
Enhanced RDoc for Float#next_float (#5160)
* Enhanced RDoc for Float#next_float
2021-11-23 15:38:28 -06:00
Burdette Lamar da832d6c2a
What's Here section for Integer (#5155)
* What's Here section for Integer
2021-11-22 19:04:25 -06:00
Burdette Lamar e42f994f6b
Enhanced RDoc for Float (#5153)
Treats:

    #>
    #>=
    #<
    #<=
    #eql?
    #nan?
    #infinite?
    #finite?
2021-11-22 14:57:17 -06:00
Burdette Lamar 86ad878e6a
Enhanced RDoc for Float (#5150)
Treated (or previously treated):

    #quo
    #%
    #divmod
    #**`
    #eql?
    #<=>
    #==
    #hash
2021-11-20 17:21:30 -06:00
Burdette Lamar e0c38742a2
Enhanced RDoc for Float (#5144)
Treats:

    #to_s
    #coerce
    #+
    #-
    #*
    #/
2021-11-19 12:16:16 -06:00
Jeremy Evans b08dacfea3
Optimize dynamic string interpolation for symbol/true/false/nil/0-9
This provides a significant speedup for symbol, true, false,
nil, and 0-9, class/module, and a small speedup in most other cases.

Speedups (using included benchmarks):
:symbol        :: 60%
0-9            :: 50%
Class/Module   :: 50%
nil/true/false :: 20%
integer        :: 10%
[]             :: 10%
""             :: 3%

One reason this approach is faster is it reduces the number of
VM instructions for each interpolated value.

Initial idea, approach, and benchmarks from Eric Wong. I applied
the same approach against the master branch, updating it to handle
the significant internal changes since this was first proposed 4
years ago (such as CALL_INFO/CALL_CACHE -> CALL_DATA). I also
expanded it to optimize true/false/nil/0-9/class/module, and added
handling of missing methods, refined methods, and RUBY_DEBUG.

This renames the tostring insn to anytostring, and adds an
objtostring insn that implements the optimization. This requires
making a few functions non-static, and adding some non-static
functions.

This disables 4 YJIT tests.  Those tests should be reenabled after
YJIT optimizes the new objtostring insn.

Implements [Feature #13715]

Co-authored-by: Eric Wong <e@80x24.org>
Co-authored-by: Alan Wu <XrXr@users.noreply.github.com>
Co-authored-by: Yusuke Endoh <mame@ruby-lang.org>
Co-authored-by: Koichi Sasada <ko1@atdot.net>
2021-11-18 15:10:20 -08:00
Burdette Lamar f3dcb4bbf7
Enhanced RDoc for Integer (#5139)
Treats:

    #<<
    #>>
    #to_s
2021-11-18 08:28:04 -06:00
Burdette Lamar cb69c19e8a
Enhanced RDoc for Integer (#5138)
Treats:

    #times
    #round
    #floor
    #ceil
    #truncate
    ::sqrt
2021-11-17 16:00:50 -06:00
Burdette Lamar 4acac918f4
Enhanced RDoc for Integer (#5134)
Treated:

    #==
    #<=>
    #<
    #<=
    #>
    #>=
    #&
    #|
    #^
2021-11-17 12:51:32 -06:00
Burdette Lamar d8d5488631
Enhanced RDoc for Integer (#5120)
Treated:

    #+
    #-
    #*
    #fdiv
    #/
    #div
    #**
    #[]
    #digits
    #upto
    #downto
2021-11-16 13:42:05 -06:00
Burdette Lamar f31b7f0522
Enhanced RDoc for Integer (#5118)
Treats:

#allbits?
#anybits?
#nobits?
#succ
#pred
#chr`
#to_s
#+
#-
2021-11-15 13:52:23 -06:00
Yusuke Endoh 15bc1ae41e Revert "Enhanced RDoc for Integer (#5099)"
This reverts commit fc456adc6a.

It broke the CI check.

https://github.com/ruby/ruby/runs/4207922247?check_suite_focus=true#step:3:4
```
numeric.c:3518: *     255.chr(Encoding::UTF_8) # => "ÿ"
Error: Process completed with exit code 1.
```
2021-11-15 14:50:03 +09:00
Burdette Lamar fc456adc6a
Enhanced RDoc for Integer (#5099)
Treats:

    #allbits?
    #anybits?
    #nobits?
    #succ
    #pred
    #chr`
    #to_s
    #+
    #-
2021-11-13 14:48:57 -06:00
Nobuyoshi Nakada 7cc4e147fc
Get rid of implicit expansion to `long double` on ix86 2021-11-08 18:35:22 +09:00
Burdette Lamar f8bbd608c9
Enhanced RDoc for Numeric (#4994)
Treats:

    #eql?
    #<+>
    #floor
    #ceil
    #round
    #truncate
    #step
2021-10-28 15:11:11 -05:00
Nobuyoshi Nakada 26353c75a9 Embed bare `double` if `sizeof(double) == sizeof(VALUE)` 2021-10-27 02:05:06 +09:00
Nobuyoshi Nakada e3a783b141 Align `RFloat` at VALUE boundary 2021-10-27 02:05:06 +09:00
Nobuyoshi Nakada afdca0e780
Fix unaligned access to `double` in RFloat 2021-10-26 20:17:00 +09:00
Burdette Lamar 3e96b94eba
Enhanced RDoc for Numeric (#4991)
Treated:

    #@-
    #fdiv
    #div
    #abs
    #zero?
    #nonzero?
    #to_int
    #positive?
    #negative?
2021-10-19 12:00:22 -05:00
Burdette Lamar 012cafa5c7
Enhanced RDoc for numerics (#4982)
Treats:

    Numeric#coerce
    Numeric#clone
    Numeric#dup
    Numeric#@+ (unary plus)
    Numeric#i
    Float#coerce
2021-10-18 18:35:06 -05:00
Burdette Lamar 5d975684da
Enhanced RDoc for remainder (#4975)
Treats Numeric#remainder and Integer#remainder.
2021-10-15 16:20:52 -05:00
Burdette Lamar 37ea909f42
Enhanced RDoc for divmod (#4973)
Treats:

    Integer#divmod
    Float#divmod
    Numeric#divmod
2021-10-15 12:51:37 -05:00
Burdette Lamar 2043c2e7e4
Enhanced RDoc for numeric.c (#4964)
Treats Integer#% and Float#%.
2021-10-15 11:57:49 -05:00
Burdette Lamar bb66729b5f
Enhanced RDoc for Numeric#% (#4954) 2021-10-12 08:06:05 -05:00
S-H-GAMELINKS d25af1f44e Add flo_ndigits function 2021-10-10 09:29:53 +09:00
S.H b8c3a84bdd
Refactor and Using RBOOL macro 2021-09-15 08:11:05 +09:00
S-H-GAMELINKS 83a5e2bb5c Using RB_FLOAT_TYPE_P macro 2021-09-12 11:16:31 +09:00
S-H-GAMELINKS af5826a25e Replace RB_TYPE_P macro to FIXNUM_P and RB_INTEGER_TYPE_P macro 2021-09-12 11:16:09 +09:00
S-H-GAMELINKS 9784f6685e Using NIL_P macro instead of RB_TYPE_P macro 2021-09-11 09:15:21 +09:00
S-H-GAMELINKS 032534dbdf Using RB_BIGNUM_TYPE_P macro 2021-09-11 09:13:24 +09:00
Nobuyoshi Nakada 465bd972ec
[DOC] Move rdoc of Integer#abs to numeric.rb [ci skip] 2021-08-30 13:33:52 +09:00
Nobuyoshi Nakada 04be8e84db
Use C99-defined macros to classify a floating-point number 2021-08-27 12:41:30 +09:00
John Hawthorn d668cd188c rb_fix2uint should use FIXNUM_NEGATIVE_P
rb_num_negative_int_p is equivalent to calling the "<" method on
Integer (and checking whether it is overridden), where in this case we
are interested in whether the "actual" value can fit inside an unsigned
int.

This also was slow because rb_num_negative_int_p calls
rb_method_basic_definition_p, doing a method lookup to check for < being
overridden.

This replaces the check in both rb_fix2uint and rb_fix2ushort with FIXNUM_NEGATIVE_P which simply checks
whether the VALUE is signed.
2021-08-18 18:24:37 +09:00
Jeremy Evans d16b68cb22 Use Rational for Float#round with ndigits > 14
ndigits higher than 14 can result in values that are slightly too
large due to floating point limitations.  Converting to rational
for the calculation and then back to float fixes these issues.

Fixes [Bug #14635]
Fixes [Bug #17183]

Co-authored by: Yusuke Endoh <mame@ruby-lang.org>
2021-08-06 15:03:51 -07:00
S.H 378e8cdad6
Using RBOOL macro 2021-08-02 12:06:44 +09:00
Jeremy Evans 9931e2f509 Improve performance of Integer#digits
This speeds up performance by multiple orders of magnitude for
large integers.

Fixes [Bug #14391]

Co-authored-by: tompng (tomoya ishida) <tomoyapenguin@gmail.com>
2021-07-29 15:19:12 -07:00
Jeremy Evans 35e467080c Make Float#floor with ndigits argument handle error
The previous implementation could result in a returned
float that is 1/(10**ndigits) too low.  First try adding
one before dividing, and if that results in a value that is
greater than the initial number, then try the original
calculation.

Spec added for ciel, but the issue doesn't appear to affect
ciel, at least not for the same number.  If the issue does
effect ciel, a similar fix could probably work for it.

Fixes [Bug #18018]
2021-07-27 11:00:45 -07:00
Nobuyoshi Nakada 301d194ee3 Add Integer.try_convert [Feature #15211] 2021-07-16 17:49:53 +09:00
Burdette Lamar c1741df1a1 What's Here for Numeric and Comparable 2021-06-21 10:38:16 -07:00
S.H 3208a5df2d
Improve perfomance for Integer#size method [Feature #17135] (#3476)
* Improve perfomance for Integer#size method [Feature #17135]

* re-run ci

* Let MJIT frame skip work for Integer#size

Co-authored-by: Takashi Kokubun <takashikkbn@gmail.com>
2021-06-04 21:57:21 -07:00
Jeremy Evans f516379853 Fix Enumerator::ArithmeticSequence handling of float ranges
Depending on the float range, there could be an off-by-one error,
where the last result that should be in the range was missed. Fix
this by checking if the computed value for the expected value
outside the range is still inside the range, and if so, increment
the step size.

Fixes [Bug #16612]
2021-05-29 08:56:15 -07:00
S.H ce36097748
Refactor num_zero_p function (#4522) 2021-05-23 17:41:03 -07:00