最代码官方
								2014-06-25 14:43:39
							
							
								原证
							redis lua脚本学习笔记math.random()获取随机数
最近在公司研究lua在redis中的使用,其中有个算法要使用到随机数,但运行lua的math.random()后一直返回同一个数字,万能的stackoverflow也没能得到答案,最后通过一个很magic的方式实现的。
代码如下:
function rnd(max)
  --lua的第1次random数不靠谱,取第3次的靠谱
  local ret=0
  math.randomseed(os.time())
  for i=1,3 do
    n = math.random(max)
    ret=n
  end
  return ret
end
print(rnd(10))
每次运行的结果都不同
10
9
8
基本能满足需求了,虽然会稍微损耗些cpu。
另外的解决思路是通过client端生成随机数来调用,比如java的Random类。
另附上lua的math函数库
| 函数名 | 描述 | 示例 | 结果 | 
| pi | 圆周率 | math.pi | 3.1415926535898 | 
| abs | 取绝对值 | math.abs(-2012) | 2012 | 
| ceil | 向上取整 | math.ceil(9.1) | 10 | 
| floor | 向下取整 | math.floor(9.9) | 9 | 
| max | 取参数最大值 | math.max(2,4,6,8) | 8 | 
| min | 取参数最小值 | math.min(2,4,6,8) | 2 | 
| pow | 计算x的y次幂 | math.pow(2,16) | 65536 | 
| sqrt | 开平方 | math.sqrt(65536) | 256 | 
| mod | 取模 | math.mod(65535,2) | 1 | 
| modf | 取整数和小数部分 | math.modf(20.12) | 20 0.12 | 
| randomseed | 设随机数种子 | math.randomseed(os.time()) | |
| random | 取随机数 | math.random(5,90) | 5~90 | 
| rad | 角度转弧度 | math.rad(180) | 3.1415926535898 | 
| deg | 弧度转角度 | math.deg(math.pi) | 180 | 
| exp | e的x次方 | math.exp(4) | 54.598150033144 | 
| log | 计算x的自然对数 | math.log(54.598150033144) | 4 | 
| log10 | 计算10为底,x的对数 | math.log10(1000) | 3 | 
| frexp | 将参数拆成x * (2 ^ y)的形式 | math.frexp(160) | 0.625 8 | 
| ldexp | 计算x * (2 ^ y) | math.ldexp(0.625,8) | 160 | 
| sin | 正弦 | math.sin(math.rad(30)) | 0.5 | 
| cos | 余弦 | math.cos(math.rad(60)) | 0.5 | 
| tan | 正切 | math.tan(math.rad(45)) | 1 | 
| asin | 反正弦 | math.deg(math.asin(0.5)) | 30 | 
| acos | 反余弦 | math.deg(math.acos(0.5)) | 60 | 
| atan | 反正切 | math.deg(math.atan(1)) | 45 | 
猜你喜欢
- java检测lua脚本文件变化, 并自动重新载入
- spring+springdata redis入门教程实现java端调用redis lua脚本片段和lua脚本文件
- 史上最全的随机数生成java算法
- java两种方法生成随机数
- java生成和为指定数的6个随机数工具类
- js实现大乐透模拟彩票选号效果
- 公司java项目用到了随机数,整理分享为java公共类使用
- 地球重力场模型全空间全要素场元计算Fortran代码
- 华为算法机试---输入一个链表,按链表值从尾到头的顺序返回一个ArrayList。
- java不用中间变量交换A和B的值的算法
- java排列组合算法代码实现
- JAVA递归算法demo实例
请下载代码后再发表评论
     最近下载
最近下载
				



 最近浏览
最近浏览
				 
                 
                 
                