Feature #2561
closed1.8.7 Patch reduces time cost of Rational operations by 50%.
Description
=begin
This changes adds a specialize Fixnum#gcd and a tuned rational.rb.
Reduced overall time on Rational operations by > 50%.
user system total real test_it 22.380000 2.140000 24.520000 ( 24.559388) test_it ks_rational 17.870000 1.830000 19.700000 ( 19.687221) test_it ks_rational + Fixnum#gcd 10.660000 0.000000 10.660000 ( 10.665765)
The patch will perform better with Fixnum#gcd on numeric.c but still is faster with only the rational.rb changes.
I have a version for 1.8.6 if someone wants it.
=end
Files
Updated by naruse (Yui NARUSE) almost 15 years ago
- Status changed from Open to Assigned
- Assignee set to knu (Akinori MUSHA)
=begin
Discuss in Ruby 1.8 first,
=end
Updated by kstephens (Kurt Stephens) almost 15 years ago
- File rational_performance.rb rational_performance.rb added
- File ruby-1.8.7-rational.patch ruby-1.8.7-rational.patch added
=begin
New version:
Avoid additional method calls to Float(), call #to_f directly. Avoid Rational() when its clear that denominator will never be 1.
=end
Updated by kstephens (Kurt Stephens) almost 15 years ago
- File ruby-1.8.7-rational.patch ruby-1.8.7-rational.patch added
- File gcd_test.rb gcd_test.rb added
=begin
Fixed Fixnum#gcd for FIXNUM_MIN.
Ref: http://github.com/kstephens/rubyenterpriseedition187/commit/877d5e4c7892248bb7486f24c076cb23d565a466
gcd_test.rb should pass on 32-bit builds.
=end
Updated by kstephens (Kurt Stephens) almost 15 years ago
- File gcd_test.rb gcd_test.rb added
- File ruby-1.8.7-fixnum_gcd.patch ruby-1.8.7-fixnum_gcd.patch added
=begin
Fixed Fixnum#gcd to FIXNUM_MIN on 64-bit longs.
gcd_test.rb should pass on 64-bit builds.
=end
Updated by knu (Akinori MUSHA) almost 15 years ago
=begin
Patches look fine to me. I'll handle this as soon as I can take the time, hopefully within a couple weeks.
I think it's better to have the C part as extension rather than putting Fixnum#gcd solely in the core,
so I'll make some layout changes to bring this in in the best shape for future maintainability.
=end
Updated by knu (Akinori MUSHA) almost 15 years ago
- Status changed from Assigned to Closed
- % Done changed from 0 to 100
=begin
This issue was solved with changeset r26581.
Kurt , thank you for reporting this issue.
Your contribution to Ruby is greatly appreciated.
May Ruby be with you.
=end