![]() |
+7 (495) 229-0436 | ![]() |
shopadmin@itshop.ru | 119334, г. Москва, ул. Бардина, д. 4, корп. 3 | ![]() |
![]() |
![]() |
|
|
AzaMath - Cистемы счисления (включая кастомные) + арифметика произвольной точности на PHP15.02.2013 14:00
samally
Возникла недавно задача, связанная с конвертацией между различными позиционными системами счисления. В качестве реального применение обычно выступают сервисы для сокращения URL, использующие системы base36/base62 или, например, хранение большого количества огромных чисел в том же base62 для экономии памяти. Поискав среди существующих решений, понял, что ни одно из них не устраивает, в связи с чем, решил подготовить Получилась AzaMath - библиотека для конвертации между системами счисления (включая кастомные) + удобная арифметика произвольной точности.
Системы счисленияОсновной задачей библиотеки, на текущий момент, является перевод маленьких, больших и огромных чисел из одной позиционной системы счисления в другую. Поддержка стандартных систем с основанием от 2 до 62 включительно, а также поддержка позиционных систем со своим собственным алфавитом (хоть все символы ASCII). Также желательно поддерживать отрицательные числа и дроби. Для начала анализ альтернативных реализаций, которые можно использовать.
Свой вариант конвертации был реализован полностью независимо от сторонних расширений и без промежуточного конвертирования в десятичную системы, что позволило ему быть настолько быстрым, насколько это возможно на PHP (это медленно :) - примерно на 6000% медленнее, чем GMP реализация. Поэтому, при возможности, всегда используется более быстрая реализация. Также очень рекомендуется установить расширение GMP, если вдруг понадобится много и регулярно конвертировать числа. Отрицательные числа полностью поддерживаются. В комплект библиотеки, в качестве примера, входят три нестандартные системы счисления: base32 и base64 c алфавитами известных систем кодирования по стандарту RFC4648, также base64url из того же стандарта - base64 c алфавитом безопасным для использования в URL. Следует учитывать, что это конвертация чисел, а не произвольных строк, поэтому результат base64 будет совершенно отличным от результата функции base64_encode. Увы, поддержку дробей пока не закончил - не удалось сделать достаточно быстро и пришлось отложить. Возможно сделаю позже, либо, если
Примеры использования
Арифметика произвольной точностиОперирование над большими числами выполнено в качестве удобной обертки над расширением BCMath. В исходном состоянии BCMath не слишком удобен для реального применения. Одно только наполнение результата нулями до указанной точности (1234.2130000000...) чего стоит. Поддерживаются все основные арифметические действия, а также возведение в степень, получение квадратного корня, остатка от деления, битовый сдвиг, округление, сравнения и некоторые другие операции. Все числа внутри представляются в виде строки, но на входе принимаются и типы int/float. При тестах быстро выяснилось, насколько сильно теряется точность с типом данных float. К тому же экспоненциальная запись (12e26,
Примеры использования
Ссылки по теме |
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
О нас |
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.
На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям. Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе. В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.
|
119334, г. Москва, ул. Бардина, д. 4, корп. 3 +7 (495) 229-0436 shopadmin@itshop.ru |
|
© ООО "Interface Ltd." Продаем программное обеспечение с 1990 года |