Man Linux: Main Page and Category List

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 Modula-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 exponentiation) 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 expression

           ==> 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  underscore,  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 algorithm.

           ==> 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 probabilistic test
       rab_primetest can be applied:

           ==> rab_primetest(x).
           -: true

       The function rho_factorize is good for finding small factors (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 different 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  5120 bits, which can be determined by the function
       max_floatprec(). By default, when calculating with numbers of data type
       real,  single_floats  are used. This corresponds to a precision of 9 to
       10 decimal places.  A precision of 5120 bits corresponds to  over  1500
       decimal places.

       The  precision  can  be  changed  using the function set_floatprec. 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 calculate

           ==> 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 external text editor and save  them  in  a
       file   with  the  extension .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  precise.) 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  functions  of
       aribas.   This  list  has  about  200  entries,  and begins and ends as
       follows:

       (ARGV, _, __, ___, abs, alloc, and, arccos,  arcsin,  arctan,  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, consult 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  following  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 decimal
              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  500
              and  32000.  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, corresponding 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 current 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  specified  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  cannot 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  command  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  environment  variable
       ARIRC  containing  the  name  of  the  configuration 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 overrides 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  executed  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  documentation  for  the Debian
       package of aribas, and supplemented by the author.