GMP 函数

另请参阅

可以在 数学扩展 部分中找到更多数学函数

目录

添加备注

用户贡献的备注 3 个备注

Nitrogen
13 年前
我创建了一个函数,可以用于将数字转换为您想要的任何进制。您不必返回预定义的字符索引字符串(例如 0-9a-z),只需使用它返回的索引数组创建您自己的任何长度即可。
我四处寻找,但没有看到其他人创建过,我需要一个用于只有数字的简单压缩算法,我还没有真正创建它,但这只是一个最初的想法。

<?php
// ConvertBase 函数说明:
// 我们添加一个数组项 $Input%$Base 的地板值,并将 $Input 除以 $Base 的地板值。
// 重复执行,直到 $Input 不再大于 0。

function ConvertBase($Input,$Base=10) {
$Input=gmp_init($Input);
$Result=array();

for(
$i=0;$i<1||gmp_sign($Input)==1;$i++) {
$Result[]=gmp_intval(gmp_mod($Input,$Base));
$Input=gmp_div_q($Input,$Base);
}
$Result=array_reverse($Result);
return(
$Result);
}

// gmp_strval($.., 36); 可以实现的示例:

// 来自《IT 狂人》的搞笑紧急号码
// (gmp_init 不喜欢前导零)
$Input = '1189998819991197253';

// 我们在 gmp_strval($.., 36); 中使用的示例 36 个字符
$Chars = '0123456789abcdefghijklmnopqrstuvwxyz';

// 统计 $Chars 的数量,以确保它们全部被使用
// 或者使用小于 $Chars 长度的您自己的数字
$Base = strlen($Chars);

// 执行
$Result = ConvertBase($Input,$Base);

// 将结果索引替换为 $Chars 中索引对应的字符
for($i=0;$i<count($Result);$i++)
$Result[$i]=$Chars{$Result[$i]};

// 比较
printf("gmp_strval: %s\r\n",gmp_strval($Input,36));
printf("BaseConvert: %s\r\n",implode($Result));

/* 输出:
gmp_strval: 91h7dixfq6h1
BaseConvert: 91h7dixfq6h1
*/
?>
这个示例当然显示了一个熟悉的结果,但是这个函数的目的是您可以使用您想要的任何进制,并完全显示您自己的输出以表示任何您选择的数字。

此外,对于那些想要执行按位移位的用户来说,这非常简单。要左移,只需将数字乘以 pow(2,x),要右移,只需除以 pow(2,x)。

<?php
function gmp_shiftl($x,$n) { // 左移
return(gmp_mul($x,gmp_pow(2,$n)));
}

function
gmp_shiftr($x,$n) { // 右移
return(gmp_div($x,gmp_pow(2,$n)));
}
?>

玩得开心,
氮气。
richard-slater.co.uk
20 年前
对于那些(像我一样)试图对非常大的数字进行位掩码的人来说,这里有一个有用的函数可以为你完成这项工作。

<?php
function isBitSet($bitMask, $bitMap)
{
return (bool)
gmp_intval(gmp_div(gmp_and($bitMask, $bitMap),$bitMask));
}
?>
john at worldmapad dot com
18 年前
这是一个使用简单 GMP 函数与 PHP 交互的快速而简陋的方法,无需重新编译。它依赖于 exec() 函数的使用,因此请确保您可以使用 exec()。在安全模式下,您必须考虑 safe_mode_exec_dir 指令。并且不要在没有验证输入的情况下简单地将用户输入传递给 exec 函数!

按照 README 和 INSTALL 文件中的说明下载并安装 GMP。
在我的 MAC OS X 服务器上,我只需要执行以下操作:
./configure
make
make check
make install
这将它安装在 /usr/local 目录中。出现了一些错误,但没有影响我需要的任何函数。
在 gmp-4.#.# 中,进入 demos 目录。然后通过键入以下内容编译 pexpr.c
make pexpr
这是一个简单的表达式解析器,作为一些基本 GMP 函数的简单接口。
然后,您可以像这样测试它:
./pexpr "102394874783 * 23498748";
现在,您可以使用 PHP 的 exec() 函数与它交互。
To Top