最代码官方
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实例
请下载代码后再发表评论
最近下载




最近浏览
