Какова точность для PHP-библиотеки bcmath?
Я пишу библиотеку PHP, которая имеет класс Number, который использует bcmath
расширение для произвольной точности.
У меня есть два вопроса:
Насколько медленнее bcmath по сравнению со встроенными типами int и float?
bcmath
имеет необязательный аргумент масштаба (по умолчанию 3 цифры). Для класса Number общего назначения, который любой может использовать, какой будет хороший уровень точности? Как языки, такие как Perl (с произвольными точными числами), справляются с масштабированием?
1 ответ
Я бы решил, какой диапазон номеров вам нужно поддерживать. Встроенные значения будут быстрее любого значения, которое требует вычисления и преобразования в / из какого-либо другого формата.
Встроенные целые числа хороши до 32 бит в любой системе, некоторые системы поддерживают 64-битные значения. Вы можете проверить, что поддерживает ваша система, проверив значение константы PHP_INT_MAX и определить, хотите ли вы после этого переносить накладные расходы на библиотеку математики. Для систем с 32-разрядными целыми числами все, что больше 32-разрядных, будет автоматически преобразовано в число с плавающей точкой. Это не проблема, если вы не используете встроенные функции для таких вещей, как round, printf, modulus и т. Д.
Меня немного поразило использование модуля для разделения трафика, приходящего на мой сайт, а также форматирование целых чисел с использованием%d в sprintf: http://af-design.com/blog/2009/10/28/php-64-bit-integer-modulus-almost/