mirror of
https://github.com/lcn2/calc.git
synced 2025-08-19 01:13:27 +03:00
Some folks might think: “you still use RCS”?!? And we will say, hey, at least we switched from SCCS to RCS back in … I think it was around 1994 ... at least we are keeping up! :-) :-) :-) Logs say that SCCS version 18 became RCS version 19 on 1994 March 18. RCS served us well. But now it is time to move on. And so we are switching to git. Calc releases produce a lot of file changes. In the 125 releases of calc since 1996, when I started managing calc releases, there have been 15473 file mods!
199 lines
8.9 KiB
Plaintext
199 lines
8.9 KiB
Plaintext
CALC - An arbitrary precision calculator.
|
|
by David I. Bell
|
|
|
|
|
|
This is a calculator program with arbitrary precision arithmetic.
|
|
All numbers are represented as fractions with arbitrarily large
|
|
numerators and denominators which are always reduced to lowest terms.
|
|
Real or exponential format numbers can be input and are converted
|
|
to the equivalent fraction. Hex, binary, or octal numbers can be
|
|
input by using numbers with leading '0x', '0b' or '0' characters.
|
|
Complex numbers can be input using a trailing 'i', as in '2+3i'.
|
|
Strings and characters are input by using single or double quotes.
|
|
|
|
Commands are statements in a C-like language, where each input
|
|
line is treated as the body of a procedure. Thus the command
|
|
line can contain variable declarations, expressions, labels,
|
|
conditional tests, and loops. Assignments to any variable name
|
|
will automatically define that name as a global variable. The
|
|
other important thing to know is that all non-assignment expressions
|
|
which are evaluated are automatically printed. Thus, you can evaluate
|
|
an expression's value by simply typing it in.
|
|
|
|
Many useful built-in mathematical functions are available. Use
|
|
the 'show builtins' command to list them. You can also define
|
|
your own functions by using the 'define' keyword, followed by a
|
|
function declaration very similar to C. Functions which only
|
|
need to return a simple expression can be defined using an
|
|
equals sign, as in the example 'define sc(a,b) = a^3 + b^3'.
|
|
Variables in functions can be defined as either 'global', 'local',
|
|
or 'static'. Global variables are common to all functions and the
|
|
command line, whereas local variables are unique to each function
|
|
level, and are destroyed when the function returns. Static variables
|
|
are scoped within single input files, or within functions, and are
|
|
never destroyed. Variables are not typed at definition time, but
|
|
dynamically change as they are used. So you must supply the correct
|
|
type of variable to those functions and operators which only work
|
|
for a subset of types.
|
|
|
|
Calc has a help command that will produce information about
|
|
every builtin function, command as well as a number of other
|
|
aspects of calc usage. Try the command:
|
|
|
|
help help
|
|
|
|
for and overview of the help system. The command:
|
|
|
|
help builtin
|
|
|
|
provides information on built-in mathematical functions, whereas:
|
|
|
|
help asinh
|
|
|
|
will provides information a specific function. The following
|
|
help files:
|
|
|
|
help command
|
|
help define
|
|
help operator
|
|
help statement
|
|
help variable
|
|
|
|
provide a good overview of the calc language. If you are familiar
|
|
with C, you should also try:
|
|
|
|
help unexpected
|
|
|
|
It contains information about differences between C and calc
|
|
that may surprize you.
|
|
|
|
To learn about calc standard resource files, try:
|
|
|
|
help resource
|
|
|
|
To learn how to invoke the calc command and about calc -flags, try:
|
|
|
|
help usage
|
|
|
|
To learn about calc shell scripts, try:
|
|
|
|
help script
|
|
|
|
A full and extensive overview of calc may be obtained by:
|
|
|
|
help full
|
|
|
|
The man command is an alias for the help command. Try:
|
|
|
|
man jacobi
|
|
|
|
Only calc help files may be displayed by the help and man commands.
|
|
|
|
By default, arguments to functions are passed by value (even
|
|
matrices). For speed, you can put an ampersand before any
|
|
variable argument in a function call, and that variable will be
|
|
passed by reference instead. However, if the function changes
|
|
its argument, the variable will change. Arguments to built-in
|
|
functions and object manipulation functions are always called
|
|
by reference. If a user-defined function takes more arguments
|
|
than are passed, the undefined arguments have the null value.
|
|
The 'param' function returns function arguments by argument
|
|
number, and also returns the number of arguments passed. Thus
|
|
functions can be written to handle an arbitrary number of
|
|
arguments.
|
|
|
|
The mat statement is used to create a matrix. It takes a
|
|
variable name, followed by the bounds of the matrix in square
|
|
brackets. The lower bounds are zero by default, but colons can
|
|
be used to change them. For example 'mat foo[3, 1:10]' defines
|
|
a two dimensional matrix, with the first index ranging from 0
|
|
to 3, and the second index ranging from 1 to 10. The bounds of
|
|
a matrix can be an expression calculated at runtime.
|
|
|
|
Lists of values are created using the 'list' function, and values can
|
|
be inserted or removed from either the front or the end of the list.
|
|
List elements can be indexed directly using double square brackets.
|
|
|
|
The obj statement is used to create an object. Objects are
|
|
user-defined values for which user-defined routines are
|
|
implicitly called to perform simple actions such as add,
|
|
multiply, compare, and print. Objects types are defined as in
|
|
the example 'obj complex {real, imag}', where 'complex' is the
|
|
name of the object type, and 'real' and 'imag' are element
|
|
names used to define the value of the object (very much like
|
|
structures). Variables of an object type are created as in the
|
|
example 'obj complex x,y', where 'x' and 'y' are variables.
|
|
The elements of an object are referenced using a dot, as in the
|
|
example 'x.real'. All user-defined routines have names composed
|
|
of the object type and the action to perform separated by an
|
|
underscore, as in the example 'complex_add'. The command 'show
|
|
objfuncs' lists all the definable routines. Object routines
|
|
which accept two arguments should be prepared to handle cases
|
|
in which either one of the arguments is not of the expected
|
|
object type.
|
|
|
|
These are the differences between the normal C operators and
|
|
the ones defined by the calculator. The '/' operator divides
|
|
fractions, so that '7 / 2' evaluates to 7/2. The '//' operator
|
|
is an integer divide, so that '7 // 2' evaluates to 3. The '^'
|
|
operator is a integral power function, so that 3^4 evaluates to
|
|
81. Matrices of any dimension can be treated as a zero based
|
|
linear array using double square brackets, as in 'foo[[3]]'.
|
|
Matrices can be indexed by using commas between the indices, as
|
|
in foo[3,4]. Object and list elements can be referenced by
|
|
using double square brackets.
|
|
|
|
The print statement is used to print values of expressions.
|
|
Separating values by a comma puts one space between the output
|
|
values, whereas separating values by a colon concatenates the
|
|
output values. A trailing colon suppresses printing of the end
|
|
of line. An example of printing is 'print \"The square of\",
|
|
x, \"is\", x^2\'.
|
|
|
|
The 'config' function is used to modify certain parameters that
|
|
affect calculations or the display of values. For example, the
|
|
output display mode can be set using 'config(\"mode\", type)',
|
|
where 'type' is one of 'frac', 'int', 'real', 'exp', 'hex',
|
|
'oct', or 'bin'. The default output mode is real. For the
|
|
integer, real, or exponential formats, a leading '~' indicates
|
|
that the number was truncated to the number of decimal places
|
|
specified by the default precision. If the '~' does not
|
|
appear, then the displayed number is the exact value.
|
|
|
|
The number of decimal places printed is set by using
|
|
'config(\"display\", n)'. The default precision for
|
|
real-valued functions can be set by using 'epsilon(x)', where x
|
|
is the required precision (such as 1e-50).
|
|
|
|
There is a command stack feature so that you can easily
|
|
re-execute previous commands and expressions from the terminal.
|
|
You can also edit the current command before it is completed.
|
|
Both of these features use emacs-like commands.
|
|
|
|
Files can be read in by using the 'read filename' command.
|
|
These can contain both functions to be defined, and expressions
|
|
to be calculated. Global variables which are numbers can be
|
|
saved to a file by using the 'write filename' command.
|
|
|
|
## Copyright (C) 1999-2017 Landon Curt Noll
|
|
##
|
|
## Calc is open software; you can redistribute it and/or modify it under
|
|
## the terms of the version 2.1 of the GNU Lesser General Public License
|
|
## as published by the Free Software Foundation.
|
|
##
|
|
## Calc is distributed in the hope that it will be useful, but WITHOUT
|
|
## ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
|
|
## or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
|
|
## Public License for more details.
|
|
##
|
|
## A copy of version 2.1 of the GNU Lesser General Public License is
|
|
## distributed with calc under the filename COPYING-LGPL. You should have
|
|
## received a copy with calc; if not, write to Free Software Foundation, Inc.
|
|
## 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
##
|
|
## Under source code control: 1991/07/21 04:37:23
|
|
## File existed as early as: 1991
|
|
##
|
|
## chongo <was here> /\oo/\ http://www.isthe.com/chongo/
|
|
## Share and enjoy! :-) http://www.isthe.com/chongo/tech/comp/calc/
|