[fpc-pascal] Super Large Integer Math Calculations

Bart bartjunk64 at gmail.com
Sat Jul 8 00:08:10 CEST 2017


On 7/7/17, noreply at z505.com <noreply at z505.com> wrote:

> For integers beyond 64 bit, or even beyond 32 bit on a 64 bit machine,
> why can't the math be broken down into peices the way a human does it on
> paper, and then theoretically any number can be added and subtracted,
> even if it is beyond 32/64 bit?
>
> Example:
>
> type TSuperLargeInt = string;
>
> var
>    i, j: TSuperLargeInt;
>    output: TSuperLargeInt;
> begin
>    i := '100000000000000000009';
>    j := '100000000000000000001';
>    output := AddLargeInts(i,j);
>    writeln(output);
> end.

http://svn.code.sf.net/p/flyingsheep/code/trunk/wtf/ncalc.pp does exactly that
(all dependenies are also found at
http://svn.code.sf.net/p/flyingsheep/code/trunk/wtf).

It can handle integers (and only integers) up to 2GB digits with
absolut precision.
It can handle GoogolPlex.

Calculate 9^99 with absolute precision:
29512665430652752148753480226197736314359272517043832886063884637676943433478020332709411004889

Fac(100)?
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000

It's not lightning fast, but there is room for optimization I guess.

Bart



More information about the fpc-pascal mailing list