Работа с очень большими и очень маленькими числами при помощи языка программирования-PHP
Решение
Для этого нужна либо библиотека BCMath, либо библиотека GMP.
Применение BCMath:
$sum = bcadd('1234567812345678', '8765432187654321');
// переменная $sum равна теперь '9999999999999999'
print $sum;
Применение GMP:
$sum = gmp_add('1234567812345678', '8765432187654321');
// $sum теперь ресурс GMP, а не строка; для преобразования
// используйте функцию gmp_strval()
print gmp_strval($sum);
Обсуждение
Библиотека BCMath проста в применении. Числа передаются как строки, а функция возвращает сумму (или разность, произведение и т. д.) в виде строки. Однако набор действий, которые можно производить над числами с помощью библиотеки BCMath, ограничен основными арифметическими операциями.
Библиотека GMP доступна начиная с версии PHP 4.0.4. Большинство представителей семейства функций библиотеки GMP в качестве аргументов принимают целые и строки, но они преимущественно обмениваются числами в виде ресурсов, которые, по сути дела, представляют собой ссылки на числа. Поэтому, в противоположность функциям BCMath, которые возвращают строки, функции GMP возвращают только ресурсы. Последние передаются затем любой функции GMP, которая работает с ними как с числами.
Единственной оборотной стороной медали является то, что при работе с не-GMP функциями необходимо непосредственно конвертировать ресурсы с помощью функции gmp_strval() или функции gmp_intval().
Функции GMP либерально относятся к входным параметрам. Например:
$four = gmp_add(2, 2); // Передаем целые
$eight = gmp_add('4', '4'); // Или строки
$twelve = gmp_add($four, $eight); // Или ресурсы GMP
print gmp_strval($twelve); // Печатаем 12
Впрочем, с числами GMP можно совершать множество операций помимо сложения, таких как возведение в степень, быстрое вычисление больших факториалов, нахождение наибольшего общего делителя (НОД) и других:
// Возведение числа в степень
$pow = gmp_pow(2, 10); // 1024
// Быстрое вычисление больших факториалов
$factorial = gmp_fact(20); // 2432902008176640000
// Нахождение НОД
$gcd = gmp_gcd (123, 456); // 3
// Другой нестандартный математический инструментарий
$legdendre = gmp_legendre(1, 7); // 1
Библиотеки BCMath и GMP не обязательно доступны во всех конфигурациях PHP. Начиная с версии PHP 4.0.4 библиотека BCMath связана с PHP, поэтому она, вероятно, должна быть легко доступна. Однако если библиотека GMP не связана с PHP, то необходимо ее загрузить, инсталлировать и в процессе конфигурирования проинструктировать PHP об использовании этой библиотеки. Проверьте значения функций function_defined('bcadd') и function_defined('gmp_init') чтобы определить, можно ли использовать библиотеки BCMath и GMP.
Комментарии:
Комментариев нет
|
|
|