Page 1 of 1

Giant constant numbers.

Posted: 7 Aug 2017 15:26
by kingchris
If I am doing some odd maths how does one get large numbers into integer64 variables and constants.

There is a unsigned64:value function I think that takes two parameters.

One of my constants is 80 characters for I might have to call a 128 bit library.

In C and C++ one always added a L to the end of your number constant.

unsigned var = 7362398263876L;

I believe that C++ 11 has 128 bit numbers now.

Cheers

Posted: 7 Aug 2017 19:24
by Thomas Linder Puls
I do not think there are 128 bit numbers (by default) in C++ 11, but it is not something I know for sure.

However, the 'L' in C/C++ literals indicates a 64 bit number.

I Visual Prolog you can use the types unsigned64 and integer64 and you do not need to use any special marks to write such numbers:

Code: Select all

constants    value : unsigned64 = 7362398263876.   class predicates     p : (unsigned64 X) -> unsigned64 Y. clauses     p(X) = 7362398263876 + value + X.
unsigned64 have the range [0..18446744073709551615].
integer64 have the range [-9223372036854775808..9223372036854775807].

128 bit numbers cannot hold a 80 digit number, the largest number in an 128 bit unsigned is 2^128 ~ 3,4e38 (i.e. 39 digits).

A real can hold very large numbers, but (only) with ~15 digits precision.

Posted: 7 Aug 2017 23:47
by Martin Meyer
Hello Chris (and Thomas and all),

the below attached project gives an example how one could deal with numbers which exceed the limits of the build-in number domains. The example implements large unsigned integer numbers encoded in binaries. The implemented arithmetics uses however only the -simple- school methods. For multiplication and especially for division faster (but more complicated) algorithms are known.

Posted: 8 Aug 2017 5:54
by kingchris
Thanks gentlemen for your assistance.

Much appreciated