Issue #13209 has been reported by Jabari Zakiya. ---------------------------------------- Misc #13209: fact.rb in ruby/sample variations https://bugs.ruby-lang.org/issues/13209 * Author: Jabari Zakiya * Status: Open * Priority: Normal * Assignee: ---------------------------------------- I was looking at some of the Sample files that come with Ruby and saw the example for doing factorials. It's an old example that I thought I could make simpler/faster. Below are the results. Maybe upgrading to show the difference between coding idioms can be instructive to newer Ruby programmers. ``` def fact(n) return 1 if n == 0 f = 1 n.downto(1) do |i| f *= i end return f end def fact1(n) return 1 if n | 1 == 1 # if n 0 or 1 f = 2 n.downto(3) do |i| f *= i end return f end def fact2(n) return 1 if n | 1 == 1 # if n 0 or 1 (2..n).reduce(:*) end require 'benchmark/ips' Benchmark.ips do |x| x.report("original factorial") { fact 100 } x.report("modified factorial") { fact1 100 } x.report("enhanced factorial") { fact2 100 } x.compare! end ``` Timings using ruby-2.4.0 on Linux 64-bit, on I7 cpu system. ``` 2.4.0 :001 > load 'factversiontest.rb' Warming up -------------------------------------- original factorial 4.501k i/100ms modified factorial 4.594k i/100ms enhanced factorial 5.271k i/100ms Calculating ------------------------------------- original factorial 44.962k (¡Þ 4.2%) i/s - 225.050k in 5.015176s modified factorial 46.288k (¡Þ 3.2%) i/s - 234.294k in 5.066948s enhanced factorial 53.425k (¡Þ 3.1%) i/s - 268.821k in 5.036635s Comparison: enhanced factorial: 53424.9 i/s modified factorial: 46288.0 i/s - 1.15x slower original factorial: 44961.5 i/s - 1.19x slower => true 2.4.0 :002 > ``` -- https://bugs.ruby-lang.org/ Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe> <http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>