Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 从一组浮点值中提取舍入参数_Ruby_Crystal Lang_Floating Point Conversion - Fatal编程技术网

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

Ruby 从一组浮点值中提取舍入参数,ruby,crystal-lang,floating-point-conversion,Ruby,Crystal Lang,Floating Point Conversion,给定以下浮点值: n00.0, n0.0, n.0, 0.n, 0.0n, 0.00n, 0.000n 其中n可以是1、2或5,提取用作舍入参数的相应整数值的最智能、最快速的方法是什么 -2, -1, 0, 1, 2, 3, 4 目前,我使用的是一个哈希表:快速,但我认为不是那么聪明 我认为使用散列是一种很好的方法,并且怀疑它是否会被-Math.log10(k).floor所超越,因此我运行了以下基准测试 构造散列 为基准构建测试阵列(1500万个元素) 执行基准测试 我目前使用的是Cr

给定以下浮点值:

n00.0, n0.0, n.0, 0.n, 0.0n, 0.00n, 0.000n 
其中n可以是1、2或5,提取用作舍入参数的相应整数值的最智能、最快速的方法是什么

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

目前,我使用的是一个哈希表:快速,但我认为不是那么聪明

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

构造散列

为基准构建测试阵列(1500万个元素)

执行基准测试


我目前使用的是Crystal Lang(或Ruby)。目前浮点值,但可能是字符串。
Number#personalize
的实现应该会给人一些启发:
-Math.log10(value).floor
成功了!比散列快60倍以上。感谢您向Crystal提交了基准测试,那里的哈希似乎慢了4倍,但我不是100%相信我欺骗了LLVM消除了所有代码(最幼稚的端口让它意识到log10操作的结果从未被读取,只是完全消除了它,这可能就是60x注释的来源).请注意,问题也标有crystal lang。Crystal是一种作为前端实现的编程语言,请参见
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 } 
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.02, 0.05, 500.0, 50.0, 50.0, 20.0] 
arr.last(10)
  #=> [500.0, 0.5, 0.1, 20.0, 0.01, 0.1, 500.0, 50.0, 0.05, 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%