如何解决从一组浮点值中提取舍入参数
给出以下浮点值:
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%
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。