【Lua】如何生成随机数

生成随机数

众所周知,为了性能考虑,模块的默认底层是不支持float的,那么如果此时希望使用math库生成随机数怎么办呢?

使用Float LOD

只有float lod才支持math库,所以开发者可以使用带Float字样的lod,或者带8955F字样的lod(202F/268F);
但是请注意,这个lod可能带来某种程度的性能下降;

使用rtos.tick()生成伪随机数

废话不多说,上代码:

  1. -- luat math lib
  2. require "bit"
  3. module(..., package.seeall)
  4. local seed = tonumber(tostring(os.time()):reverse():sub(1, 7)) + rtos.tick()
  5. function randomseed(val)
  6. seed = val
  7. end
  8. function random()
  9. local next = seed
  10. next = next * 1103515245
  11. next = next + 12345
  12. local result = (next / 65536) % 2048
  13. next = next * 1103515245
  14. next = next + 12345
  15. result = result * 2 ^ 10
  16. result = bit.bxor(result, (next / 65536) % 1024)
  17. next = next * 1103515245
  18. next = next + 12345
  19. result = result * 2 ^ 10
  20. result = bit.bxor(result, (next / 65536) % 1024)
  21. seed = next
  22. return result
  23. end

调用方法:

  1. print(random())
  • 发表于 2018-11-15 12:46
  • 阅读 ( 3567 )
  • 分类:默认分类

0 条评论

请先 登录 后评论
不写代码的码农
技术销售Delectate

43 篇文章

作家榜 »

  1. 技术销售Delectate 43 文章
  2. 陈夏 26 文章
  3. 国梁 24 文章
  4. miuser 21 文章
  5. 晨旭 20 文章
  6. 朱天华 19 文章
  7. 金艺 19 文章
  8. 杨奉武 18 文章