# Builtin - 数值计算

## `_and(x, y)`

声明：function

与，返回位运算二进制X And 二进制Y

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型    | 说明 |
| ---- | ------- | ---- |
| `x`  | integer | 整数 |
| `y`  | integer | 整数 |

返回：integer

### 示例

```tsl
echo _and(6, 3); // 返回十进制(6=110) and 3=(11) 最后得到二进制10
// 输出：2
```

## `_not(x)`

声明：function

非，返回位运算Not X，把二进制x全部取反,即非0为1,非1为0

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型    | 说明 |
| ---- | ------- | ---- |
| `x`  | integer | 整数 |

返回：integer

### 示例

```tsl
echo _not (4);
// 输出：-5
// 返回十进制_not (4=00000100) 取非运算最后得到二进制11111011，十进制//是-5,注意：在计算机中,负数以其正值的补码形式表示。补码是烦吗+1，
// 5=00000101，得到反码11111010，得到补码11111011=-5
```

## `_or(x, y)`

声明：function

或，返回位运算X Or Y

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型    | 说明 |
| ---- | ------- | ---- |
| `x`  | integer | 整数 |
| `y`  | integer | 整数 |

返回：integer

### 示例

```tsl
echo _or (6, 3);
// 输出：7
// 返回十进制(6=110) or 3=(11) 最后得到二进制111，十进制是7
```

## `_rol(x, y)`

声明：function

循环左移位，返回位运算X Rol Y，二进制X各位左移Y位，原来的高Y位变成低Y位

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型    | 说明 |
| ---- | ------- | ---- |
| `x`  | integer | 整数 |
| `y`  | integer | 整数 |

返回：integer

### 示例

```tsl
echo _rol (36, 3);
// 输出：288
// 返回十进制 (36=100100) 左移3位,最后得到二进制100100000，十进制是//288
```

## `_ror(x, y)`

声明：function

循环右移位，返回位运算X Ror Y

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型    | 说明 |
| ---- | ------- | ---- |
| `x`  | integer | 整数 |
| `y`  | integer | 整数 |

返回：integer

### 示例

```tsl
echo _ror (36, 2);
// 输出：9
// 返回十进制 (36=100100) 右移2位,最后得到二进制00001001，十进制是9
```

## `_shl(x, y)`

声明：function

左移位，返回位运算X Shl Y，二进制X左移 Y位

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型    | 说明 |
| ---- | ------- | ---- |
| `x`  | integer | 整数 |
| `y`  | integer | 整数 |

返回：integer

### 示例

```tsl
echo _shl (6, 3);
// 输出：48
// 返回十进制 (6=110) _Shl 3 最后得到二进制110000，十进制是48
```

## `_shr(x, y)`

声明：function

右移位，返回位运算X Shr Y，二进制X右移 Y位

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型    | 说明 |
| ---- | ------- | ---- |
| `x`  | integer | 整数 |
| `y`  | integer | 整数 |

返回：integer

### 示例

```tsl
echo _shr (36, 3);
// 输出：4
// 返回十进制 (36=100100) _Shr 3最后得到二进制00000100，十进制是4
```

## `_xor(x, y)`

声明：function

异或，返回位运算X Xor Y

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型    | 说明 |
| ---- | ------- | ---- |
| `x`  | integer | 整数 |
| `y`  | integer | 整数 |

返回：integer

### 示例

```tsl
echo _xor (6, 3);
// 输出：5
// 返回十进制 (6=110) Xor (3=011) 最后得到二进制101，十进制是5
```

## `abs(x)`

声明：function

返回X的绝对值

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：real

### 示例

```tsl
// 求-2的绝对值
echo abs(-2);
// 输出：2
```

## `arcCos(x)`

声明：function

反余弦函数，返回弧度值（介于0和π之间）

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明                                 |
| ---- | ---- | ------------------------------------ |
| `x`  | real | Cos函数值，实数，定义域范围是[-1，1] |

返回：real

### 示例

```tsl
echo arcCos(0);
// 输出：1.5707963267949
```

## `arcCosh(x)`

声明：function

反双曲余弦函数，计算参数X的反双曲余弦值，是双曲余弦函数Cosh（X）的反函数

<!-- tags: 数值计算 计算 求解 数学 数值 numeric -->

| 参数 | 类型 | 说明                  |
| ---- | ---- | --------------------- |
| `x`  | real | 定义域是[1，+∞), 实数 |

返回：real

### 示例

```tsl
// 求ArcCosh(2)
echo arcCosh(2);
// 输出：1.31695789692482
```

## `arcCot(x)`

声明：function

反余切函数，计算参数X的反余切值

<!-- tags: 数值计算 计算 求解 数学 数值 numeric -->

| 参数 | 类型 | 说明             |
| ---- | ---- | ---------------- |
| `x`  | real | 余切函数值，实数 |

返回：real

### 示例

```tsl
echo arcCot(1);
// 输出：0.785398163397448
```

## `arcCoth(x)`

声明：function

反双曲余切函数，计算参数X的反双曲余切值，是双曲余切函数CotH(X)的反函数

<!-- tags: 数值计算 计算 求解 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：real

### 示例

```tsl
// 求ArcCotH(4)
echo arcCoth(4);
// 输出：0.255412811882995
```

## `arcCsc(x)`

声明：function

反余割函数

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明             |
| ---- | ---- | ---------------- |
| `x`  | real | 余割函数值，实数 |

返回：real

### 示例

```tsl
// 求ArcCsc(2)
echo arcCsc(2);
// 输出：0.523598775598299
```

## `arcCsch(x)`

声明：function

反双曲余割函数，计算参数X的反双曲余割值，是双曲余割函数Csch (X)的反函数

<!-- tags: 数值计算 计算 求解 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：real

### 示例

```tsl
// 求ArcCscH(4)
echo arcCsch(4);
// 输出：0.247466461547264
```

## `arcSec(x)`

声明：function

反正割函数

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明             |
| ---- | ---- | ---------------- |
| `x`  | real | 正割函数值，实数 |

返回：real

### 示例

```tsl
// 求ArcSec(2)
echo arcSec(2);
// 输出：1.0471975511966
```

## `arcSech(x)`

声明：function

反双曲正割函数，计算参数X的反双曲正割值，是双曲正割函数CecH(X)的反函数

<!-- tags: 数值计算 计算 求解 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：real

### 示例

```tsl
// 求ArcSecH(4)
echo arcSech(0.5);
// 输出：1.31695789692482
```

## `arcSin(x)`

声明：function

反正弦函数，返回弧度值（介于-π/2和π/2之间）

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明                                 |
| ---- | ---- | ------------------------------------ |
| `x`  | real | Sin函数值，实数，定义域范围是[-1，1] |

返回：real

### 示例

```tsl
echo arcSin(1);
// 输出：1.5707963267949
```

## `arcSinh(x)`

声明：function

反双曲正弦函数，计算参数X的反双曲正弦值，是双曲正弦函数Sinh(X)的反函数

<!-- tags: 数值计算 计算 求解 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：real

### 示例

```tsl
// 求ArcSinh (2)
echo arcSinh(2);
// 输出：1.44363547517881
```

## `arcTan(x)`

声明：function

反正切函数，返回值域是[-π，π]

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明            |
| ---- | ---- | --------------- |
| `x`  | real | Tan函数值，实数 |

返回：real

### 示例

```tsl
// 求ArcTan(1)
echo arcTan (1);
// 输出：0.785398163397448 //该值=pi()/4
```

## `arcTan2(x, y)`

声明：function

反正切函数，求正切值等于Y/X的弧度值，[-π，π]

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明         |
| ---- | ---- | ------------ |
| `x`  | real | 对边长，实数 |
| `y`  | real | 侧边长，实数 |

返回：real

### 示例

```tsl
echo arcTan2(1, 2);
// 输出：0.463647609000806
```

## `arcTanh(x)`

声明：function

反双曲正切函数，计算参数X的反双曲正切值，是双曲正切函数TanH(X)的反函数

<!-- tags: 数值计算 计算 求解 数学 数值 numeric -->

| 参数 | 类型 | 说明                   |
| ---- | ---- | ---------------------- |
| `x`  | real | 实数，定义域是[-1，+1] |

返回：real

### 示例

```tsl
// 求ArcTanh(0.8)
echo arcTanh(0.8);
// 输出：1.09861228866811
```

## `ceil(x)`

声明：function

获取不比参数X小的最小整数

<!-- tags: 数值计算 获取 查询 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：integer

### 示例

```tsl
echo ceil(-2.8);
// 输出：-2
```

## `ceil32(x)`

声明：function

获取比参数X大的最小整数

<!-- tags: 数值计算 获取 查询 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：integer

### 示例

```tsl
echo ceil32(-2.8);
// 输出：-2
```

## `ceil64(x)`

声明：function

获取比参数X大的最小整数

<!-- tags: 数值计算 获取 查询 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：int64

### 示例

```tsl
echo ceil64(-2.8);
// 输出：-2
```

## `compareValue(a, b, epsilon)`

声明：function

返回-1,0或1。比较A与B的大小，如果A大于B，返回+1，如果A小于B，返回-1，如果相等，则返回0。参数Epsilon表示一个范围，如果A和B的差距大于这个范围，则进行正常的比较，如果A和B的差距小于这个范围，则认为A等于B

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数      | 类型 | 说明     |
| --------- | ---- | -------- |
| `a`       | real | 实数     |
| `b`       | real | 实数     |
| `epsilon` | real | 误差范围 |

返回：integer

### 示例

```tsl
echo compareValue (3, 4, 0.5);
// 输出：-1
// 表示3与4之间的差距超过0.5则正常比较，否则认为相等
```

## `complex(a, b)`

声明：function

生成复数或复数矩阵，`a` 为实部，`b` 为虚部

<!-- tags: 数值计算 数学 复数 复数矩阵 实部 虚部 complex numeric -->

| 参数 | 类型                 | 说明 |
| ---- | -------------------- | ---- |
| `a`  | real\|array\|fmarray | 实部 |
| `b`  | real\|array\|fmarray | 虚部 |

返回：complex\|array\|fmarray

### 示例

```tsl
echo complex(5, -2), "\n";
// 输出：5-2j
```

## `conj(z)`

声明：function

返回复数的共轭值，支持复数数组

<!-- tags: 数值计算 数学 复数 共轭 共轭复数 complex numeric -->

| 参数 | 类型                    | 说明           |
| ---- | ----------------------- | -------------- |
| `z`  | complex\|array\|fmarray | 复数或复数数组 |

返回：complex\|array\|fmarray

### 示例

```tsl
value := conj(4 + 3j);
echo real(value), ",", imag(value), "\n";
// 输出：4,-3
```

## `cos(x)`

声明：function

余弦函数

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明         |
| ---- | ---- | ------------ |
| `x`  | real | 弧度值, 实数 |

返回：real

### 示例

```tsl
// 求cos(π/3)
echo cos(pi()/3);
// 输出：0.5
```

## `cosecant(x)`

声明：function

余割函数，返回参数X的余割值，也就是返回1/Sin(X)的值

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明         |
| ---- | ---- | ------------ |
| `x`  | real | 弧度值，实数 |

返回：real

### 示例

```tsl
// 求Cosecant (π/6)
echo cosecant (pi()/6);
// 输出：2
```

## `cosh(x)`

声明：function

双曲余弦函数，返回参数X的双曲线余弦值，也就是(ex+e-x)/2

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明         |
| ---- | ---- | ------------ |
| `x`  | real | 弧度值，实数 |

返回：real

### 示例

```tsl
// 求Cosh(2)
echo cosh(2);
// 输出：3.76219569108363
```

## `cot(x)`

声明：function

余切函数，也就是返回1/Tan(X)的值

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明                              |
| ---- | ---- | --------------------------------- |
| `x`  | real | 弧度值，实数，X≠n\*π，（n是整数） |

返回：real

### 示例

```tsl
// 求Cot (π/4)
echo cot(pi()/4);
// 输出：1
```

## `coTan(x)`

声明：function

余切函数，也就是返回1/Tan(X)的值

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明                              |
| ---- | ---- | --------------------------------- |
| `x`  | real | 弧度值，实数，X≠n\*π，（n是整数） |

返回：real

### 示例

```tsl
// 求Cotan(π/4)
echo coTan(pi()/4);
// 输出：1
```

## `coth(x)`

声明：function

双曲线余切函数，返回参数X的双曲线余切值，也就是(ex+e-x)/(ex-e-x)

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明         |
| ---- | ---- | ------------ |
| `x`  | real | 弧度值，实数 |

返回：real

### 示例

```tsl
// 求CotH(2)
echo coth(2);
// 输出：1.03731472072755
```

## `csc(x)`

声明：function

余割函数，返回参数X的余割值，也就是返回1/Sin(X)的值

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明         |
| ---- | ---- | ------------ |
| `x`  | real | 弧度值，实数 |

返回：real

### 示例

```tsl
// 求Csc(π/6)
echo csc(pi()/6);
// 输出：2
```

## `csch(x)`

声明：function

双曲线余割函数，计算参数X的双曲线余割值，也就是计算2/(ex-e-x)

<!-- tags: 数值计算 计算 求解 数学 数值 numeric -->

| 参数 | 类型 | 说明         |
| ---- | ---- | ------------ |
| `x`  | real | 弧度值，实数 |

返回：real

### 示例

```tsl
// 求CscH (2)
echo csch(2);
// 输出：0.275720564771783
```

## `cycleToDeg(cycles)`

声明：function

将圆周值Cycles转化为以角度为度量单位的相应值，也就是计算Cycles\*360

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数     | 类型 | 说明         |
| -------- | ---- | ------------ |
| `cycles` | real | 圆周值，实数 |

返回：real

### 示例

```tsl
// 求CycleToDeg(1/4)
echo cycleToDeg(1/4);
// 输出：90
```

## `cycleToGrad(cycles)`

声明：function

将圆周值Cycles转化为以梯度为度量单位的相应值，也就是计算Cycles\*400

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数     | 类型 | 说明         |
| -------- | ---- | ------------ |
| `cycles` | real | 圆周值，实数 |

返回：real

### 示例

```tsl
// 求CycleToGrad(1/4)
echo cycleToGrad(1/4);
// 输出：100
```

## `cycleToRad(cycles)`

声明：function

将圆周值Cycles转化为以弧度为度量单位的相应值，也就是计算Cycles*2*π

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数     | 类型 | 说明         |
| -------- | ---- | ------------ |
| `cycles` | real | 圆周值，实数 |

返回：real

### 示例

```tsl
// 求CycleToRad(1/4)
echo cycleToRad(1/4);
// 输出：1.5707963267949
```

## `degToCycle(degrees)`

声明：function

将角度值Degrees转化为以圆周为度量单位的相应值，也就是计算Degrees\*/360

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数      | 类型 | 说明         |
| --------- | ---- | ------------ |
| `degrees` | real | 角度值，实数 |

返回：real

### 示例

```tsl
// 求DegToCycle(45)
echo degToCycle(45);
// 输出：0.125
```

## `degToGrad(degrees)`

声明：function

将角度值Degrees转化为以梯度为度量单位的相应值，也就是计算Degrees\*100/90（90度角相当于100梯度）

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数      | 类型 | 说明         |
| --------- | ---- | ------------ |
| `degrees` | real | 角度值，实数 |

返回：real

### 示例

```tsl
// 求DegToGrad (90)
echo degToGrad (90);
// 输出：100
```

## `degToRad(degrees)`

声明：function

将角度值Degrees转化为以弧度为度量单位的相应值，也就是计算Degrees\*π/180

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数      | 类型 | 说明         |
| --------- | ---- | ------------ |
| `degrees` | real | 角度值，实数 |

返回：real

### 示例

```tsl
// 求DegToRad (60)
echo degToRad(60);
// 输出：1.0471975511966
```

## `divMod(dividend, divisor, result, remainder)`

声明：function

计算整数除法的整数商和余数。也就是用参数Dividend除以参数Divisor，得到的整数商存到参数Result中，把余数存到参数Remainder中

<!-- tags: 数值计算 计算 求解 数学 数值 numeric -->

| 参数        | 类型    | 说明         |
| ----------- | ------- | ------------ |
| `dividend`  | integer | 整数，被除数 |
| `divisor`   | integer | 整数，除数   |
| `result`    | int64   | 整数，商     |
| `remainder` | int64   | 整数，余数   |

返回：real

### 示例

```tsl
divMod (5, 3, a, b);
echo trim(toStn(array(a, b)));
// 输出：array(1L, 2L)
```

## `doubleDecliningBalance(cost, salvage, life, period)`

声明：function

返回对一项资产的第Period期的加速折旧值。COST表示资产原值（折旧初始值），Salvage表示资产残值，Life表示折旧年限，Period表示第几期折旧

<!-- tags: 数值计算 返回 获取 数学 数值 numeric COST -->

| 参数      | 类型    | 说明                     |
| --------- | ------- | ------------------------ |
| `cost`    | real    | 实数，表示资产原值       |
| `salvage` | real    | 实数，表示资产残值       |
| `life`    | integer | 实数，表示折旧年限       |
| `period`  | integer | 实数，表示计算第几期折旧 |

返回：real

### 示例

```tsl
cost := 100;
salvage := 32;
life := 3;
period := 2;
echo doubleDecliningBalance(cost, salvage, life, period);
// 输出：1.33333333333334
```

## `ensureRange(a_value, amin, amax)`

声明：function

这个函数可以保证返回某个区间之内的数，参数Amin和参数Amax是这个区间的上限和下限

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数      | 类型 | 说明             |
| --------- | ---- | ---------------- |
| `a_value` | real | 要限制范围的实数 |
| `amin`    | real | 实数，范围下限   |
| `amax`    | real | 实数，范围上限   |

返回：real

### 示例

```tsl
echo ensureRange (4.3, 4, 8);
// 输出：4.3
```

## `exp(x)`

声明：function

返回自然对数e的X次方

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：real

### 示例

```tsl
// 求e^2
echo exp(2);
// 输出：7.38905609893065
```

## `floor(x)`

声明：function

获取不比参数X大的最大整数

<!-- tags: 数值计算 获取 查询 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：integer

### 示例

```tsl
echo floor(-2.8);
// 输出：-3
```

## `floor32(x)`

声明：function

获取比参数X小的最大整数。参数

<!-- tags: 数值计算 获取 查询 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real |      |

返回：integer

### 示例

```tsl
echo floor32(-2.8);
// 输出：-3
```

## `floor64(x)`

声明：function

获取比参数X小的最大整数。参数

<!-- tags: 数值计算 获取 查询 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real |      |

返回：int64

### 示例

```tsl
echo floor64(-2.8);
// 输出：-3
```

## `frac(x)`

声明：function

对X取小数部分返回

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：real

### 示例

```tsl
// 求x
x := 2.45;
echo frac(x);
// 输出：0.45
```

## `frexp(x, base, exponent)`

声明：function

分离出浮点数存储的尾数和指数

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数       | 类型    | 说明             |
| ---------- | ------- | ---------------- |
| `x`        | real    | 实数，浮点数。   |
| `base`     | real    | 实数，返回的尾数 |
| `exponent` | integer | 整数，返回的指数 |

返回：real

### 示例

```tsl
// 将X分离出位数和指数,即X= Base *2^ Exponent
x := pi();
frexp(x, base, exponent);
echo trim(toStn(array(base, exponent)));
// 输出：array(0.785398163397448, 2)
```

## `futureValue(rate, nperiods, payment, present_value, payment_time)`

声明：function

返回一项投资的未来值。这项投资的现值投入是PresentValue，每期投资额是Payment，投资的内部收益率是Rate，投资期数是Nperiods，而参数PaymentTime决定每期的Payment投资是在期初或期末进行

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数            | 类型    | 说明                                               |
| --------------- | ------- | -------------------------------------------------- |
| `rate`          | real    | 实数，表示内部收益率                               |
| `nperiods`      | integer | 整数，表示投资的总期数                             |
| `payment`       | real    | 实数，表示投资期内，每期投入值                     |
| `present_value` | real    | 实数，初期投入的现值                               |
| `payment_time`  | integer | PaymentTime决定每期的Payment投资是在期初或期末进行 |

返回：real

### 示例

```tsl
rate := 0.05;
nperiods := 5;
payment := 100;
present_value := -10000;
payment_time := 1;
echo futureValue(rate, nperiods, payment, present_value, payment_time);
// 输出：12182.62434375
```

## `gradToCycle(grads)`

声明：function

将梯度值Grads转化为以圆周为度量单位的相应值，也就是计算Grads/400

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数    | 类型 | 说明         |
| ------- | ---- | ------------ |
| `grads` | real | 梯度值，实数 |

返回：real

### 示例

```tsl
// 求GradToCycle(100)
echo gradToCycle(100);
// 输出：0.25
```

## `gradToDeg(grads)`

声明：function

将梯度值Grads转化为以角度为度量单位的相应值，也就是计算Grads\*90/100

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数    | 类型 | 说明         |
| ------- | ---- | ------------ |
| `grads` | real | 梯度值，实数 |

返回：real

### 示例

```tsl
// 求GradToDeg(50)
echo gradToDeg(50);
// 输出：45
```

## `gradToRad(grads)`

声明：function

将梯度值Grads转化为以弧度为度量单位的相应值，也就是计算Grads\*π/200

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数    | 类型 | 说明         |
| ------- | ---- | ------------ |
| `grads` | real | 梯度值，实数 |

返回：real

### 示例

```tsl
// 求GradToRad(50)
echo gradToRad(50);
// 输出：0.785398163397448
```

## `hypot(x, y)`

声明：function

根据直角三角形的两条直角边返回斜边长度

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明                   |
| ---- | ---- | ---------------------- |
| `x`  | real | 一条直角边长度，实数   |
| `y`  | real | 另一条直角边长度，实数 |

返回：real

### 示例

```tsl
// 求Hypot (3,4)
echo hypot (3, 4); // 返回sqrt(3^2+4^2)
// 输出：5
```

## `imag(z)`

声明：function

返回复数的虚部，实数的虚部为 0，支持复数数组

<!-- tags: 数值计算 数学 复数 虚部 complex numeric -->

| 参数 | 类型                    | 说明           |
| ---- | ----------------------- | -------------- |
| `z`  | complex\|array\|fmarray | 复数或复数数组 |

返回：real\|array\|fmarray

### 示例

```tsl
echo imag(4 + 3j), "\n";
// 输出：3
```

## `inRange(a_value, amin, amax)`

声明：function

判断Avalue是否在[Amin, Amax]范围内

<!-- tags: 数值计算 判断 检查 数学 数值 numeric -->

| 参数      | 类型 | 说明           |
| --------- | ---- | -------------- |
| `a_value` | real | 要判断的实数   |
| `amin`    | real | 实数，范围下限 |
| `amax`    | real | 实数，范围上限 |

返回：bool

### 示例

```tsl
echo inRange (4.3, 4, 8);
// 输出：1
```

## `int(x)`

声明：function

对X取整数部分，去掉小数部分，得到的还是实数

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：real

### 示例

```tsl
// 求x
x := 2.45;
echo int(x);
// 输出：2
```

## `interestPayment(rate, period, nperiods, present_value, future_value, payment_time)`

声明：function

返回一项贷款的第Periods期的还款的利息额部分。这项贷款的现值是PresentValue，投资所产生的终值是FutureValue，而参数PaymentTime决定每期的利息投资是在期初或期末进行

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数            | 类型    | 说明                                               |
| --------------- | ------- | -------------------------------------------------- |
| `rate`          | real    | 实数，表示贷款利率                                 |
| `period`        | integer | 整数，第几期还款                                   |
| `nperiods`      | integer | 整数，表示还款的总期数                             |
| `present_value` | real    | 实数，表示贷款总额                                 |
| `future_value`  | real    | 实数，表示投资的未来值                             |
| `payment_time`  | integer | PaymentTime决定每期的Payment投资是在期初或期末进行 |

返回：real

### 示例

```tsl
rate := 0.1;
period := 5;
nperiods := 12;
present_value := 120;
future_value := 500;
payment_time := 0;
echo interestPayment(rate, period, nperiods, present_value, future_value, payment_time);
// 输出：1.45576981358686
```

## `interestRate(nperiods, payment, present_value, future_value, payment_time)`

声明：function

计算使投资现值按指定现金流和期数达到终值所需的每期收益率

<!-- tags: 数值计算 计算 求解 数学 数值 numeric -->

| 参数            | 类型    | 说明                           |
| --------------- | ------- | ------------------------------ |
| `nperiods`      | integer | 总期数                         |
| `payment`       | real    | 每期现金流                     |
| `present_value` | real    | 现值                           |
| `future_value`  | real    | 终值                           |
| `payment_time`  | integer | 0 表示期末支付，1 表示期初支付 |

返回：real

### 示例

```tsl
echo interestRate(1, 0, -100, 110, 0);
// 输出：0.1
```

## `internalRateOfReturn(guess, cash_flows)`

声明：function

返回内部回报率，根据一个项目完整的现金流情况得出，函数假设这些现金流的发生是规则、持续的，它们之间的时间间隔必须相等，例如每年年末。同时，现金流入用正值表示，现金流出用负值表示。第一个数据必须为负，以表示初始投资

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数         | 类型          | 说明               |
| ------------ | ------------- | ------------------ |
| `guess`      | real          | 实数，评估的收益率 |
| `cash_flows` | array of real | 实数数组，现金流   |

返回：real

### 示例

```tsl
guess := 0.1;
data := array(-1000, 600, 600);
echo internalRateOfReturn(guess, data);
// 输出：0.130662386291807
```

## `intpower(base, exponent)`

声明：function

计算Base的Exponent次幂，也就是计算BaseExponent

<!-- tags: 数值计算 计算 求解 数学 数值 numeric -->

| 参数       | 类型 | 说明                                 |
| ---------- | ---- | ------------------------------------ |
| `base`     | real | 底数，实数                           |
| `exponent` | real | 指数，整数，如果不是整数则会进行取整 |

返回：real

### 示例

```tsl
echo intPower (2, 3.2);
// 输出：8 //返回2^3
```

## `isInfinite(a_value)`

声明：function

返回布尔型真假值，确定指定的参数AValue是否是一个正或负的无穷大的数

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数      | 类型 | 说明     |
| --------- | ---- | -------- |
| `a_value` | any  | 任意数据 |

返回：bool

### 示例

范例01：判断单个值是否inf

```tsl
echo isInfinite (inf);
// 输出：1
```

范例02：判断数组中各元素是否nan

```tsl
data := array(2, nan, 3, '', 's', nil, inf);
echo trim(toStn(isInfinite(data)));
// 输出：array(0, 0, 0, 0, 0, 0, 1)
```

## `isNan(a_value)`

声明：function

返回布尔型真假值，确定指定的参数AValue是否是一个NAN数

<!-- tags: 数值计算 返回 获取 数学 数值 numeric NAN -->

| 参数      | 类型 | 说明     |
| --------- | ---- | -------- |
| `a_value` | any  | 任意数据 |

返回：bool

### 示例

范例01：判断单个值是否nan

```tsl
v := nan;
echo isNan(v);
// 输出：1
```

范例02：判断数组中各元素是否nan

```tsl
data := array(2, nan, 3, '', 's', nil);
echo trim(toStn(isNan(data)));
// 输出：array(0, 1, 0, 0, 0, 0)
```

## `isZero(a, epsilon)`

声明：function

返回布尔真假值。返回A是否在(0-Epsilon,0+ Epsilon)范围内

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数      | 类型 | 说明                     |
| --------- | ---- | ------------------------ |
| `a`       | real | 实数，需要进行判断的数据 |
| `epsilon` | real | 与0的差距范围，实数      |

返回：bool

### 示例

```tsl
a := 1.400000000001;
b := 1.399999999999;
echo isZero(a-b, 0.000000001); // 在9位小数的精度下
// 输出：1
```

## `ldexp(x, p)`

声明：function

返回X\*（2p）

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数 | 类型    | 说明           |
| ---- | ------- | -------------- |
| `x`  | real    | 实数，作底     |
| `p`  | integer | 整数，作为指数 |

返回：real

### 示例

```tsl
echo ldexp(3, 2);
// 输出：12  //返回3*2^2
```

## `ln(x)`

声明：function

返回X的自然对数，是Exp函数的反函数

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数 | 类型 | 说明        |
| ---- | ---- | ----------- |
| `x`  | real | 实数，大于0 |

返回：real

### 示例

```tsl
// 求ln(e^2)
echo ln(7.38905609893065);
// 输出：2
```

## `lnXp1(x)`

声明：function

返回（X+1）的自然对数，也就是Ln（X+1）

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数 | 类型 | 说明               |
| ---- | ---- | ------------------ |
| `x`  | real | 可以是实数，大于-1 |

返回：real

### 示例

```tsl
echo lnXp1(3);
// 输出：1.38629436111989
```

## `log10(x)`

声明：function

返回X以10为底的自然对数，也就是log10X

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数 | 类型 | 说明        |
| ---- | ---- | ----------- |
| `x`  | real | 实数，大于0 |

返回：real

### 示例

```tsl
echo log10(100);
// 输出：2 //返回log10100
```

## `log2(x)`

声明：function

返回X以2为底的自然对数，也就是log2X

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数 | 类型 | 说明        |
| ---- | ---- | ----------- |
| `x`  | real | 实数，大于0 |

返回：real

### 示例

```tsl
echo log2(8);
// 输出：3 //返回log28
```

## `logN(base, x)`

声明：function

返回X以Base为底的自然对数，也就是logbaseX

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数   | 类型 | 说明        |
| ------ | ---- | ----------- |
| `base` | real | 底数，实数  |
| `x`    | real | 实数，大于0 |

返回：real

### 示例

```tsl
echo logN(2, 8);
// 输出：3 //返回log28
```

## `max(a, b)`

声明：function

返回A、B中的较大值，如果A、B是数组，需保证两个参数的数据维度相同，一一比较对应位置的两个数字，返回较大的值

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数 | 类型        | 说明      |
| ---- | ----------- | --------- |
| `a`  | real\|array | 实数/数组 |
| `b`  | real\|array | 实数/数组 |

返回：real|array

### 示例

范例01：比较两个值

```tsl
echo max(5, 5.6);
// 输出：5.6
```

范例02：比较两个数组

```tsl
echo trim(toStn(max(array(1, 2, 8), array(4, 5, 6))));
// 输出：array(4, 5, 8)
```

## `min(a, b)`

声明：function

返回A、B中的较小值，如果A、B是数组，需保证两个参数的数据维度相同，一一比较对应位置的两个数字，返回较小的值

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数 | 类型        | 说明 |
| ---- | ----------- | ---- |
| `a`  | real\|array | 实数 |
| `b`  | real\|array | 实数 |

返回：real|array

### 示例

范例01：比较两个值

```tsl
echo min(3, 3.6);
// 输出：3
```

范例02：比较两个数组

```tsl
a := array(1, 3, 5);
b := array(2, 3, 4);
echo trim(toStn(min(a, b)));
// 输出：array(1, 3, 4)
```

## `netPresentValue(rate, cash_flows, payment_time)`

声明：function

返回净现值。就是根据CashFlows未来现金流的状况，以Rate利率折线的数值。PaymentTime决定CashFlow的是在期初还是期末发生

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数           | 类型          | 说明                               |
| -------------- | ------------- | ---------------------------------- |
| `rate`         | real          | 实数，利率                         |
| `cash_flows`   | array of real | 实数数组名，现金流                 |
| `payment_time` | integer       | 决定CashFlow的是在期初还是期末发生 |

返回：real

### 示例

```tsl
rate := 0.1;
cash_flows := Array(100, 1000);
payment_time := 0;
echo netPresentValue(rate, cash_flows, payment_time);
// 输出：917.355371900826
```

## `numberOfPeriods(rate, payment, present_value, future_value, payment_time)`

声明：function

计算现值按指定收益率和每期现金流达到终值所需的期数

<!-- tags: 数值计算 计算 求解 数学 数值 numeric -->

| 参数            | 类型    | 说明                           |
| --------------- | ------- | ------------------------------ |
| `rate`          | real    | 每期收益率                     |
| `payment`       | real    | 每期现金流                     |
| `present_value` | real    | 现值                           |
| `future_value`  | real    | 终值                           |
| `payment_time`  | integer | 0 表示期末支付，1 表示期初支付 |

返回：real

### 示例

```tsl
echo numberOfPeriods(0.1, 0, -100, 121, 0);
// 输出：2
```

## `odd(x)`

声明：function

判断X是否是奇数，如果是，返回真，否则返回假

<!-- tags: 数值计算 判断 检查 数学 数值 numeric -->

| 参数 | 类型    | 说明                           |
| ---- | ------- | ------------------------------ |
| `x`  | integer | 整数，如果是实数，先取整数部分 |

返回：bool

### 示例

```tsl
// 判断1是否是奇数
echo odd (1);
// 输出：1
```

## `payment(rate, nperiods, present_value, future_value, payment_time)`

声明：function

返回贷款每期还款数。贷款数为PresentValue，贷款利率是Rate，NPeriods表示还款的总期数。这个函数假定利息是在每个期末支付。FutureValue表示投资到还款结束起达到的程度，PaymentTime决定每期的还款是在期初还是期末发生

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数            | 类型    | 说明                               |
| --------------- | ------- | ---------------------------------- |
| `rate`          | real    | 实数，贷款利率                     |
| `nperiods`      | integer | 整数，表示还款的总期数             |
| `present_value` | real    | 实数，表示贷款总额                 |
| `future_value`  | real    | 表示投资到还款结束起达到的程度     |
| `payment_time`  | integer | 决定CashFlow的是在期初还是期末发生 |

返回：real

### 示例

```tsl
rate := 0.1;
nperiods := 100;
present_value := 0;
future_value := 10000;
payment_time := 0;
echo payment(rate, nperiods, present_value, future_value, payment_time);
// 输出：-0.0725709820667488
```

## `periodPayment(rate, period, nperiods, present_value, future_value, payment_time)`

声明：function

返回贷款每期还款本金的部分。类似地，InterestPayment函数是返回贷款每期还款利息的部分

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数            | 类型    | 说明                           |
| --------------- | ------- | ------------------------------ |
| `rate`          | real    | 实数，贷款利率                 |
| `period`        | integer | 整数，第几期还款               |
| `nperiods`      | integer | 整数，表示还款的总期数         |
| `present_value` | real    | 实数，表示贷款总额             |
| `future_value`  | real    | 表示投资到还款结束起达到的程度 |
| `payment_time`  | integer | 决定现金流是在期初还是期末发生 |

返回：real

### 示例

```tsl
rate := 0.1;
period := 10;
nperiods := 30;
present_value := 0;
future_value := 10000;
payment_time := 0;
echo periodPayment(rate, period, nperiods, present_value, future_value, payment_time);
// 输出：-143.345493803139
```

## `pi()`

声明：function

圆周率，返回3.1415926535897932385

<!-- tags: 数值计算 数学 数值 numeric -->

返回：real

### 示例

```tsl
// 求面积(π*R^2)
r := 2;
echo pi() * r^2;
// 输出：12.5663706143592
```

## `poly(x, coefficients)`

声明：function

计算以下多项式的值，其中参数Coefficients必须是数组类型，存放参数X的各次幂的系数。公式是

<!-- tags: 数值计算 计算 求解 数学 数值 numeric -->

| 参数           | 类型          | 说明                 |
| -------------- | ------------- | -------------------- |
| `x`            | real          | 实数                 |
| `coefficients` | array of real | 多项式数组，一维数组 |

返回：real

### 示例

```tsl
x := 2;
a := array(2, 3, 1, 5);
echo poly(x, a);
// 输出：52
// 返回2*(2^0)+3*(2^1)+1*(2^2)+ 5*(2^3)
```

## `power(base, exponent)`

声明：function

计算Base的Exponent次幂，也就是计算BaseExponent，由于指数也是实数，计算速度要低于IntPower()函数

<!-- tags: 数值计算 计算 求解 数学 数值 numeric -->

| 参数       | 类型 | 说明                                    |
| ---------- | ---- | --------------------------------------- |
| `base`     | real | 底数，实数                              |
| `exponent` | real | 指数，实数，非整数时，参数Base必须大于0 |

返回：real

### 示例

```tsl
echo power (2, 3.2);
// 输出：9.18958683997628
```

## `presentValue(rate, nperiods, payment, future_value, payment_time)`

声明：function

返回现值，这部分现值由两部分组成，一部分是每期的固定的现金流入，一部分是最终的一笔现金流入。例如购买每年付息的债券就可以用这个函数来计算现值

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数           | 类型    | 说明                           |
| -------------- | ------- | ------------------------------ |
| `rate`         | real    | 实数，要求利率                 |
| `nperiods`     | integer | 整数，表示现金流入的总期数     |
| `payment`      | real    | 实数，表示每期的现金流入额     |
| `future_value` | real    | 实数，表示结束时现金流入       |
| `payment_time` | integer | 决定现金流是在期初还是期末发生 |

返回：real

### 示例

```tsl
rate := 0.1;
nperiods := 30;
future_value := 10000;
payment_time := 0;
echo presentValue(rate, nperiods, payment, future_value, payment_time);
// 输出：-573.08553301168
```

## `radToCycle(radians)`

声明：function

将弧度值Radians转化为以圆周为度量单位的相应值，也就是计算Radians\*/2π（2π是一个圆周）

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数      | 类型 | 说明         |
| --------- | ---- | ------------ |
| `radians` | real | 弧度值，实数 |

返回：real

### 示例

```tsl
// 求RadToCycle (π/4)
echo radToCycle(pi()/4);
// 输出：0.125
```

## `radToDeg(radians)`

声明：function

将弧度值Radians转化为以角度为度量单位的相应值，也就是计算Radians\*180/π

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数      | 类型 | 说明         |
| --------- | ---- | ------------ |
| `radians` | real | 弧度值，实数 |

返回：real

### 示例

```tsl
// 求RadToDeg (π/3)
echo radToDeg(pi()/3);
// 输出：60
```

## `radToGrad(radians)`

声明：function

将弧度值Radians转化为以梯度为度量单位的相应值，也就是计算Radians\*200/π

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数      | 类型 | 说明         |
| --------- | ---- | ------------ |
| `radians` | real | 弧度值，实数 |

返回：real

### 示例

```tsl
// 求RadToGrad (π/4)
echo radToGrad(pi()/4);
// 输出：50
```

## `randomRange(a_from, a_to)`

声明：function

返回一个介于参数AFrom（包括）和参数ATo（不包括）之间的随机整数

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数     | 类型    | 说明 |
| -------- | ------- | ---- |
| `a_from` | integer | 整数 |
| `a_to`   | integer | 整数 |

返回：integer

### 示例

```tsl
echo randomRange(4, 9);
// 输出：4 到 8 之间的随机整数
```

## `round(x)`

声明：function

使用银行家算法四舍五入，"四舍六入五考虑，五后非零就进一，五后皆零看奇偶，五前为偶应舍去，五前为奇要进一"。输出整数

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：integer

### 示例

```tsl
// 求x
x := 3.5;
echo round(x);
// 输出：4
```

## `round32(x)`

声明：function

对X做取整运算，近似到最接近的整数

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：integer

### 示例

```tsl
x := round32(6.8);
echo x;
// 输出：7
```

## `round64(x)`

声明：function

对X做取整运算，近似到最接近的整数。采用银行家舍入原则，"四舍六入五考虑，五后非零就进一，五后皆零看奇偶，五前为偶应舍去，五前为奇要进一"

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：int64

### 示例

```tsl
x := round64(3.5);
echo x;
// 输出：4
```

## `roundTo(a_value, a_digit)`

声明：function

使用银行家算法对AValue进行四舍五入,精确到10Adigit位。"四舍六入五考虑，五后非零就进一，五后皆零看奇偶，五前为偶应舍去，五前为奇要进一"

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数      | 类型    | 说明                 |
| --------- | ------- | -------------------- |
| `a_value` | real    | 实数                 |
| `a_digit` | integer | 整数,范围为[-37，37] |

返回：real

### 示例

范例01：整数四舍五入

```tsl
echo roundTo(1234567.3, 4);
// 输出：1230000
```

范例02：小数部分四舍五入

```tsl
echo roundTo(1.234567, -3);
// 输出：1.235
```

## `sameValue(a, b, epsilon)`

声明：function

返回A与B是否近似相等。两者的差距是否小于Epsilon参数定义的范围

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数      | 类型 | 说明                       |
| --------- | ---- | -------------------------- |
| `a`       | real | 实数                       |
| `b`       | real | 实数                       |
| `epsilon` | real | 表示一个两者差距的最大范围 |

返回：bool

### 示例

```tsl
echo sameValue (3, 4, 0.5);
// 输出：0
// 表示3与4之间的差距在0.5之内认为相等,否则认为不相等
```

## `sec(x)`

声明：function

正割函数，返回参数X的正割值，也就是返回1/Cos(X)的值

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明         |
| ---- | ---- | ------------ |
| `x`  | real | 弧度值，实数 |

返回：real

### 示例

```tsl
// 求Sec(π/3)
echo sec(pi()/3);
// 输出：2
```

## `secant(x)`

声明：function

正割函数，返回参数X的正割值，也就是返回1/Cos(X)的值

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明         |
| ---- | ---- | ------------ |
| `x`  | real | 弧度值，实数 |

返回：real

### 示例

```tsl
// 求Secant (π/6)
echo secant(pi()/3);
// 输出：2
```

## `sech(x)`

声明：function

双曲线正割函数，计算参数X的双曲线正割值，也就是计算2/(ex+e-x)

<!-- tags: 数值计算 计算 求解 数学 数值 numeric -->

| 参数 | 类型 | 说明         |
| ---- | ---- | ------------ |
| `x`  | real | 弧度值，实数 |

返回：real

### 示例

```tsl
// 求SecH(2)
echo sech(2);
// 输出：0.26580222883408
```

## `sign(a_value)`

声明：function

Sign函数，判断参数AValue的符号。如果为正，返回+1，如果为负数，返回-1，如果为0，则返回0

<!-- tags: 数值计算 判断 检查 数学 数值 numeric -->

| 参数      | 类型 | 说明 |
| --------- | ---- | ---- |
| `a_value` | real | 实数 |

返回：integer

### 示例

```tsl
echo sign (-2);
// 输出：-1
```

## `simpleRound(x)`

声明：function

与Round函数相比，SimpleRound采用了正负数不对称的算法，当一个负数正好是进位的一半时，它向较大的数进位。输出为整数类型

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：integer

### 示例

```tsl
// 求x
x := 3.5;
echo simpleRound(x);
// 输出：4
```

## `simpleRound32(x)`

声明：function

对X做取整运算，近似到最接近的整数。采用四舍五入原则，即尾数是五就进一

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：integer

### 示例

```tsl
x := simpleRound32(6.8);
echo x;
// 输出：7
```

## `simpleRound64(x)`

声明：function

对X做取整运算，近似到最接近的整数。采用四舍五入原则，即尾数是五就进一

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：int64

### 示例

```tsl
x := simpleRound64(3.5);
echo x;
// 输出：4
```

## `simpleRoundTo(a_value, a_digit)`

声明：function

返回参数AValue四舍五入后的值。四舍五入的位置由参数Adigit决定，尾数是五就进一

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数      | 类型    | 说明                 |
| --------- | ------- | -------------------- |
| `a_value` | real    | 实数                 |
| `a_digit` | integer | 整数,范围为[-37，37] |

返回：real

### 示例

范例01：

```tsl
echo simpleRoundTo(1234567.3, 4);
// 输出：1230000
```

范例02：

```tsl
echo simpleRoundTo(-1.235, -2);
// 输出：-1.24
```

## `sin(x)`

声明：function

正弦函数

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明        |
| ---- | ---- | ----------- |
| `x`  | real | 弧度值,实数 |

返回：real

### 示例

```tsl
// 求sin(π/6)
echo sin(pi()/6);
// 输出：0.5
```

## `sinCos(x, sin, cos)`

声明：function

计算X的正弦和余弦值，分别返回到参数Sin和Cos中

<!-- tags: 数值计算 计算 求解 数学 数值 numeric -->

| 参数  | 类型 | 说明                     |
| ----- | ---- | ------------------------ |
| `x`   | real | 弧度值, 实数             |
| `sin` |      | 正弦计算结果存放于该参数 |
| `cos` | real | 余弦计算结果存放于该参数 |

返回：integer

### 示例

```tsl
sinCos(pi()/2, sin, cos);
echo trim(toStn(array(sin, cos)));
// 输出：array(1.0, 6.12323399573677E-17)
```

## `sinh(x)`

声明：function

双曲线正弦函数，返回参数X的双曲线正弦值，也就是(ex-e-x)/2

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明         |
| ---- | ---- | ------------ |
| `x`  | real | 弧度值，实数 |

返回：real

### 示例

```tsl
// 求Sinh (2)
echo sinh(2);
// 输出：3.62686040784702
```

## `slnDepreciation(cost, salvage, life)`

声明：function

按直线折旧法计算每期折旧额，计算公式为（资产原值 Cost - 资产残值 Salvage）/ 折旧周期数 Life

<!-- tags: 数值计算 计算 求解 数学 数值 numeric -->

| 参数      | 类型    | 说明                 |
| --------- | ------- | -------------------- |
| `cost`    | real    | 实数，资产原值       |
| `salvage` | real    | 实数，资产残值       |
| `life`    | integer | 整数，设备的使用期数 |

返回：real

### 示例

```tsl
echo slnDepreciation(20000, 2000, 5);
// 输出：3600
// 第一年应提折旧额=(20000-2000)/5=3600
// 第二年应提折旧额=(20000-2000)/5=3600
// 第三年应提折旧额=(20000-2000)/5=3600
// 第四年应提折旧额=(20000-2000)/5=3600
// 第五年应提折旧额=(20000-2000)/5=3600
```

## `sqr(x)`

声明：function

返回X的平方

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：real

### 示例

```tsl
// 求x^2
x := 2;
echo sqr(x);
// 输出：4
```

## `sqrt(x)`

声明：function

返回X的平方根（该函数支持对数组操作）。可以对一维数组和二维数组里面的数据开平方，如果数组中含有字符，函数将报错

<!-- tags: 数值计算 返回 获取 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：real

### 示例

范例01：计算实数的平方根

```tsl
x := 4;
echo sqrt(x);
// 输出：2
```

范例02：计算一维数组中所有元素的平方根

```tsl
x := array(4, 9, 16, 25);
echo trim(toStn(sqrt(x)));
// 输出：array(2.0,3.0,4.0,5.0)
```

## `sydDepreciation(cost, salvage, life, period)`

声明：function

根据"sum-of-years-digits depreciation"方法计算某期的折旧额。这是一种加速折旧方法，在早一些的年份折旧速度快于晚一些的年份。计算方法是：`(Cost-Salvage)*Period/[（1+Life）* Life/2]`

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数      | 类型    | 说明                         |
| --------- | ------- | ---------------------------- |
| `cost`    | real    | 实数，资产原值               |
| `salvage` | real    | 实数，资产残值               |
| `life`    | integer | 整数，设备的使用期数         |
| `period`  | integer | 整数，指出计算第几期的折旧额 |

返回：real

### 示例

```tsl
echo sydDepreciation(20000, 2000, 5, 2);
// 输出：4800
// 第一年应提折旧额=(20000-2000)*5/((1+5)*5/2)=6000
// 第二年应提折旧额=(20000-2000) *4/((1+5)*5/2)=4800
// 第三年应提折旧额=(20000-2000) *3/((1+5)*5/2)=3600
// 第四年应提折旧额=(20000-2000) *2/((1+5)*5/2)=2400
// 第五年应提折旧额=(20000-2000) *1/((1+5)*5/2)=1200
// 输出：2400
```

## `tan(x)`

声明：function

正切函数

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明                                  |
| ---- | ---- | ------------------------------------- |
| `x`  | real | 弧度值，实数，X≠n\*π+π/2，（n是整数） |

返回：real

### 示例

```tsl
// 求tan(π/4)
echo tan (pi()/4);
// 输出：1
```

## `tanh(x)`

声明：function

双曲线正切函数，返回参数X的双曲线正切值，也就是(ex-e-x)/(ex+e-x)

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明         |
| ---- | ---- | ------------ |
| `x`  | real | 弧度值，实数 |

返回：real

### 示例

```tsl
// 求Tanh(2)
echo tanh(2);
// 输出：0.964027580075817
```

## `trunc(x)`

声明：function

对X做取整运算，近似到最接近0的整数

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：integer

### 示例

```tsl
x := trunc(-6.8);
echo x;
// 输出：-6
```

## `trunc32(x)`

声明：function

对X做取整运算，近似到最接近0的整数

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：integer

### 示例

```tsl
x := trunc32(-6.8);
echo x;
// 输出：-6
```

## `trunc64(x)`

声明：function

对X做取整运算，近似到最接近0的整数

<!-- tags: 数值计算 数学 数值 numeric -->

| 参数 | 类型 | 说明 |
| ---- | ---- | ---- |
| `x`  | real | 实数 |

返回：int64

### 示例

```tsl
x := trunc64(6.8);
echo x;
// 输出：6
```
