Nobuyoshi Nakada
ca524bcd49
Expanded f_numerator
2019-07-16 08:15:05 +09:00
Nobuyoshi Nakada
34019a22eb
Expanded f_denominator
2019-07-16 07:59:30 +09:00
Nobuyoshi Nakada
5bd83909b9
Expand f_arg to use particular functions directly
2019-07-14 20:42:10 +09:00
Nobuyoshi Nakada
1464f7a149
Expand f_abs to use particular functions directly
2019-07-14 20:42:08 +09:00
Nobuyoshi Nakada
2553608c3b
Removed binop macro which has not been used
2019-07-14 18:07:40 +09:00
Nobuyoshi Nakada
10de5f149a
Calculate float complex division per each part
...
Arguments to f_complex_new2 should not be Complex, or violate the
assertion.
2019-07-14 16:56:25 +09:00
Nobuyoshi Nakada
3e7d002118
Check exception flag as a bool [Bug #15987 ]
2019-07-11 20:04:29 +09:00
git
fdfe51d169
* expand tabs.
2019-06-20 04:07:31 +09:00
Jeremy Evans
b9ef35e4c6
Implement Complex#<=>
...
Implement Complex#<=> so that it is usable as an argument when
calling <=> on objects of other classes (since #coerce will coerce
such numbers to Complex). If the complex number has a zero imaginary
part, and the other argument is a real number (or complex number with
zero imaginary part), return -1, 0, or 1. Otherwise, return nil,
indicating the objects are not comparable.
Fixes [Bug #15857 ]
2019-06-19 10:50:58 -07:00
Nobuyoshi Nakada
0d41adf6e2
Split long expression
2019-04-23 14:12:36 +09:00
nobu
62c17a2f21
No TypeError at nil if exception: false
...
[ruby-core:91021] [Bug #15525 ]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66796 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-12 05:02:58 +00:00
mrkn
fc9e0302ea
complex.c: optimize zero check for Float
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66758 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-09 07:05:37 +00:00
mrkn
bbd1e83e5a
complex.c: replace misused UNLIKELY with LIKELY
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66751 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-08 04:53:06 +00:00
mrkn
a288ff502e
complex.c (f_divide): canonicalize a quotient
...
Cannonicalize resultant real and imaginary parts when complex number
divided by non-complex number.
[Fix GH-2065] [Bug #15505 ] [ruby-core:90891]
From: Joe Peric <peric.joe@gmail.com>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66744 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-07 04:49:34 +00:00
mrkn
673ff731c1
complex.c: Optimize Complex#* and Complex#**
...
Optimize f_mul for the core numeric class components.
This change improves the computation time of Complex#* and Complex#**.
```
$ make benchmark ITEM=complex_float_ COMPARE_RUBY=/Users/mrkn/.rbenv/versions/2.6.0/bin/ruby
generating known_errors.inc
known_errors.inc unchanged
/Users/mrkn/src/github.com/ruby/ruby/revision.h unchanged
/Users/mrkn/.rbenv/shims/ruby --disable=gems -rrubygems -I/Users/mrkn/src/github.com/ruby/ruby/benchmark/lib /Users/mrkn/src/github.com/ruby/ruby/benchmark/benchmark-driver/exe/benchmark-driver \
--executables="compare-ruby::/Users/mrkn/.rbenv/versions/2.6.0/bin/ruby -I.ext/common --disable-gem" \
--executables="built-ruby::./miniruby -I/Users/mrkn/src/github.com/ruby/ruby/lib -I. -I.ext/common -r/Users/mrkn/src/github.com/ruby/ruby/prelude --disable-gem" \
$(find /Users/mrkn/src/github.com/ruby/ruby/benchmark -maxdepth 1 -name '*complex_float_*.yml' -o -name '*complex_float_*.rb' | sort)
Calculating -------------------------------------
compare-ruby built-ruby
complex_float_add 6.558M 13.012M i/s - 1.000M times in 0.152480s 0.076850s
complex_float_div 576.821k 567.969k i/s - 1.000M times in 1.733640s 1.760660s
complex_float_mul 1.690M 2.628M i/s - 1.000M times in 0.591786s 0.380579s
complex_float_new 1.350M 1.268M i/s - 1.000M times in 0.740669s 0.788762s
complex_float_power 1.571M 1.835M i/s - 1.000M times in 0.636507s 0.544909s
complex_float_sub 8.635M 8.779M i/s - 1.000M times in 0.115814s 0.113906s
Comparison:
complex_float_add
built-ruby: 13012361.7 i/s
compare-ruby: 6558237.1 i/s - 1.98x slower
complex_float_div
compare-ruby: 576821.0 i/s
built-ruby: 567968.8 i/s - 1.02x slower
complex_float_mul
built-ruby: 2627575.4 i/s
compare-ruby: 1689800.0 i/s - 1.55x slower
complex_float_new
compare-ruby: 1350130.8 i/s
built-ruby: 1267809.6 i/s - 1.06x slower
complex_float_power
built-ruby: 1835168.8 i/s
compare-ruby: 1571074.6 i/s - 1.17x slower
complex_float_sub
built-ruby: 8779168.8 i/s
compare-ruby: 8634534.7 i/s - 1.02x slower
```
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66697 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-03 06:19:17 +00:00
kazu
670725b087
[DOC] Complex() default behaviour is `exception: true` [ci skip]
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66696 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-03 05:51:19 +00:00
kazu
bace0d4cdc
[DOC] Add `or nil` to call-seq [ci skip]
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66695 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-03 05:51:18 +00:00
mrkn
ee2ddf5411
complex.c: fix against redefining component methods
...
This fixes the incompatibility (maybe unintentionally) introduced by
removal of `#ifndef PRESERVE_SIGNEDZERO` guards in f_add, f_mul, and
f_sub functions in r62701. [Bug #15491 ] [ruby-core:90843]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66688 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-02 04:25:11 +00:00
mrkn
6d957b2f11
complex.c: fix indentation
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66684 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-02 01:36:39 +00:00
mrkn
5f90845420
complex.c: Optimize Complex#+ for some conditions
...
Optimize f_add defined in complex.c for some specific conditions.
It makes Complex#+ about 1.4x faster than r66678.
Compared to r66678:
```
mrkn-mbp15-late2016:complex-optim-o3 mrkn$ make benchmark ITEM=complex_float_ COMPARE_RUBY=/Users/mrkn/.rbenv/versions/trunk-o3/bin/ruby
/Users/mrkn/src/github.com/ruby/ruby/revision.h unchanged
/Users/mrkn/.rbenv/shims/ruby --disable=gems -rrubygems -I/Users/mrkn/src/github.com/ruby/ruby/benchmark/lib /Users/mrkn/src/github.com/ruby/ruby/benchmark/benchmark-driver/exe/benchmark-driver \
--executables="compare-ruby::/Users/mrkn/.rbenv/versions/trunk-o3/bin/ruby -I.ext/common --disable-gem" \
--executables="built-ruby::./miniruby -I/Users/mrkn/src/github.com/ruby/ruby/lib -I. -I.ext/common -r/Users/mrkn/src/github.com/ruby/ruby/prelude --disable-gem" \
$(find /Users/mrkn/src/github.com/ruby/ruby/benchmark -maxdepth 1 -name '*complex_float_*.yml' -o -name '*complex_float_*.rb' | sort)
Calculating -------------------------------------
compare-ruby built-ruby
complex_float_add 9.132M 12.864M i/s - 1.000M times in 0.109511s 0.077734s
complex_float_div 600.723k 627.878k i/s - 1.000M times in 1.664662s 1.592666s
complex_float_mul 2.320M 2.347M i/s - 1.000M times in 0.431039s 0.426113s
complex_float_new 1.473M 1.489M i/s - 1.000M times in 0.678791s 0.671750s
complex_float_power 1.690M 1.722M i/s - 1.000M times in 0.591863s 0.580775s
complex_float_sub 8.870M 9.516M i/s - 1.000M times in 0.112740s 0.105091s
Comparison:
complex_float_add
built-ruby: 12864383.7 i/s
compare-ruby: 9131502.8 i/s - 1.41x slower
complex_float_div
built-ruby: 627878.0 i/s
compare-ruby: 600722.5 i/s - 1.05x slower
complex_float_mul
built-ruby: 2346795.3 i/s
compare-ruby: 2319975.7 i/s - 1.01x slower
complex_float_new
built-ruby: 1488649.1 i/s
compare-ruby: 1473207.5 i/s - 1.01x slower
complex_float_power
built-ruby: 1721837.2 i/s
compare-ruby: 1689580.2 i/s - 1.02x slower
complex_float_sub
built-ruby: 9515562.7 i/s
compare-ruby: 8869966.3 i/s - 1.07x slower
```
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66681 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2019-01-01 12:20:05 +00:00
shyouhei
bc64df876e
delete emacs mode lines [ci skip]
...
These settings are now covered by .dir-locals.el.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66584 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-27 06:12:09 +00:00
stomar
9166fdac50
complex.c, object.c: [DOC] improve "exception: false" docs
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66528 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-24 20:41:15 +00:00
normal
9b9fe826fd
{complex,object,rational}.c: document exception: false
...
From: Victor Shepelev <zverok.offline@gmail.com>
[ruby-core:90673] [Bug #15452 ]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66498 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-22 22:39:31 +00:00
nobu
8ef2aae2d0
Use idException
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66495 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-22 10:23:06 +00:00
nobu
c6ef5bc31e
complex.c: new APIs for Complex
...
[Feature #15066 ]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66360 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-12 11:06:48 +00:00
nobu
dc8afd385d
complex.c: rb_complex_new_polar
...
* complex.c (rb_complex_new_polar): renamed with _new to clarify
that it creates a new instance, but is not an instance method.
* complex.c (rb_complex_polar): deprecated.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66359 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-12 11:06:47 +00:00
nobu
4b85e88174
Prefer rb_check_arity when 0 or 1 arguments
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@66179 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-12-04 02:24:15 +00:00
nobu
3e063ca7ae
complex.c: rb_dbl_complex_polar_pi
...
* complex.c (rb_dbl_complex_polar_pi): suffixed with _pi to
clarify that `ang` is not radian, but multiplied by PI.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65522 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-11-04 00:22:13 +00:00
svn
e7fdfefd5c
* expand tabs.
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65191 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-10-20 02:49:23 +00:00
nobu
b4bbfe4bb9
complex.c: small optimization of Complex#**
...
* complex.c (rb_complex_pow): calculate power of a Fixnum without
allocating intermediate Complex objects, and avoid unexpected
NaNs.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@65190 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-10-20 02:49:18 +00:00
nobu
929e9713bb
complex.c: simplify division result
...
* complex.c (f_divide): canonicalize rationals to simplify integer
complex results.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64610 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-09-01 07:34:31 +00:00
nobu
63bd0417ee
share Float 0
...
* complex.c (RFLOAT_0): share the 0.0 object on non-flonum
platforms.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63680 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-06-17 02:41:26 +00:00
nobu
4fedad85ef
refine Integer#** and Float#**
...
* complex.c (rb_dbl_complex_polar): utility function, which
returns more precise value in right angle cases.
* bignum.c (rb_big_pow): use rb_dbl_complex_polar().
* numeric.c (rb_float_pow, fix_pow): create a Complex by polar
form.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63678 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-06-17 02:37:32 +00:00
stomar
96827ee537
complex.c: improve docs for Complex#{finite?,infinite?}
...
* complex.c: [DOC] correct term "real value" to "real part", and same
for imaginary part, in documentation for Complex#{finite?,infinite?}.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63152 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-04-14 16:43:42 +00:00
nobu
2e1a3725c7
Update Complex#infinite? documenation
...
to state what it really does.
[Fix GH-1848]
From: Christian Bruckmayer <cbruckmayer@suse.com>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62921 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-26 00:02:20 +00:00
nobu
ba77b725da
Update Complex#finite? documentation
...
to state what it really does.
[Fix GH-1848]
From: Christian Bruckmayer <cbruckmayer@suse.com>
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62920 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-26 00:02:19 +00:00
mrkn
c6ab349855
Add `exception:` keyword in Kernel#Complex()
...
Support `exception:` keyword argument in `Kernel#Complex()`.
If `exception:` is `false`, `Kernel#Complex()` returns `nil` if the given
value cannot be interpreted as a complex value.
The default value of `exception:` is `true`.
This is part of [Feature #12732 ].
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62760 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-15 07:19:48 +00:00
nobu
576b245ffa
Removed useless assertions [ci skip]
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62703 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-09 03:51:04 +00:00
nobu
1e30a7e001
complex.c: removed redundant conditions
...
Fixnums can be compared by object values themselves only.
Addition/subtraction/mulplication of fixnum 0 do not affect the
sign.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62701 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-09 02:06:39 +00:00
nobu
38b240156c
complex.c: removed already unused macros
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62700 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-09 01:51:25 +00:00
nobu
c31f6285c7
complex.c: check type
...
* complex.c (m_cos, m_sin): determine the type by the internal
type, not by a method.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62689 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-07 12:04:43 +00:00
nobu
b31ba1056e
complex.c: check type
...
* complex.c (nucomp_s_canonicalize_internal): determine the type
by the internal type, not by a method.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62688 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-07 11:54:07 +00:00
nobu
b479a2d439
complex.c, rational.c: no backref
...
Since r37702, parsing complex and rational do not use regexp.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62687 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-07 11:49:24 +00:00
nobu
6010d756c0
complex.c, rational.c: adjust indent
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62686 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-07 11:49:23 +00:00
nobu
75d2bec7a9
complex.c, rational.c: simplified macro conditions
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62682 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-03-07 02:27:18 +00:00
nobu
86d9071e0b
defs/id.def: predefine to_f ID
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62593 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-02-27 08:15:27 +00:00
nobu
23d6a624e2
complex.c: use predefined IDs
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62591 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-02-27 01:17:46 +00:00
mrkn
c225d3c9b5
complex.c, rational.c: remove dead code
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62565 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-02-24 15:06:07 +00:00
nobu
16ef24ac08
[DOC] nodoc internal methods/classes
...
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62542 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-02-23 02:16:42 +00:00
nobu
3f7221ad3d
force fixable
...
* complex.c (nucomp_hash): force hash values fixable.
[ruby-core:85224] [Bug #14420 ]
* rational.c (nurat_hash): ditto.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@62107 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2018-01-30 05:48:28 +00:00