瞎扯淡 rand vs rand

lyb124553153 · 2022年06月10日 · 最后由 pynix 回复于 2022年06月11日 · 353 次阅读

刷题的时候发现的,同为 rand() 方法,效率也有差异

require 'benchmark'
Benchmark.bm do |x|
  n = 5000000

  x.report {  n.times { Random.rand } }
  x.report {  n.times { rand } }
  x.report { n.times { Random.rand 5000 } }
  x.report { n.times { rand 5000 } }
end

具体表现为 Random.random 方法 会被 Keneral.rand() 略微慢一点, 但是加入参数以后 Keneral.rand 的执行时间就会达到 Random.rand 的两倍。 查了下文档 说是 Kerner.rand(number)对传入的参数执行 numebr.abs,但是 Random.rand 遇到负数入参 会抛出异常

可以挖深一点源码有什么不同。

Rei 回复

😏 其实这个是我想问的,再点进去是 c 的代码没有弄懂,跑出来问

random 这种东西和具体实现相关性很大,跳出实现谈性能就是刷流氓,SecureRandom 比这个慢几千倍吧。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号