Skip to content

6.7 - 数学函数

该库提供了基础数学方法。其提供的函数和常量都放在表 math 中。说明中带有 "integer/float" 的函数中对于整数参数会给出整数结果而对于浮点数参数会给出浮点数结果。用于四舍五入的函数math.ceilmath.floor、以及math.modf会根据情况返回整数或浮点数。

math.abs (x)

返回 x 的绝对值。(integer/float)

math.acos (x)

返回 x 的反余弦(以弧度表示)。

math.asin (x)

返回 x 的反正弦(以弧度表示)。

math.atan (y [, x])

返回 y/x 的反正切(以弧度表示),使用两个参数的符号来查找结果所处的象限。x 为零时也会正确计算。

x 的默认值为1, 所以调用 math.atan(y) 会返回 y 的反正切值。

math.ceil (x)

对 x 向上取整。结果是个大于或等于 x 的整数。

math.cos (x)

返回 x 的余弦(假定参数是弧度)。

math.deg (x)

将弧度表示的角 x 转换为角度表示。

math.exp (x)

返回ex的值(这里的 e 是自然对数的底)。

math.floor (x)

对 x 向下取整。结果是个小于或等于 x 的整数。

math.fmod (x, y)

取余,结果是将 x 除以 y 的商向零圆整后的余数。(integer/float)

math.huge

浮点值 HUGE_VAL ,比任何数值都要大。

math.log (x [, base])

计算以 base 为底的 x 对数。其中 base 默认为 e (所以该函数默认返回 x 的自然对数)。

math.max (x, ···)

返回所给参数中的最大值,使用Lua操作符 < 计算。

math.maxinteger

整数最大值。

math.min (x, ···)

返回所给参数中的最小值,使用Lua操作符 < 计算。

math.mininteger

整数最小值。

math.modf (x)

返回 x 中的整数和小数部分。其第二个返回值始终是浮点数。

math.pi

π的值

math.rad (x)

将 x 度的角转换为弧度表示。

math.random ([m [, n]])

如果没有参数传入,则返回一个在 [0,1) 区间内的伪随机浮点数。如果将 m 和 n 两个参数传入整数,则 math.random 会返回一个处在 [m,n) 区间内的伪随机整数。当代码 math.random(n) 中的 n 为负数时,其等效于math.random(1,n) 。当传入零时, math.random(0) 的结果为一个整数,该整数中的每个位都是为随机的。

math.randomseed ([x [, y]])

如果调用时至少传入了一个参数,那么整数参数 x 和 y 将被放进一个128位(源码内部其实是个lua_Unsigned[4],即一个256位数,其中 x 和 y 相间放入其中,其他位由1或0填充,然后会在每次生成随机数之后变更数据,所以可以当作128位理解)的随机种子 seed 以重新初始化伪随机生成器;相同的随机种子会生成的一系列随机数也是相同的。参数 y 默认为0。

如果调用时省略所有参数,Lua将会简单随机生成一个种子(目前源码中的算法是将当前时间戳和当前Lua状态机的内存地址合并为一个128整数作为随机种子)。

该函数的返回值是两个整数,它们最后所设置的随机种子的值的组成部分(128位中的两个64位整数),再次设置相同的值会重复生成随机数列。

为了确保随机生成器的初始状态足够得随机(或者是相反的情况,例如在调试时,你需要固定随机),你应当显式地传入参数来调用math.randomseed

math.sin (x)

返回 x 的正弦(以弧度表示)。

math.sqrt (x)

返回 x 的平方根。(你也可以使用表达式 x ^ 0.5 来做等效的计算。)

math.tan (x)

返回 x 的正切(以弧度表示)。

math.tointeger (x)

如果 x 可以转换为一个整数值,那么返回该整数值。否则返回fail

math.type (x)

如果 x 是整数,则返回 "integer" 。如果是浮点数,则返回 "float"。如果 x 不是数字则返回fail

math.ult (m, n)

返回一个布尔值,表示将 m 和 n 做无符号整数比较,为true则表示 m 小于 n 。