第一版是为 Lua 5.0 编写的。虽然在很大程度上仍然适用于后续版本,但有一些区别。
第四版针对 Lua 5.3,可在 Amazon 和其他书店购买。
购买本书,您还可以帮助支持 Lua 项目


18 – 数学库

在本章(以及关于标准库的其他章节)中,我的目的不是给出每个函数的完整规范,而是向您展示该库可以提供哪种功能。为了阐述清楚,我可能会省略一些微妙的选项或行为。主要思想是激发您的好奇心,然后可以通过参考手册来满足您的好奇心。

math 库包含一组标准数学函数,例如三角函数(sincostanasinacos 等)、指数和对数(exploglog10)、舍入函数(floorceil)、maxmin,以及变量 pi。数学库还定义运算符 `^´ 作为指数运算符。

所有三角函数都以弧度为单位工作。(在 Lua 4.0 之前,它们以度为单位工作。)您可以使用函数 degrad 在度和弧度之间进行转换。如果您想以度为单位工作,则可以重新定义三角函数

    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 函数生成伪随机数。我们可以用三种方式调用它。当我们不带参数调用它时,它将返回一个均匀分布在区间 [0,1) 中的伪随机实数。当我们只带一个参数(整数 n)调用它时,它将返回一个整数伪随机数 x,使得 1 <= x <= n。例如,您可以使用 random(6) 模拟骰子的结果。最后,我们可以使用两个整数参数 lu 调用 random,以获得一个伪随机整数 x,使得 l <= x <= u

你可以使用 randomseed 函数为伪随机生成器设置种子;其唯一的数字参数是种子。通常,当程序启动时,它会使用固定种子初始化生成器。这意味着,每次你运行程序时,它都会生成相同的伪随机数序列。对于调试来说,这是一个不错的特性;但在游戏中,你会一次又一次地遇到相同的情况。解决此问题的常用技巧是使用当前时间作为种子

    math.randomseed(os.time())
os.time 函数返回一个表示当前时间的数字,通常是自某个纪元以来的秒数。)