Lua中的math.random返回的值不稳定。

我想知道为什么我的脚本数据无效,于是我试着测试math.random,因为似乎是来自它的返回值。这是我从Lua控制台得到的:

> return math.random(0.8, 1.2);
0.8
> return math.random(0.8, 1.2);
0.8
> return math.random(0.8, 1.2);
0.8
> return math.random(0.8, 1.2);
1.8
> return math.random(0.8, 1.2);
0.8
> return math.random(0.8, 1.2);
1.8
> return math.random(0.8, 1.2);
0.8
> return math.random(0.8, 1.2);
1.8
> return math.random(0.8, 1.2);
0.8

我对得到的结果有点困惑,有人能解释一下吗?

点赞
用户118068
用户118068

upperlower必须是整数。否则,Lua会将upper强制转换为整数,有时会造成未预期的结果,例如有时会使用math.floor(upper),有时会使用math.ceil(upper)(对于lower同样适用)。

2015-05-06 19:48:12
用户4871865
用户4871865

Will 跟 Yanik Rochon 说:

upperlower 必须是整数。否则 Lua 会将 upper 转换成整数,有时会得到 math.floor(upper),有时会得到 math.ceil(upper),结果可能出乎意料(lower 同理)。

因此:

return math.random(0.8, 1.2);
0.8

文档参考说:

**math.random ([m [, n]])**:这个函数是 ANSI C 提供的简单伪随机数生成器函数 rand 的接口(不能保证其统计特性)。当不带参数调用时,返回 [0, 1) 范围内的均匀伪随机实数。当以整数 m 调用时,math.random 返回 [1, m] 范围内的均匀伪随机整数。当以两个整数 mn 调用时,math.random 返回 [m, n] 范围内的均匀伪随机整数。

来源:http://goo.gl/eJvLup

2015-05-06 20:12:10