Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Fix #468] Fix false positives for `Performance/BigDecimalWithNumeric…
…Argument` Fixes #468. This PR fixes false positives for `Performance/BigDecimalWithNumericArgument` when using float argument for `BigDecimal`. In Ruby 3.1 and later, cases where numbers are faster than strings are limited to `Integer`. For `Float`, strings are still faster: ```console $ cat example.rb require 'benchmark/ips' require 'bigdecimal' require 'bigdecimal/util' Benchmark.ips do |x| x.report('float string') { BigDecimal('4.2') } x.report('float with prec') { BigDecimal(4.2, Float::DIG + 1) } x.report('to_d string without prec') { '4.2'.to_d } x.report('to_d float without prec') { 4.2.to_d } x.report('to_d float with prec') { 4.2.to_d(Float::DIG + 1) } x.compare! end ``` ```console ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-darwin22] Warming up -------------------------------------- float string 246.214k i/100ms float with prec 173.880k i/100ms to_d string without prec 255.950k i/100ms to_d float without prec 181.033k i/100ms to_d float with prec 151.091k i/100ms Calculating ------------------------------------- float string 2.418M (± 5.5%) i/s - 12.064M in 5.004969s float with prec 1.685M (± 4.0%) i/s - 8.520M in 5.064059s to_d string without prec 2.460M (± 4.2%) i/s - 12.286M in 5.002392s to_d float without prec 1.781M (± 6.5%) i/s - 8.871M in 5.007829s to_d float with prec 1.584M (± 5.7%) i/s - 8.008M in 5.072184s Comparison: to_d string without prec: 2460462.7 i/s float string: 2418003.6 i/s - same-ish: difference falls within error to_d float without prec: 1781070.6 i/s - 1.38x slower float with prec: 1685372.9 i/s - 1.46x slower to_d float with prec: 1584419.5 i/s - 1.55x slower ```
- Loading branch information