TypePHP 编译器
https://swoole.com/aot/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
99 lines
4.1 KiB
99 lines
4.1 KiB
# GMP 函数对照表(未实现)
|
|
|
|
本文档记录 PHP GMP 扩展中尚未在 BigInt 类型中实现的函数,作为后续开发的参考。
|
|
|
|
## 统计
|
|
|
|
GMP 扩展共 44 个函数(不含 `gmp_init` 和别名 `gmp_div`)。已覆盖 17 个,未覆盖 27 个。
|
|
|
|
## 已实现
|
|
|
|
| GMP 函数 | BigInt 方法 / 运算符 | 说明 |
|
|
|----------|---------------------|------|
|
|
| `gmp_init` | `std::bigInt()` | 构造 |
|
|
| `gmp_add` | `add()` / `+` | 加法 |
|
|
| `gmp_sub` | `sub()` / `-` | 减法 |
|
|
| `gmp_mul` | `mul()` / `*` | 乘法 |
|
|
| `gmp_div_q` | `div()` / `/` | 除法(商) |
|
|
| `gmp_div_r` | `mod()` / `%` | 除法(余数) |
|
|
| `gmp_div_qr` | `divmod()` | 商和余数 |
|
|
| `gmp_mod` | `mod()` / `%` | 取模 |
|
|
| `gmp_pow` | `pow()` | 幂运算 |
|
|
| `gmp_powm` | `powmod()` | 模幂 |
|
|
| `gmp_neg` | `neg()` / `-`(一元) | 取负 |
|
|
| `gmp_abs` | `abs()` | 绝对值 |
|
|
| `gmp_sqrt` | `sqrt()` | 平方根 |
|
|
| `gmp_gcd` | `gcd()` | 最大公约数 |
|
|
| `gmp_cmp` | `cmp()` / `<=>` | 比较 |
|
|
| `gmp_and` | `bitAnd()` / `&` | 按位与 |
|
|
| `gmp_or` | `bitOr()` / `\|` | 按位或 |
|
|
| `gmp_xor` | `bitXor()` / `^` | 按位异或 |
|
|
| `gmp_com` | `bitNot()` / `~` | 按位取反 |
|
|
| `gmp_testbit` | `testBit()` | 位测试 |
|
|
| `gmp_popcount` | `popCount()` | 人口统计 |
|
|
| `gmp_intval` | `toInt()` | 转 int |
|
|
| `gmp_strval` | `toString()` | 转字符串 |
|
|
|
|
## 未实现(按优先级排序)
|
|
|
|
### 高优先级 — 常用数论函数
|
|
|
|
| GMP 函数 | 建议方法名 | 签名 | 说明 |
|
|
|----------|-----------|------|------|
|
|
| `gmp_sign` | `sign()` | `(): int` | 符号,返回 -1/0/1 |
|
|
| `gmp_lcm` | `lcm($x)` | `(BigInt): BigInt` | 最小公倍数 |
|
|
| `gmp_perfect_square` | `perfectSquare()` | `(): bool` | 是否完全平方数 |
|
|
| `gmp_perfect_power` | `perfectPower()` | `(): bool` | 是否完全幂 |
|
|
| `gmp_prob_prime` | `probPrime($reps = 10)` | `(int): int` | 概率素性检测(Miller-Rabin) |
|
|
| `gmp_nextprime` | `nextPrime()` | `(): BigInt` | 下一个素数 |
|
|
| `gmp_binomial` | `binomial($k)` | `(int): BigInt` | 二项式系数 C(n, k) |
|
|
| `gmp_fact` | `fact()` | `(): BigInt` | 阶乘 n! |
|
|
|
|
### 中优先级 — 高级数论函数
|
|
|
|
| GMP 函数 | 建议方法名 | 签名 | 说明 |
|
|
|----------|-----------|------|------|
|
|
| `gmp_gcdext` | `gcdext($x)` | `(BigInt): array` | 扩展 GCD,返回 [g, s, t] 使得 g = s·a + t·b |
|
|
| `gmp_invert` | `invert($mod)` | `(BigInt): BigInt\|false` | 模逆元,不存在时返回 false |
|
|
| `gmp_sqrtrem` | `sqrtrem()` | `(): array` | 平方根+余数,返回 [root, rem] |
|
|
| `gmp_jacobi` | `jacobi($x)` | `(BigInt): int` | Jacobi 符号 |
|
|
| `gmp_legendre` | `legendre($x)` | `(BigInt): int` | Legendre 符号 |
|
|
| `gmp_kronecker` | `kronecker($x)` | `(BigInt): int` | Kronecker 符号 |
|
|
|
|
### 低优先级 — 较少使用
|
|
|
|
| GMP 函数 | 建议方法名 | 签名 | 说明 |
|
|
|----------|-----------|------|------|
|
|
| `gmp_divexact` | `divExact($x)` | `(BigInt): BigInt` | 精确除法(已知整除时使用,比普通除法更快) |
|
|
| `gmp_root` | `root($n)` | `(int): BigInt` | n 次方根(截断) |
|
|
| `gmp_rootrem` | `rootrem($n)` | `(int): array` | n 次方根+余数 |
|
|
| `gmp_hamdist` | `hamDist($x)` | `(BigInt): int` | 汉明距离 |
|
|
|
|
### 不适用 — 与不可变设计冲突
|
|
|
|
| GMP 函数 | 原因 |
|
|
|----------|------|
|
|
| `gmp_setbit` | 直接修改 GMP 对象,BigInt 不可变 |
|
|
| `gmp_clrbit` | 直接修改 GMP 对象,BigInt 不可变 |
|
|
|
|
### 待评估
|
|
|
|
| GMP 函数 | 说明 |
|
|
|----------|------|
|
|
| `gmp_scan0` | 从指定位置找第一个 0 位 |
|
|
| `gmp_scan1` | 从指定位置找第一个 1 位 |
|
|
| `gmp_random_bits` | 生成随机位数的 BigInt(需全局种子,不适合实例方法) |
|
|
| `gmp_random_range` | 区间随机 BigInt(需全局种子,不适合实例方法) |
|
|
| `gmp_random_seed` | 设置随机种子(全局状态,不适合实例方法) |
|
|
| `gmp_import` | 从二进制字符串导入 |
|
|
| `gmp_export` | 导出为二进制字符串 |
|
|
|
|
## toString 增强
|
|
|
|
| 缺失功能 | 说明 |
|
|
|---------|------|
|
|
| `toString($base)` | 当前 `toString()` 仅支持十进制。GMP 的 `gmp_strval` 支持 2-62 进制输出 |
|
|
|
|
## 更新记录
|
|
|
|
- 2026-05-27:初始版本,对比 PHP 8.4.14 GMP 扩展
|
|
|