> < ^ From:

< ^ Subject:

Thomas Bending writes in his e-mail message of 1994/02/08

There seems to be an upper limit on the integers that can form the end of

a Range - 10^8 works but 10^9 doesn't. Furthermore I think the error

message this causes is rather misleading:gap> Length([1..10^9]); Error, Range: <high> must be an integer gap> Length([10^9..10^9+1]); Error, Range: <low> must be an integer gap> IsInt(10^9); trueI can't find any documentation on this - am I missing something?

Internally GAP distinguishes between three types of integers.

Integers between -2^28 and 2^28-1 called *small integers*,

integers larger than 2^28-1 called *large positive integers*,

and integers less than -2^28 called *large negative integers*.

Large integers are represented by a pointer to a block of memory (called

a bag) where the individual digits (in base 2^16) are stored. For small

integers no pointer is used. Instead the value is stored immediatly

(after shifting it two bits to the left and adding one, so that it is

possible to distinguish between immediate integers and pointers).

In certain places GAP needs immediate integers. One place are ranges,

i.e., in [<low>..<high>] <low> and <high> must be small integers. This

may get fixed in the near future. Another place are indices into lists,

i.e., in '<list>[<index>]' <index> must be a small integer. To fix this

one would first have to implement a sparse representation for lists where

the amount of memory allocated for a list depends on the number of

assigned entries. With the current dense representation the amount of

memory depends on the largest position of any assigned entry. So the

list 'l := []; l[10^9] := 1;' would need '4*10^9' bytes, clearly more

than most machines have. To implement such a sparse representation and

then allow large integers as indices is not among our immediate plans.

Cleary a better error message would be desirable. And, I agree, it would

also be nice if the documentation mentioned this problem.

Martin.

-- .- .-. - .. -. .-.. --- ...- . ... .- -. -. .. -.- .- Martin Sch"onert, Martin.Schoenert@Math.RWTH-Aachen.DE, +49 241 804551 Lehrstuhl D f"ur Mathematik, Templergraben 64, RWTH, 52056 Aachen, Germany

> < [top]