从一组浮点值中提取舍入参数

问题描述

给出以下浮点值:

n00.0,n0.0,n.0,0.n,0.0n,0.00n,0.000n 

其中n可以是1、2或5,什么是提取相应整数值以用作舍入参数的最聪明,最快的方法

-2,-1,1,2,3,4 

此刻,我正在使用哈希表:我认为是快速的,但还不算聪明!

解决方法

我认为使用散列是一种好方法,并且怀疑它是否会胜过-Math.log10(k).floor,因此我运行了以下基准测试。

构造哈希值

h = { 100.0=>-2,10.0=>-1,1.0=>0,0.1=>1,0.01=>2,200.0=>-2,20.0=>-1,2.0=>0,0.2=>1,0.02=>2,500.0=>-2,50.0=>-1,5.0=>0,0.5=>1,0.05=>2 } 

为基准测试构建测试数组(1500万个元素)

n = 1_000_000
(arr = h.keys.flat_map { |k| [k]*n }.shuffle).size
  #=> 15_000_000 
arr.first(10)
  #=> [20.0,0.02,5.0,0.5,0.05,500.0,50.0,20.0] 
arr.last(10)
  #=> [500.0,0.1,20.0,0.01,0.5] 

执行基准测试

require 'fruity'

compare(
  hash:  -> { arr.each { |k| h[k] } },log10: -> { arr.each { |k| -Math.log10(k).floor } }
)
Running each test once. Test will take about 42 seconds.
hash is faster than log10 by 60.0% ± 10.0%

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...