数学库

  从本章节开始将介绍标准程序库,这些章节中并不会给出每个函数的完整说明,而只说明标准库中提供了哪些功能。为了说明清楚,讲解过程中会回避某些微妙的选项和行为。用户可以在Lua参考手册中学习更多的知识。

  math(数学)库由一组标准的数学函数构成,包括三角函数(sincostanasinacos等)、指数和对数函数(exploglog10)、取整函数(floorceil)、maxmin、生成伪随机数的函数(randomrandomseed)以及变量pihuge。其中huge为Lua可以表示的最大数字。

  所有的三角函数都使用弧度单位,可以用函数degrad来转换角度和弧度。如果使用角度单位,可以像这样重新定义三角函数:

  1. local sin,asin, ... = math.sin, math.asin, ...
  2. local deg, rad = math.deg, math.rad
  3. math.sin = function(x) return sin(rad(x)) end
  4. math.asin = function(x) return deg(asin(x)) end
  5. ...

  函数math.random用于生成伪随机数,可以用3种方式来调用它。如果在调用它时不提供任何参数,它将返回一个在区间[0,1)内均匀分布的伪随机实数。如果提供了一个整数n作为参数,它将返回一个在区间[1, n]内的伪随机整数。例如,random(6)就可以用来模拟一次掷骰子的结果。最后一种方式是在调用它时提供两个整数参数mn,这样会得到一个在区间[m, n]内的伪随机整数。

  函数randomseed用于设置伪随机数生成器的种子数,它的唯一参数就是这个种子数。通常在一个程序启动时,用一个固定的种子数来调用它,以此初始化伪随机数生成器。这样每次程序运行时,都会生成相同的伪随机数序列。从调试的角度看,这是一个不错的特性。对于一个游戏来说,则每次都会得到相同的情景。对此通常的解决方法是使用当前时间作为种子数:

  1. math.randomseed(os.time())

  函数os.time返回一个表示当前时间的数字,一般这个数字表示从某个时间点开始至今的秒数。

  math.random函数使用了C标准库中的rand函数,在某些C标准库的实现中,这个函数所产生的数字并不具备统计意义上的均匀分布特性。Lua的某些独立发行的版本中包含了更好的伪随机数生成器。

?