par*_*446 12 php biginteger gmp bcmath arbitrary-precision
我目前正试图弄清楚如何使用PHP中的任意精度数字.所以我想我的第一个问题是究竟什么是任意精度数学.我试着谷歌搜索一个很好的定义,但由于某种原因,没有人可以用简单的语言.
其次,PHP中的BCMath和GMP库有什么区别?我听说GMP的API是"更新鲜",但是我很高兴.一个更好吗?
我最后的问题是BCMath/GMP需要什么类型的数字.显然它需要字符串形式的正常整数(例如"5.34"),但我已经看到BCMath函数直接用于表示常规整数的八位字节字符串的实现(例如"\ x12\x23\x45\x67"),其中我听说被称为"bigint",但谷歌再也没有给我带来任何好处.
mjv*_*mjv 16
什么是任意精度数学?
任意精度算术又称"bignum数学",介绍了一种对数字执行算术运算的方法,其数字位数仅受可用存储量的限制.这与主机系统的CPU/ALU提供的固定精度算法不同,并且所表示的数字的最大大小/精度是这些硬件处理器的寄存器的位数的因子.
固定精度算法在存储方面快速,高效,并且内置/普遍可用.然而,它适用于有限的(如果仅有时"足够大")数值范围.任意精度算术都比较慢,有点浪费存储,需要专门的库,如GMP或BCMath.
BCMath和GMP库之间有什么区别
最显着的区别是GMP在[任意精度]整数值上工作,因此BCMath允许[任意精度]十进制 /浮点数值.
这两种API都难以学习,但BCMath可能更直观(除了支持浮点数值)
一个特定库的选择优于另一个库,通常由预期用途(或给定平台上的可用性)驱动.在你深入研究MP应用程序之前,大多数库都符合要求并且通常是等效的(当然在它的类中,即如果你需要浮点数,则避免使用整数库).
BCMath/GMP采用什么类型的数字?
与大多数任意精度数学包一样,这两个库使用字符串作为其API,即表示其输入和输出数值.
内部......像GMP这样的一些软件包有自己的数字表示.这种结构的具体情况通常是在最小化存储要求和允许快速计算(包括将这种结构"序列化/反序列化"到文本文件中/从文本文件中进行快速计算)之间的折衷.)问题中
的示例"\x12\x23\x45\x67"称为 BCD,即二进制编码的十进制.它允许每个字节存储2个十进制数字,有时由任意精度算术库使用.