Make your own free website on
9.7. Limits in Regina

Regina tries not to enforce any limits. Wherever possible,
“memory” is the limit, at the cost of some CPU whenever internal
data structures must be expanded if their initial size were too
small.  Note that Regina will only increase the internal areas,
not decrease them afterwards. The rationale is that if you happen
to need a large internal area once, you may need it later in the
same program too.

In particular, Regina has the following limits:

Binary strings      source line size
Clock granularity   0.001-1 second
                    (note 3)
Elapse time clock   until ca. 2038
                    (note 1)
Hexadecimal         source line size
Literal string      source line size
Nesting of          memory
Parameters          memory
Significant digits  memory (note 2)
Subroutine levels   memory
Symbol length       source line size
Variable name       memory (note 2)


1) Regina uses the Unix-derived call time() for the elapse time
(and time in general). This is a function which returns the number
of seconds since January 1st 1970. According to the ANSI C
standard, in which Regina is written, this is a number which will
at least hold the number 2**31-1. Therefore, these machines will
be able to work until about 2038, and Regina will satisfy the
requirement of the elapse time clock until 2006. By then,
computers will hopefully be 64 bit.

Unfortunately, the time() C function call only returns whole
seconds, so Regina is forced to use other (less standardized)
calls to get a finer granularity. However, most of what is said
about time() applies for these too.

2) The actual upper limit for these are the maximum length of a
string, which is at least 2**32. So for all practical purposes,
the limit is “memory”.

3) The clock granularity is a bit of a problem to define. All
systems can be trusted to have a granularity of about 1 second.
Except from that, it’s very difficult to say anything more
specific for certain. Most systems allows alternative ways to
retrieve the time, giving a more accurate result. Wherever these
alternatives are available, Regina will try to use them. If
everything else fails, Regina will use 1 second granularity.

For most machines, the granularity are in the range of a few
milliseconds. Some typical examples are: 20 ms for Sun3, 4 ms for
Decstations 3100, and 10 ms for SGI Indigo. Since this is a
hardware restriction, this is the best measure anyone can get for
these machines.