Что такое математика с произвольной точностью?
Арифметика с произвольной точностью, известная как "bignum math", представляет способ выполнения арифметических операций над числами, количество цифр которых толькоограничено объемом доступной памяти.Это идет вразрез с арифметикой с фиксированной точностью , которая предоставляется процессорами / ALU хост-систем и где максимальный размер / точность представленного числа является фактором количества битов регистровэти аппаратные процессоры.
Арифметика с фиксированной точностью является быстрой, эффективной в отношении хранилища и является встроенной / универсально доступной.Однако это применимо к ограниченным (если только иногда «достаточно большим») числовым диапазонам.Арифметика произвольной точности медленнее, несколько расточительна для хранилища и требует специализированных библиотек, таких как GMP или BCMath.
В чем различия между библиотеками BCMath и GMP
Самым существенным отличием является то, что GMP работает с [произвольной точностью] целыми числами значениями, в результате чего BCMath допускает [произвольную точность] десятичных / плавающих значений.
Ни один API не являетсятрудно выучить, но BCMath может быть немного более интуитивным (в дополнение к поддержке значений типа float)
Выбор одной библиотеки над другой обычно обусловлен предполагаемым использованием (илиналичие на данной платформе).До тех пор, пока вы не углубитесь в MP-приложения, большинство библиотек будут соответствовать требованиям и в целом будут эквивалентны (в пределах своего класса, конечно, то есть избегать только целочисленных библиотек, если вам нужны числа с плавающей запятой).
какой тип чисел принимает BCMath / GMP?
Как и в большинстве математических пакетов произвольной точности, эти две библиотеки используют строки для своего API, то есть для представления своих входных и выходных числовых значений.
Внутренне... Некоторые пакеты, такие как GMP, имеют собственное представление для чисел.Специфика таких структур обычно представляет собой компромисс между минимизацией требований к хранилищу и возможностью быстрых вычислений (включая «сериализацию / десериализацию» таких структур в / из текстовых файлов.)
Пример "\x12\x23\x45\x67"
в вопросе известен как BCD т.е. двоично-десятичный десятичный.Он позволяет хранить 2 десятичных знака на байт и иногда используется библиотеками Arbitrary Precision.