究竟什么是任意精度数学?
任意精度算术又名“bignum math”,引入了一种对数字执行算术运算的方法,其位数仅受可用内存量的限制。这与主机系统的 CPU/ALU 提供的固定精度算法背道而驰,其中所表示的数字的最大大小/精度是这些硬件处理器的寄存器的位数的一个因素。
固定精度算术在存储方面快速、高效,并且是内置/普遍可用的。然而,它适用于有限的(如果只是有时“足够大”)数值范围。任意精度算术速度较慢,有点浪费存储空间,并且需要专门的库,例如 GMP 或 BCMath。
BCMath 和 GMP 库之间有什么区别
最显着的区别是 GMP 适用于 [任意精度]整数值,而 BCMath 允许 [任意精度]十进制/浮点型值。
这两个 API 都不好学,但 BCMath 可能更直观一些(除了支持类似浮点的值)
一个人选择特定库而不是另一个库通常是由预期用途(或给定平台上的可用性)驱动的。除非您深入了解 MP 应用程序,否则大多数库将符合要求并且通常是等效的(当然,在其类中,即如果您需要浮点数,请避免使用仅整数库)。
BCMath/GMP 需要什么类型的数字?
与大多数任意精度数学包一样,这两个库在其 API 中使用字符串,即表示其输入和输出数值。
在内部......一些像GMP这样的包有自己的数字表示。这种结构的特殊性通常是最小化存储要求和允许快速计算(包括将这种结构“序列化/反序列化”到文本文件/从文本文件中“序列化/反序列化”)之间的折衷。
的示例"\x12\x23\x45\x67"
称为BCD即二进制编码的十进制。它允许每个字节存储 2 个十进制数字,有时被任意精度算术库使用。