The following are the changes in this release: Fix typo in the `make debug` Makefile rule. Improved .gitignore to ignore .static, calc-static, sample_many-static and sample_rand-static. Improved error messages when trying to compile with with one calc type (when BLD_TYPE=calc-dynamic-only or BLD_TYPE=calc-static-only) and install with the other. When installing with BLD_TYPE=calc-static-only, the installed calc and calc-static are links to each other. Thanks to GitHub user @TurtleWilly for this suggestion. The dynamic shared libraries are not installed if they are not built. So when installing with BLD_TYPE=calc-static-only, the install rule will not attempt to install dynamic shared libraries. Thanks to GitHub user @TurtleWilly for bringing to our attention, problems related to building a statically linked calc under macOS. Updated comments in Makefile.local for how to Diagnosing memory, thread, and crash issues under RHEL and macOS. We no longer support the Makefile variable ${ALLOW_CUSTOM} to be empty. Normally ${ALLOW_CUSTOM} is: ALLOW_CUSTOM= -DCUSTOM Now, to disable custom disable custom even if -C is given, use: ALLOW_CUSTOM="-UCUSTOM" Dropped support of Makefile.simple and custom/Makefile.simple. The calc version 2.14.3.0 is the last release that supported the Makefile.simple and custom/Makefile.simple files. Now, a make that supports makefile conditional syntax is required. The simple target, a target that only was used for Makefile.simple was removed. Moved makefile variables that configure calc and configure how to compile calc from Makefile into a new Makefile.config file. The Makeifle includes the Makefile.config file. The cal/Makeifle includes the Makefile.config file. The cscript/Makeifle includes the Makefile.config file. The custom/Makeifle includes the Makefile.config file. The help/Makeifle includes the Makefile.config file. Now, the Makefile.config file will consistently configure calc and how calc is compiled and built by all calc Makefiles. The custom/Makefile no longer includes Makefile. The platform target section from the old Makefile has been moved to a new file, Makefile.target. Improved the format and comments in target information. The Makeifle includes the Makefile.target file. The cal/Makeifle includes the Makefile.target file. The cscript/Makeifle includes the Makefile.target file. The custom/Makeifle includes the Makefile.target file. The help/Makeifle includes the Makefile.target file. Now, the Makefile.target file will consistently set target information for all calc Makefiles. The cal/Makeifle includes the Makefile.local file. The cscript/Makeifle includes the Makefile.local file. The custom/Makeifle includes the Makefile.local file. The help/Makeifle includes the Makefile.local file. Thus, one may modify or append many Makefile variables in all calc Makefiles. Removed the ${CAL_PASSDOWN}, ${HELP_PASSDOWN}, ${HELP_PASSDOWN}, ${CSCRIPT_PASSDOWN} Makefile variables as the new Makefile include files keep Makefile variables in sync. Fixed the ability of calc to compile when CUSTOM is undefined (i.e., -UCUSTOM). The libcustcalc is always built, regardless of the $(ALLOW_CUSTOM} Makefile variable. However when CUSTOM is undefined, the bulk of custom functions are not defined. Dropped the use of Makefile variable ${SET_INSTALL_NAME}. Under macOS it was always needed, elsewhere it was not. Added Makefile variable ${VER} to hold the calc major release version. The calc major release version is a 3 level version (x.y.z). Under macOS, the current version of both libcalc and libcustcalc shared libraries are set to the current calc major release version. Under macOS, to reduce dependency chains, we remove functions and data that are unreachable by the entry point or exported symbols. In particular, the macOS linker is used with "-dead_strip" by default. While calc on macOS will execute if linker used with "-dead_strip_dylibs" and CUSTOM is defined, other applications that use libcalc but not libcustcalc (such as sample_many and sample_rand) will fail to execute due to missile symbols. Therefore "-dead_strip_dylibs" is not used by default when ALLOW_CUSTOM is "-DCUSTOM" under macOS. Thanks to GitHub user @TurtleWilly for bringing to our attention, problems related to use of "-dead_strip_dylibs". When installing shared libraries, libcalc.x.y.z will be a link to the libcalc shared library and libcustcalc.x.y.z will be a link to the libcustcal shared library.
TL;DR Try calc
TL;DR Install calc
misc linux: sudo yum install calc
on Debian: sudo apt install calc
on RHEL: sudo dnf install calc
on Ubuntu: sudo apt install calc
via Termux: apt install calc
via src: sudo make clobber all chk instsll
TL;DR Run calc
misc shell: calc
via bash: calc
via misc app: launch calc via Termux
via zsh: calc
What is calc?
Calc is an interactive calculator which provides for easy large numeric calculations, but which also can be easily programmed for difficult or long calculations. It can accept a command line argument, in which case it executes that single command and exits. Otherwise, it enters interactive mode. In this mode, it accepts commands one at a time, processes them, and displays the answers. In the simplest case, commands are simply expressions which are evaluated. For example, the following line can be input:
3 * (4 + 1)
and the calculator will print:
15
Calc has the usual collection of arithmetic operators +, -, /, * as well as ^ (exponentiation), % (modulus) and // (integer divide). For example:
3 * 19^43 - 1
will produce:
29075426613099201338473141505176993450849249622191102976
Notice that calc values can be very large. For example:
2^23209-1
will print:
402874115778988778181873329071 ... many digits ... 3779264511
The special '.' symbol (called dot), represents the result of the last command expression, if any. This is of great use when a series of partial results are calculated, or when the output mode is changed and the last result needs to be redisplayed. For example, the above result can be modified by typing:
. % (2^127-1)
and the calculator will print:
47385033654019111249345128555354223304
For more complex calculations, variables can be used to save the intermediate results. For example, the result of adding 7 to the previous result can be saved by typing:
curds = 15
whey = 7 + 2*curds
Functions can be used in expressions. There are a great number of pre-defined functions. For example, the following will calculate the factorial of the value of 'whey':
fact(whey)
and the calculator prints:
13763753091226345046315979581580902400000000
The calculator also knows about complex numbers, so that typing:
(2+3i) * (4-3i)
cos(.)
will print:
17+6i
-55.50474777265624667147+193.9265235748927986537i
The calculator can calculate transcendental functions, and accept and display numbers in real or exponential format. For example, typing:
config("display", 70),
epsilon(1e-70),
sin(1)
prints:
0.8414709848078965066525023216302989996225630607983710656727517099919104
Calc can output values in terms of fractions, octal or hexadecimal. For example:
config("mode", "fraction"),
(17/19)^23
print
base(16),
(19/17)^29
print
log(79.3i)
will print:
19967568900859523802559065713/257829627945307727248226067259
0x9201e65bdbb801eaf403f657efcf863/0x5cd2e2a01291ffd73bee6aa7dcf7d1
0x17b5164ac24ee836bf/0xc7b7a8e3ef5fcf752+0x883eaf5adadd26be3/0xc7b7a8e3ef5fcf752i
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:
help builtin
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.
define f2(n)
{
local ans;
ans = 1;
while (n > 1)
ans *= (n -= 2);
return ans;
}
Thus the input:
f2(79)
will produce:
1009847364737869270905302433221592504062302663202724609375
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
Thus the input:
sc(31, 61)
will produce:
256772
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.
For more information about the calc language and features, try:
help overview
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 surprise C programmers.