Есть ли класс BigInteger в PHP? - PullRequest
12 голосов
/ 13 декабря 2010

Есть ли класс BigInteger в PHP? Если да, то как мне получить к нему доступ или использовать его?

Ответы [ 2 ]

16 голосов
/ 13 декабря 2010

Надеемся, полезные ссылки:

РЕДАКТИРОВАТЬ: Math_BigInteger

Пример из http://phpseclib.sourceforge.net/documentation/math.html:

Реализует целочисленную арифметическую библиотеку произвольной точности. Использует gmp или bcmath, если доступно, и внутреннюю реализацию, в противном случае.

<?php
    include('Math/BigInteger.php');

    $a = new Math_BigInteger(2);
    $b = new Math_BigInteger(3);

    $c = $a->add($b);

    echo $c->toString(); // outputs 5
?>
7 голосов
/ 02 сентября 2014

Несмотря на то, что этот вопрос старый, он появляется в качестве первого результата при поиске в Google для BigInteger PHP, поэтому для всех, кто заинтересовался, я открыл библиотеку под названием Brick \ Math , предлагающую BigInteger, BigDecimal и BigRational классов.


Использование

use Brick\Math\BigInteger;
use Brick\Math\RoundingMode;

Сложение:

echo BigInteger::of('9999999999999999999999999')->plus(1);
// 10000000000000000000000000

Вычитание:

echo BigInteger::of('10000000000000000000000000')->minus(1);
// 9999999999999999999999999

Умножение:

echo BigInteger::of('3333333333333333333333333')->multipliedBy(11);
// 36666666666666666666666663

Разделение:

echo BigInteger::of('1000000000000000000000')->dividedBy(3, RoundingMode::UP);
// 333333333333333333334

Вычисление:

echo BigInteger::of(11)->power(50);
// 11739085287969531650666649599035831993898213898723001

Вы можете легко связывать вызовы методов:

echo BigInteger::of(3)->multipliedBy(7)->minus(1)->dividedBy(10);

Установка

Просто установите с помощью Composer и все готово:

composer require brick/math

Библиотека автоматически использует GMP и BCMath расширения, когда они доступны, для ускорения вычислений, но также будут работать без них благодаря чистой реализации PHP.

...