packages icon
 ARIBAS(1)                                               ARIBAS(1)


 NAME
        aribas - Multiprecision Arithmetic Interpreter


 SYNOPSIS
        aribas [options] [<ari-file> [<arg1> <arg2> ...]]

        This  man  page  was  written for Debian since the orginal
        software did not contain a man page.


 DESCRIPTION
        Aribas is an  interactive  interpreter  suitable  for  big
        integer   arithmetic  and  multiprecision  floating  point
        arithmetic.  It has a syntax similar  to  Pascal  or  Mod
        ula-2,  but  contains also features from other programming
        languages like C, Lisp, Oberon.


 USAGE
        The simplest way to use aribas is as a calculator for (big
        integer)  arithmetic. After aribas is started, it displays
        a prompt ==> and is ready to accept  input.  Simply  enter
        the  expression  you want to calculate, followed by a full
        stop, and then press RETURN, for example

            ==> 123 + 456*789.

        Aribas answers

            -: 359907

        The symbol -: introduces the result.
        IMPORTANT.  To mark the end of your input, you must always
        type a full stop `.'  and then press RETURN.

        You  can assign the result of a calculation to a variable,
        as in

            ==> F6 := 2**64 + 1.
            -: 18446_74407_37095_51617

        This calculates the 6th Fermat number (** denotes exponen
        tiation)  and  assigns  it  to  the variable F6 (note that
        aribas is case sensitive, so this is not the same as  f6).
        Later you can use this variable for example in the expres
        sion

            ==> 123**(F6 - 1) mod F6.
            -: 688_66214_58712_63971

        which shows (by Fermat's theorem) that F6 is not  a  prime
        number.
        The  three  most  recent  results are stored in the pseudo
        variables _, __, and ___. For example you  can  store  the
        last result in the variable x by the command

            ==> x := _.
            -: 688_66214_58712_63971

        As  you  can  see  in  the above examples, aribas uses the
        underscore _ to structure the output of big  integers  (>=
        2**32).  Also for input of integers you may use the under
        score, the only condition is that immediately  before  and
        after the underscore there are digits, example:

            ==> z := 123_4567_890.
            -: 1234567890

        Here the output contains no underscore, which shows that z
        is less than 2**32.

        Aribas has several built-in functions  for  factorization,
        for  example rho_factorize, which uses Pollard's rho algo
        rithm.

            ==> rho_factorize(F6).

            working ..
            factor found after 512 iterations

            -: 274177

        To find the remaining cofactor, give the command

            ==> x := F6 div _.
            -: 6728_04213_10721

        To test whether this factor is prime, Rabin's  probabilis
        tic test rab_primetest can be applied:

            ==> rab_primetest(x).
            -: true

        The  function rho_factorize is good for finding small fac
        tors (say up to 10 decimal digits); for  more  complicated
        factorization  tasks  a  more  powerful algorithm like the
        quadratic sieve qs_factorize should be used

            ==> qs_factorize(2**128+1).

        (Depending on the power of your computer, it will  take  a
        few  seconds  up to a few minutes to get a prime factor of
        the 7th Fermat number.)


    Control structures
        The for loop and the while loop in aribas have a syntax as
        in  Modula-2.  For example, the following command sequence
        calculates the factorial of 100.

            ==> x := 1;
                for i := 2 to 100 do
                    x := x*i;
                end;
                x.

        As you can see in this example, the input may extend  over
        several lines.

        The  above  for  loop is equivalent to the following while
        loop

            ==> x := 1; i := 2;
                while i <= 100 do
                    x := x*i;
                    inc(i);
                end;
                x.


        The branching construct
        if ...  then ...  elsif ...  else ...  end
        has also the same syntax as in Modula-2.

    Multiprecision floating point arithmetic
        Aribas supports different types of floating point  numbers
        which are internally represented with mantissas of differ
        ent bit-length:

                single_float    32 bits
                double_float    64 bits
                long_float     128 bits

        and several higher  precisions  up  to  an  implementation
        dependent limit, typically 1024 or 4096 bits, which can be
        determined by the function  max_floatprec().  By  default,
        when  calculating  with  numbers  of  data type real, sin
        gle_floats are used. This corresponds to a precision of  9
        to  10  decimal  places.   A precision of 4096 bits corre
        sponds to over 1200 decimal places.

        The precision can be changed using the function set_float
        prec.  The  function  takes one integer argument, which is
        the desired precision in bits. It is automatically rounded
        to the next higher available value. For example, after

            ==> set_floatprec(100).
            -: 128

        the  floating point precision is 128 bits and you can cal
        culate

            ==> arctan(sqrt(3)).
            -: 1.04719_75511_96597_74615_42144_61093_16762_8

            ==> _/pi.
            -: 0.33333_33333_33333_33333_33333_33333_33333_33


    User defined functions
        The user can define his or her own  functions.  A  typical
        example looks like

            ==> function fac(n: integer): integer;
                var
                    x,i: integer;
                begin
                    x := 1;
                    for i := 2 to n do
                        x := x*i;
                    end;
                    return x;
                end.

        If  you  have  entered  this  correctly, aribas echoes the
        function name

            -: fac

        and from now on you can use fac  in  the  same  way  as  a
        built-in function, e.g.

            ==> fac(32).
            -: 2_63130_83693_36935_30167_21801_21600_00000

        Note  that  inside function definitions all used variables
        must be explicitly declared, whereas on top level  of  the
        aribas  interpreter  variables  can  be  simply created by
        assignments. Here is another  example,  which  shows  some
        other data types supported by aribas:

            ==> function sqrt_list(n: integer): array of real;
                var
                    vec: array[n] of real;
                    i: integer;
                begin
                    for i := 1 to n do
                        vec[i-1] := sqrt(i);
                    end;
                    return vec;
                end.

        This  function returns an array of the square roots of the
        integers from 1 to n, for example

            ==> sqrt_list(10).
            -: (1.00000000, 1.41421356, 1.73205081, 2.00000000,
            2.23606798, 2.44948974, 2.64575131, 2.82842712, 3.00000000,
            3.16227766)

        In a bigger programming project  where  you  need  several
        functions  you would not enter them directly at the aribas
        prompt but prepare the function definitions with an exter
        nal  text  editor and save them in a file  with the exten
        sion .ari , for example abcd.ari . This file can  then  be
        loaded by aribas using the command

            ==> load("abcd").

        If  there  is a syntax error in the file, you get an error
        message of the form

            error in line <= 23 of loaded file
            if: end expected

        which tells you (in this example) that there is  an  error
        in  the  if  construct  in line 23 or earlier in the file.
        (Note that the error messages are sometimes not very  pre
        cise.)  You  can  then correct the error and load the file
        again.

    Online help
        The command

            ==> symbols(aribas).

        returns a list of all keywords and names of builtin  func
        tions  of  aribas.   This  list has about 180 entries, and
        begins and ends as follows:

        (ARGV, _, __, ___, abs, alloc, and, arccos,  arcsin,  arc
        tan,  arctan2,  aribas,  array, atof, atoi, begin, binary,
        bit_and, bit_clear, bit_length, ...... , tolower, toupper,
        transcript,  true, trunc, type, user, var, version, while,
        write, write_block, write_byte, writeln)

        For most of the symbols in this list, you can get a  short
        online  help  using  the function help(). For example, the
        command

            ==> help(ARGV).

        gives an information on the builtin variable ARGV, whereas

            ==> help(while).

        describes  the  syntax of the while loop. If you need more
        information than that contained in the online  help,  con
        sult   the   documentation   which   can   be   found   in
        /usr/share/doc/aribas.

    How to exit
        To end an aribas session, type exit at the aribas prompt

            ==> exit

        and then press the RETURN (ENTER) key.

        If you don't want to leave aribas, but want to  break  out
        of  an infinite loop or a calculation that lasts too long,
        type CONTROL-C (if you  are  running  aribas  from  within
        Emacs, you must press CONTROL-C twice). This will (in most
        cases) stop the current  calculation  and  return  to  the
        aribas prompt.

        When you are not using the Emacs interface but the command
        line version of aribas, you sometimes get into the follow
        ing situation: Some previous line contains a typing error,
        but you cannot return to that line to correct it.  In this
        case  you should simply type a full stop `.' , followed by
        RETURN. You will get an error message which you can safely
        ignore,  and a new prompt ==> appears, allowing you to try
        again.

 COMMAND LINE ARGUMENTS
        aribas [options] [<ari-file> [<arg1> <arg2> ...]]


    options
        The following options are available:

        -q     (quiet mode) Suppresses all messages to the  screen
               (version no, copyright notice, etc.) when aribas is
               started

        -v     (verbose mode, default) Does not suppress  messages
               to the screen when aribas is started.

        -c <cols>
               aribas  does  its own line breaking when writing to
               the screen.  Normally it supposes that  the  screen
               (or  the  window  in  which  aribas  runs)  has  80
               columns. With the -c option  you  can  set  another
               number,  which must be between 40 and 160 (in deci
               mal  representation).   For  example,  if  you  run
               aribas  in an Xterm window with 72 columns, use the
               option -c72 (or -c 72, the space between -c and the
               number is optional).

        -m <mem>
               Here  <mem> is a number (in decimal representation)
               between 64 and 16000.  This  number  indicates  how
               many  Kilobytes  of  RAM  aribas should use for the
               aribas heap.  The  default  value  depends  on  the
               options  used  when aribas was compiled. Typically,
               under UNIX or LINUX it is 6 Megabytes,  correspond
               ing to -m6000

        -h <path of help file>
               The  online  help  of  aribas  depends  on  a  file
               aribas.hlp which should be situated  in  the  range
               of  the  environment  variable PATH. If this is not
               the case you can specify the exact path of the help
               file  with  the  -h option. If for example the file
               aribas.hlp is in the directory /usr/local/lib,  use
               the option -h /usr/local/lib (the space after -h is
               not necessary).  The -h option can also be used  if
               the  help  file  has  a different name. If the help
               file is named help-aribas and lies in the directory
               /home/joe/ari, use -h/home/joe/ari/help-aribas.

               With  a properly installed Debian package of aribas
               it should not be necessary to use this option.

        -p <ari-search-path>
               With this option you can specify a search path  for
               loading files with aribas source code. <ari-search-
               path> may be either the (absolute) pathname of  one
               directory or several pathnames separated by colons.
               Suppose that you have called aribas with the option

                    -p/usr/local/lib/aribas:~/ari/examples

               and  that your home directory is /home/alice/. Then
               the command

                    ==> load("factor").

               will search the file factor.ari first in  the  cur
               rent    directory,    then    in    the   directory
               /usr/local/lib/aribas      and      finally      in
               /home/alice/ari/examples.


        -b     Batch  mode when loading an aribas source code file
               from the command line, see below.


        One letter options  which  require  no  arguments  may  be
        merged, for example

            aribas -q -b

        is equivalent to

            aribas -qb

    Further command line arguments
        <ari-file>
               The next command line argument after the options is
               interpreted as the  name  of  a  file  with  aribas
               source  code.  If  the  file name has the extension
               .ari, this extension may be omitted.  The  file  is
               loaded  as  if  the  command load("<ari-file>") had
               been given after the start of aribas at the  aribas
               prompt.  If  the  file  is not found in the current
               directory it is searched in the directories  speci
               fied by the -p option.  If the option -b was given,
               the file is loaded and executed.  Afterwards aribas
               exits without showing it's prompt. If the file can
               not be  loaded  completely  because  of  an  error,
               aribas exits immediately after the error message.

        <arg1> <arg2> ...
               When  further  command  line arguments follow <ari-
               file>, they are  collected  (as  strings)  together
               with  <ari-file>  in  the  vector ARGV which can be
               accessed from within aribas.  Example: If you  call
               aribas with the command line

                    aribas startup 4536 eisenstein

               and   the   current  directory  contains  the  file
               startup.ari, then aribas loads it  and  the  vector
               ARGV has the form

                   ==> ARGV.
                   -: ("startup", "4536", "eisenstein")

               If  you  need  some arguments as numbers and not as
               strings, you can transform them by atoi (or  atof);
               in our example

                   ==> x := atoi(ARGV[1]).
                   -: 4536

               will  do  it.  The length of the vector ARGV can be
               determined by length(ARGV).

 RUNNING ARIBAS WITHIN EMACS
        You can run aribas from within Emacs by giving the command
        (in Emacs' minibuffer)

             M-x run-aribas

        (If  you  don't have a META key, use ESC x instead of M-x)
        Then aribas will be loaded into an Emacs window with  name
        *aribas*  and  you  can edit your input to aribas with the
        usual Emacs commands.

        If your input ends with a full  stop  '.'  and  you  press
        RETURN,  it  is  sent to aribas.  If however your complete
        input does not end with  a  full  stop,  (for  example  in
        response  to a readln), the input is sent to aribas by C-j
        (Control-j) or C-c RETURN.

        If you want to repeat a previous input,  M-p  (or  ESC  p)
        cycles  backward through input history, and M-n (or ESC n)
        cycles forward.

        A Control-C is sent  to  aribas  by  C-c  C-c  (press  C-c
        twice).

        It  is  also possible to start aribas from Emacs with com
        mand line arguments. For this purpose the command

             C-u M-x run-aribas

        has to be given. Then a prompt

             run-aribas: aribas

        appears in the Minibuffer of Emacs and  you  can  complete
        the command line, for example

             run-aribas: aribas startup 4536 eisenstein

        (see above).

 CONFIGURATION FILE
        Options  for  running aribas can be specified also using a
        configuration file with name .arirc.  Aribas searches  for
        a configuration file in the following order:

            1) the current directory
            2) the home directory of the user

        There  is  a third possibility: You can define an environ
        ment variable ARIRC containing the name of the  configura
        tion  file (which may be different from .arirc), including
        the full path.

        In the configuration file you can specify all command line
        options described above which begin with a - sign, however
        a separate line must be  used  for  every  single  option.
        Lines  beginning  with  the character # or empty lines are
        ignored.  In addition to the options described above,  the
        configuration  file  may  contain  aribas source code. For
        this purpose there must be a line reading

        -init

        Then everything after  this  line  is  treated  as  aribas
        source code and executed when aribas is started.
        The  existence of a configuration file for aribas does not
        exclude the possibility to give command line arguments. If
        an  option  (e.g.  the -m option) is specified both in the
        configuration file and the command line but with different
        values,  then  the  specification  at  the command line is
        valid. Analogously, a -v option on the command line  over
        rides  a -q option in the configuration file.  If there is
        -init code in the configuration  file  and  an  <ari-file>
        argument  at the command line, then the -init code is exe
        cuted first and afterwards the <ari-file>  is  loaded  and
        its code executed.


 FILES
        $ARIRC, .arirc, $HOME/.arirc

               Optional configuration file.


 ENVIRONMENT VARIABLES
        $ARIRC Location of the optional configuration file.


 SEE ALSO
        emacs(1)

        More  information  on  how  to  use aribas can be found in
        /usr/share/doc/aribas.

        The  aribas  home   page   is   http://www.mathematik.uni-
        muenchen.de/~forster/sw/aribas.html.

 BUGS
        Bug reports should be sent by email to

            forster@mathematik.uni-muenchen.de


 AUTHOR
        Otto  Forster  <forster@mathematik.uni-muenchen.de> is the
        author of the aribas program. This man page  was  compiled
        by Ralf Treinen <treinen@debian.org> from the aribas docu
        mentation for the Debian package of  aribas,  and  supple
        mented by the author.


 ARIBAS                    February 2001