# math 库模块帮助文档

## math 成员列表 <a id="math" href="#math">&#x23;</a>

数学计算库  
这是自动导入的内置库

### math.abs(输入数值) <a id="math.abs" href="#math.abs">&#x23;</a>
计算绝对值

### math.acos(输入数值) <a id="math.acos" href="#math.acos">&#x23;</a>
计算反余弦值

### math.asin(输入数值) <a id="math.asin" href="#math.asin">&#x23;</a>
计算反正弦值

### math.atan(输入数值) <a id="math.atan" href="#math.atan">&#x23;</a>
计算反正切值

### math.atan2(x,y) <a id="math.atan2" href="#math.atan2">&#x23;</a>
x/y的反正切值

### math.ceil(输入数值) <a id="math.ceil" href="#math.ceil">&#x23;</a>
上取整为最接近的整数，  
正无穷大方向取相邻的整数，  
下取整请使用 math.floor 函数，  
四舍五入请使用 math.round 函数

### math.cos(输入数值) <a id="math.cos" href="#math.cos">&#x23;</a>
计算余弦值

### math.cosh(输入数值) <a id="math.cosh" href="#math.cosh">&#x23;</a>
双曲线余弦函数

### math.deg(输入弧度) <a id="math.deg" href="#math.deg">&#x23;</a>
弧度转换为角度

### math.dist(point1,point2) <a id="math.dist" href="#math.dist">&#x23;</a>
计算坐标点 point1 到坐标点 point2 之间的直线距离。  
参数可使用 ::POINT,POINTF 结构体或任何包含 x,y 字段（有效数值）的表

### math.dist(x1,y1,x2,y2) <a id="math.dist" href="#math.dist">&#x23;</a>
计算坐标点1（x1,y1） 到坐标点2（x2,y2）之间的直线距离。  
参数必须指定 4 个数值

### math.e <a id="math.e" href="#math.e">&#x23;</a>
自然对数的底数，约等于 2.718281828459 。

### math.exp(输入数值) <a id="math.exp" href="#math.exp">&#x23;</a>
计算以e为底x次方值

### math.floor(输入数值) <a id="math.floor" href="#math.floor">&#x23;</a>
下取整为最接近的整数，  
负无穷大方向取相邻的整数，  
上取整请使用 math.ceil 函数，  
四舍五入请使用 math.round 函数

### math.fmod(x,y) <a id="math.fmod" href="#math.fmod">&#x23;</a>
计算并返回浮点数除法 x/y 的余数，  
返回的余数符号与被除数 x 相同（基于向零取整）。  
注意在 aardio 中 `x % y` 返回的余数符号与 y 相同（基于向下取整）。

### math.frexp(输入数值) <a id="math.frexp" href="#math.frexp">&#x23;</a>
把双精度数val分解为数字部分（尾数）和以2为底的指数n,即val=x*2n

### math.isFinite() <a id="math.isFinite" href="#math.isFinite">&#x23;</a>
如果参数是一个有效数值,  
并且不是正负无穷大则返回 true，否则返回 false。  
如果传入字符串会直接返回 false

### math.isInteger() <a id="math.isInteger" href="#math.isInteger">&#x23;</a>
参数是一个数值并且是整数返回true，否则返回false。  
如果传入字符串会直接返回 false

### math.isSize64() <a id="math.isSize64" href="#math.isSize64">&#x23;</a>
判断参数是否 math.size64 长整数对象

### math.ldexp(value,n) <a id="math.ldexp" href="#math.ldexp">&#x23;</a>
计算value * 2的n次方

### math.log(输入数值) <a id="math.log" href="#math.log">&#x23;</a>
计算自然对数

### math.log10(输入数值) <a id="math.log10" href="#math.log10">&#x23;</a>
计算以10为基数的对数

### math.logBase(x,base) <a id="math.logBase" href="#math.logBase">&#x23;</a>
用于返回以 base 为底，x 的对数

### math.max(输入数值, ) <a id="math.max" href="#math.max">&#x23;</a>
返回多个数值中较大的一个。  
可输入 2 个以上的参数

### math.min(输入数值, ) <a id="math.min" href="#math.min">&#x23;</a>
返回多个数值中较小的一个。  
可输入 2 个以上的参数

### math.modf(输入数值) <a id="math.modf" href="#math.modf">&#x23;</a>
把数拆分为整数、小数。  
返回两个值。

### math.mulDiv(a,b,c) <a id="math.mulDiv" href="#math.mulDiv">&#x23;</a>
返回a乘b再除以c的结果,并自动四舍五入转为整数  
可尽量使运算不会溢出,运算错误则返回-1  

注意这个函数是系统 API 函数，  
参数只能传入数值不能传入字符串

### math.pi <a id="math.pi" href="#math.pi">&#x23;</a>
圆周与直径的比值常数（ π ）

### math.rad(输入角度) <a id="math.rad" href="#math.rad">&#x23;</a>
角度转换为弧度

### math.random <a id="math.random" href="#math.random">&#x23;</a>
返回随机数。  
生成随机字符串请使用 string.random 函数。  
生成安全随机数请使用 crypt.random 库。

### math.random() <a id="math.random" href="#math.random">&#x23;</a>
返回 0 到 1 之间的随机数（小数），  
可用乘法与 math.round 函数转为整数

### math.random(max) <a id="math.random" href="#math.random">&#x23;</a>
返回从 1 到 max 范围的随机整数,参数必须是整数,  
可以利用除法将返回值转换为小数

### math.random(min,max) <a id="math.random" href="#math.random">&#x23;</a>
返回从 min 到 max 范围的随机整数,参数必须是 2 个整数,  
可以利用除法将返回值转换为小数。  
此函数传入字符串会自动转换为数值。

### math.randomize() <a id="math.randomize" href="#math.randomize">&#x23;</a>
设置随机数发生器的种子。  
参数可以指定任意数值，省略则自动生成一个随机数作为随机数种子。  
所有线程启动时都会自动生成一个安全的随机数作为随机数种子。  

[使用手册相关文档](https://www.aardio.com/zh-cn/doc/library-guide/builtin/string/rand.html)

### math.round <a id="math.round" href="#math.round">&#x23;</a>
四舍五入，舍入规则以取整为例：  
小数小于0.5取相邻的绝对值更小的整数，  
小数大于0.5取相邻的绝对值更大的整数，  
小数等于0.5取相邻的正无穷大方向的整数。  

注意四舍五入非常多的规则，  
各种语言的默认实现并不完全一致，  
计算机浮点数都存在可容忍的精度误差

### math.round(数值,精度) <a id="math.round" href="#math.round">&#x23;</a>
四舍五入取接近的数，  
精度指定小数后的位数,默认为0（取整）

### math.roundToEven <a id="math.roundToEven" href="#math.roundToEven">&#x23;</a>
银行家舍入法，  
舍入规则为：尾数四舍六入，五后为零前凑偶（只看一位零，用于修正浮点误差）。  
用于解决 1 到 9 出现机率一样，5到9进位导致进多舍少的问题。  

aardio 取整默认使用标准银行家舍入法，  
只有需要指定精度时才有必要使用 math.roundToEven 。  

注意四舍五入存在不同规则，各语言默认实现并非完全一致，  
计算机浮点数也存在可容忍的误差。

### math.roundToEven(数值,精度) <a id="math.roundToEven" href="#math.roundToEven">&#x23;</a>
使用改良版银行家舍入法转换并返回参数@1指定的数值，  
参数@2指定返回数值的小数位数,默认为0（也就是取整）

### math.sin(输入数值) <a id="math.sin" href="#math.sin">&#x23;</a>
计算正弦值

### math.sinh(输入数值) <a id="math.sinh" href="#math.sinh">&#x23;</a>
正弦值(角度)

### math.size64 <a id="math.size64" href="#math.size64">&#x23;</a>
创建无符号 64 位无符号正整数（cdata 类型对象）。  
参数可输入 10 进制数值，或 0x，0X 前缀的 16 进制数值。  
返回对象可使用 tostring 函数转换为字符串,可用 tonumber 函数转换为 64 位浮点数,  

2 个同类型的 math.size64 对象作为操作数可支持大于,小于,等于等关系运算符。  
math.size64 对象可与普通数值进行 `+,-,*,/` 等运算。  
操作数为 math.size64 对时使用除运算符 `/` 返回浮点数值，使用其他算术运算返回 math.size64 对象。  

1、API函数返回值中 LONG 类型返回为 math.size64 对象。  
math.size64 对象也支持连接操作符（自动将左右操作数转为字符串）。  
2、在API回调函数中，LONG类型回调参数为 math.size64 对象  
3、结构体中LONG类型，API函数的LONG&类型,实际赋值为math.size64对象时,  
则始终保持该对象类型及地址不变，反之则处理为64位浮点数值  

64位浮点数值表示的有效整数在正负 (2**53 - 1) 之间,  
可以表示8PB文件长度，只有必须用到64位全部字节表示整数时,  
才有必要使用math.size64对象.

### math.size64("数值") <a id="math.size64" href="#math.size64">&#x23;</a>
参数使用字符串指定无符号 64 位正整数。  
参数可指定 10 进制数值或 0x 前缀的 16 进制数值。  
参数不支持自定义进制与下划线分隔符，忽略开始的空白字符，忽略有效数值后的多余字符。  
省略参数或字符串参数未指定有效数值时初始化为 0 。  

aardio中普通数值存储为 64 位浮点数，可表示的有效整数为正负 `2**53-1` 之间。  
math.size64 则能表示更大的正整数。

### math.size64() <a id="math.size64" href="#math.size64">&#x23;</a>
[返回对象:mathSize64Object](https://www.aardio.com/zh-cn/doc/library-reference/math/_.html#mathSize64Object)

### math.size64(math.size64对象) <a id="math.size64" href="#math.size64">&#x23;</a>
复制无符号64位正整数，  
使用此64位整数创建并返回size64对象

### math.size64(低32位,高32位) <a id="math.size64" href="#math.size64">&#x23;</a>
创建并返回size64对象，  
参数使用两个32位数值指定无符号64位正整数，  
使用此64位整数创建并返回size64对象

### math.size64(结构体) <a id="math.size64" href="#math.size64">&#x23;</a>
参数须传入不小于64位的结构体,  
将结构体内存转换为64位无符号整数，  
使用此64位整数创建并返回size64对象

### math.sqrt(输入数值) <a id="math.sqrt" href="#math.sqrt">&#x23;</a>
计算平方根（ √x ）

### math.stringify <a id="math.stringify" href="#math.stringify">&#x23;</a>
将数值转换为字符串。  
可避免使用科学计数法，也不会在小数后补 0 。  

aardio 在将数值转换为字符串时，  
大于等于 `1e14` 或者小于 `1e-4` (即 0.0001) 的数默认以科学计数法表示。  
等价于调用 string.format 函数并将格式化代码指定为 `%.14g`

### math.stringify(数值,最大小数位) <a id="math.stringify" href="#math.stringify">&#x23;</a>
- 将参数 @1 指定的数值或 math.size64 对象转换为 10 进制字符串。  
参数 @1 指定其他类型参数则转换为字符串后返回。  
- 可选用参数 @2 指定最大小数位数，默认为 15。  

返回的字符串不使用科学计数法，小数尾部不会补 0。  
此函数使用区域设置的小数点，需要自定义小数点请改用 tostring 函数。

### math.tan(输入数值) <a id="math.tan" href="#math.tan">&#x23;</a>
计算正切值

### math.tanh(输入数值) <a id="math.tanh" href="#math.tanh">&#x23;</a>
计算正切值(角度)

### math.validateRange(length,startIndex,endIndex) <a id="math.validateRange" href="#math.validateRange">&#x23;</a>
校验并转换基于 1 的索引范围数值。  
省略 startIndex 则默认为 1,省略 endIndex 则默认为 length。  
如果 startIndex 或 endIndex 为负数则按尾部倒计数并转换为正值，-1 表示最后一个。  
如果转换后 startIndex 小于 1 则设为 1，如果 endIndex 大于 length 则设为 length。\如果 startIndex,endIndex 都指定正整数，则可以省略 length（不校验最大长度）。  

转换后如果 startIndex 大于 endIndex 则返回 null，  
否则返回转换后的 startIndex,endIndex

## mathSize64Object 成员列表 <a id="mathSize64Object" href="#mathSize64Object">&#x23;</a>

### mathSize64Object.add() <a id="mathSize64Object.add" href="#mathSize64Object.add">&#x23;</a>
[返回对象:mathSize64Object](https://www.aardio.com/zh-cn/doc/library-reference/math/_.html#mathSize64Object)

### mathSize64Object.add(数值) <a id="mathSize64Object.add" href="#mathSize64Object.add">&#x23;</a>
加法运算,函数修改并返回自身,  
使用+运算符替代此函数可返回新值不改变自身  
参数可以是math.size64对象,  
或者是普通数值,允许使用负数

### mathSize64Object.div() <a id="mathSize64Object.div" href="#mathSize64Object.div">&#x23;</a>
[返回对象:mathSize64Object](https://www.aardio.com/zh-cn/doc/library-reference/math/_.html#mathSize64Object)

### mathSize64Object.div(数值) <a id="mathSize64Object.div" href="#mathSize64Object.div">&#x23;</a>
除法运算，函数修改并返回自身。  
参数可以是 math.size64 对象,  
或者是普通正整数，注意运算结果不是浮点数。  

math.size64 对象的除法运算符使用 divf 而不是 div 函数运算

### mathSize64Object.divf(数值) <a id="mathSize64Object.divf" href="#mathSize64Object.divf">&#x23;</a>
除法运算，返回普通浮点数值。  
此函数不修改对象自身而是返回一个普通数值。  
math.size64 对象的除法运算符使用此函数运算

### mathSize64Object.format() <a id="mathSize64Object.format" href="#mathSize64Object.format">&#x23;</a>
转换字节长度到适合的最大单位表示的文本,  
单位使用 bytes,KB,MB,GB等

### mathSize64Object.greaterThan() <a id="mathSize64Object.greaterThan" href="#mathSize64Object.greaterThan">&#x23;</a>
判断是否大于指定的数值,  
参数可以是普通正负数值，也可以是math.size64对象  
注意math.size64对象不能直接用`>`,`>=`与普通数值进行比较

### mathSize64Object.lessThan() <a id="mathSize64Object.lessThan" href="#mathSize64Object.lessThan">&#x23;</a>
判断是否小于指定的数值,  
参数可以是普通正负数值，也可以是math.size64对象  
注意math.size64对象不能直接用`<`,`<=`与普通数值进行比较

### mathSize64Object.lshift(数值) <a id="mathSize64Object.lshift" href="#mathSize64Object.lshift">&#x23;</a>
按位左移,函数修改并返回自身,  
使用`<<`运算符替代此函数可返回新值不改变自身  
参数只能是普通正整数

### mathSize64Object.mod() <a id="mathSize64Object.mod" href="#mathSize64Object.mod">&#x23;</a>
[返回对象:mathSize64Object](https://www.aardio.com/zh-cn/doc/library-reference/math/_.html#mathSize64Object)

### mathSize64Object.mod(数值) <a id="mathSize64Object.mod" href="#mathSize64Object.mod">&#x23;</a>
取模运算,函数修改并返回自身,  
使用%运算符替代此函数可返回新值不改变自身  
参数可以是math.size64对象,  
或者是普通正整数

### mathSize64Object.mul() <a id="mathSize64Object.mul" href="#mathSize64Object.mul">&#x23;</a>
[返回对象:mathSize64Object](https://www.aardio.com/zh-cn/doc/library-reference/math/_.html#mathSize64Object)

### mathSize64Object.mul(数值) <a id="mathSize64Object.mul" href="#mathSize64Object.mul">&#x23;</a>
乘法运算,函数修改并返回自身,  
使用*运算符替代此函数可返回新值不改变自身  
参数可以是math.size64对象,  
或者是普通正整数

### mathSize64Object.reset(低32位,高32位) <a id="mathSize64Object.reset" href="#mathSize64Object.reset">&#x23;</a>
重新设置值  
支持构造math.size64的所有构造参数

### mathSize64Object.rshift(数值) <a id="mathSize64Object.rshift" href="#mathSize64Object.rshift">&#x23;</a>
按位右移,函数修改并返回自身,  
使用`>>`运算符替代此函数可返回新值不改变自身  
参数只能是普通正整数

### mathSize64Object.split32() <a id="mathSize64Object.split32" href="#mathSize64Object.split32">&#x23;</a>
返回低32位,高32位数值

### mathSize64Object.sub() <a id="mathSize64Object.sub" href="#mathSize64Object.sub">&#x23;</a>
[返回对象:mathSize64Object](https://www.aardio.com/zh-cn/doc/library-reference/math/_.html#mathSize64Object)

### mathSize64Object.sub(数值) <a id="mathSize64Object.sub" href="#mathSize64Object.sub">&#x23;</a>
减法运算,函数修改并返回自身,  
使用-运算符替代此函数可返回新值不改变自身  
参数可以是math.size64对象,  
或者是普通正整数

### mathSize64Object.swap() <a id="mathSize64Object.swap" href="#mathSize64Object.swap">&#x23;</a>
大小端字节序反向转换
