From: nobu@... Date: 2015-03-25T02:20:33+00:00 Subject: [ruby-core:68633] [Ruby trunk - Bug #10999] [PERF] bm_hash_aref_flo.rb Issue #10999 has been updated by Nobuyoshi Nakada. It is not a realistic benchmark, that integer parts are all different. Adding floats with same integer parts shows very bad result in the older version, whereas the latest version does not. ~~~ruby h = {} strs = [*1..10000].map! {|i| i.fdiv(100)} strs.each { |s| h[s] = s } 50.times { strs.each { |s| h[s] } } ~~~ ----------------------------------------------------------- benchmark results: Execution time (sec) name |old |new -------------|------:|------: hash_aref_flo| 0.942| 0.084 Speedup ratio: compare with the result of `old' (greater is better) name |new -------------|------: hash_aref_flo| 11.175 This is because the older code ignored fraction parts, and it became neary linear search. ---------------------------------------- Bug #10999: [PERF] bm_hash_aref_flo.rb https://bugs.ruby-lang.org/issues/10999#change-51930 * Author: Guo Xiang Tan * Status: Open * Priority: Normal * Assignee: Nobuyoshi Nakada * ruby -v: 2.3.0dev (2015-03-18 trunk 49999) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN ---------------------------------------- Before: 0.066s After [3bcf9fb53e4b9efabb15a3091fddfb68e5b6fbbe](https://github.com/ruby/ruby/commit/3bcf9fb): 0.094 To view the full graph, please visit http://rubybench.org/ruby/ruby/commits?result_type=hash_aref_flo&display_count=200. To issue is meant to highlight what we're seeing at RubyBench.org, feel free to close this issue if the trade offs were intended. -- https://bugs.ruby-lang.org/