数学库
从本章节开始将介绍标准程序库,这些章节中并不会给出每个函数的完整说明,而只说明标准库中提供了哪些功能。为了说明清楚,讲解过程中会回避某些微妙的选项和行为。用户可以在Lua参考手册中学习更多的知识。
math
(数学)库由一组标准的数学函数构成,包括三角函数(sin
、cos
、tan
、asin
、acos
等)、指数和对数函数(exp
、log
、log10
)、取整函数(floor
、ceil
)、max
和min
、生成伪随机数的函数(random
、randomseed
)以及变量pi
和huge
。其中huge
为Lua可以表示的最大数字。
所有的三角函数都使用弧度单位,可以用函数deg
和rad
来转换角度和弧度。如果使用角度单位,可以像这样重新定义三角函数:
local sin,asin, ... = math.sin, math.asin, ...
local deg, rad = math.deg, math.rad
math.sin = function(x) return sin(rad(x)) end
math.asin = function(x) return deg(asin(x)) end
...
函数math.random
用于生成伪随机数,可以用3种方式来调用它。如果在调用它时不提供任何参数,它将返回一个在区间[0,1)
内均匀分布的伪随机实数。如果提供了一个整数n
作为参数,它将返回一个在区间[1, n]
内的伪随机整数。例如,random(6)
就可以用来模拟一次掷骰子的结果。最后一种方式是在调用它时提供两个整数参数m
和n
,这样会得到一个在区间[m, n]
内的伪随机整数。
函数randomseed
用于设置伪随机数生成器的种子数,它的唯一参数就是这个种子数。通常在一个程序启动时,用一个固定的种子数来调用它,以此初始化伪随机数生成器。这样每次程序运行时,都会生成相同的伪随机数序列。从调试的角度看,这是一个不错的特性。对于一个游戏来说,则每次都会得到相同的情景。对此通常的解决方法是使用当前时间作为种子数:
math.randomseed(os.time())
函数os.time
返回一个表示当前时间的数字,一般这个数字表示从某个时间点开始至今的秒数。
math.random
函数使用了C标准库中的rand
函数,在某些C标准库的实现中,这个函数所产生的数字并不具备统计意义上的均匀分布特性。Lua的某些独立发行的版本中包含了更好的伪随机数生成器。
?