> ## Documentation Index
> Fetch the complete documentation index at: https://fluxon.tabooproject.org/llms.txt
> Use this file to discover all available pages before exploring further.

# 数学函数

> 三角函数、指数对数、随机数等数学运算

数学函数由 `FunctionMath` 提供，无需命名空间，直接调用即可。

## 数学常量

| 名称   | 类型       | 说明               |
| ---- | -------- | ---------------- |
| `PI` | `double` | 圆周率常量 `Math.PI`。 |
| `E`  | `double` | 自然常数 `Math.E`。   |

```fluxon theme={null}
print(&PI)    # => 3.141592653589793
print(&E)     # => 2.718281828459045
```

## 比较与范围

| 函数      | 签名                       | 说明                                   |
| ------- | ------------------------ | ------------------------------------ |
| `min`   | `min(a, b)`              | 返回较小的一个参数，支持可比较类型。                   |
| `max`   | `max(a, b)`              | 返回较大的一个参数，支持可比较类型。                   |
| `clamp` | `clamp(value, min, max)` | 将数值限制在 `[min, max]` 区间内，并尽量保持原始数值类型。 |

```fluxon theme={null}
min(1, 2)                 # => 1
max(1.5, 0.5)             # => 1.5
clamp(10, 0, 5)           # => 5
clamp(-5, 0, 100)         # => 0
```

## 绝对值与取整

| 函数      | 签名         | 说明                                                  |
| ------- | ---------- | --------------------------------------------------- |
| `abs`   | `abs(x)`   | 绝对值，自动根据参数类型返回 `int` / `long` / `float` / `double`。 |
| `round` | `round(x)` | 四舍五入到最接近的整数，返回整型数值。                                 |
| `floor` | `floor(x)` | 向下取整，如 `3.9 -> 3`。                                  |
| `ceil`  | `ceil(x)`  | 向上取整，如 `3.1 -> 4`。                                  |
| `sign`  | `sign(x)`  | 符号函数，正数返回 `1`，负数返回 `-1`，零返回 `0`。                    |

```fluxon theme={null}
abs(-3)                   # => 3
round(3.5)                # => 4
floor(3.9)                # => 3
ceil(3.1)                 # => 4
sign(-42)                 # => -1
sign(0)                   # => 0
sign(100)                 # => 1
```

## 三角函数

所有三角函数接受弧度值作为输入：

| 函数      | 签名            | 说明                                  |
| ------- | ------------- | ----------------------------------- |
| `sin`   | `sin(x)`      | 正弦函数。                               |
| `cos`   | `cos(x)`      | 余弦函数。                               |
| `tan`   | `tan(x)`      | 正切函数。                               |
| `asin`  | `asin(x)`     | 反正弦，要求 `x` 在 `[-1, 1]` 范围内，否则抛出异常。  |
| `acos`  | `acos(x)`     | 反余弦，要求 `x` 在 `[-1, 1]` 范围内，否则抛出异常。  |
| `atan`  | `atan(x)`     | 反正切。                                |
| `atan2` | `atan2(y, x)` | 两参数反正切，返回从正 x 轴到点 `(x, y)` 的角度（弧度）。 |

```fluxon theme={null}
sin(PI / 2)               # => 1.0
cos(0)                    # => 1.0
atan2(1, 1)               # => 0.7853981633974483（即 PI/4）
```

## 指数、对数与幂

| 函数      | 签名                    | 说明                                 |
| ------- | --------------------- | ---------------------------------- |
| `exp`   | `exp(x)`              | 计算 `e^x`。                          |
| `log`   | `log(x)`              | 自然对数，要求 `x > 0`，否则抛出异常。            |
| `log10` | `log10(x)`            | 以 10 为底的对数，要求 `x > 0`。             |
| `pow`   | `pow(base, exponent)` | 幂运算；当指数与结果均为整数且有限时，尽量返回整数类型。       |
| `sqrt`  | `sqrt(x)`             | 平方根，要求 `x >= 0`，否则抛出异常。            |
| `cbrt`  | `cbrt(x)`             | 立方根，支持负数输入。                        |
| `hypot` | `hypot(x, y)`         | 计算斜边长度 `sqrt(x^2 + y^2)`，避免中间结果溢出。 |

```fluxon theme={null}
pow(2, 10)                # => 1024
sqrt(9)                   # => 3.0
cbrt(27)                  # => 3.0
cbrt(-8)                  # => -2.0
log10(100)                # => 2.0
hypot(3, 4)               # => 5.0
```

<Note>幂运算也可以使用 `^` 运算符：`2 ^ 10` 等价于 `pow(2, 10)`。</Note>

## 随机数

`random` 根据参数个数的不同，具有三种调用形式：

| 调用                   | 说明                                                                   |
| -------------------- | -------------------------------------------------------------------- |
| `random()`           | 返回 `[0.0, 1.0)` 之间的双精度随机数。                                           |
| `random(end)`        | 若 `end` 为整数类型，则返回 `[0, end)` 内的整数；若为浮点，则返回 `[0.0, end)`。`end` 必须为正数。 |
| `random(start, end)` | 在 `[start, end)` 区间生成随机数；若两端均为整数，则返回区间内整数，否则返回浮点数。要求 `start < end`。  |

```fluxon theme={null}
random()                  # => 0.0 到 1.0 之间
random(10)                # => 0 到 9 之间的整数
random(5, 10)             # => 5 到 9 之间的整数
random(0.0, 1.0)          # => 0.0 到 1.0 之间的浮点数
```

## 角度与插值

| 函数     | 签名                    | 说明                                   |
| ------ | --------------------- | ------------------------------------ |
| `rad`  | `rad(deg)`            | 将角度转换为弧度。                            |
| `deg`  | `deg(rad)`            | 将弧度转换为角度。                            |
| `lerp` | `lerp(start, end, t)` | 线性插值，计算 `start + (end - start) * t`。 |

```fluxon theme={null}
rad(180)                  # => 3.141592653589793（即 PI）
deg(PI)                   # => 180.0
lerp(0, 10, 0.25)         # => 2.5
lerp(0, 100, 0.5)         # => 50.0
```

## 相关链接

* [系统函数](/language/functions/system)
* [类型函数](/language/functions/type)
* [运算符与优先级](/language/operators-and-priority)
