| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Tools and techniques for dealing with numbers are the subject of this chapter: listing them in sequence or randomly, calculating arithmetic, and converting between units. Larger applications, such as spreadsheets and plotting tools, are also mentioned.
| 29.1 Calculating Arithmetic | Calculating arithmetic. | |
| 29.2 Outputting a Random Number | Output a random number. | |
| 29.3 Listing a Sequence of Numbers | Listing a sequence of numbers. | |
| 29.4 Finding Prime Factors | Getting prime factors. | |
| 29.5 Converting Numbers | Converting between units of scale. | |
| 29.6 Other Math Tools | Other math tools. |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
As you might expect, there are many tools for making arithmetic calculations in Linux. The following recipes describe how to use two of them for two common scenarios; a list of other calculator tools, including a visual calculator, appears at the end of this chapter (see section Other Math Tools).
| 29.1.1 Making a Quick Arithmetic Calculation | Quick math on the input line. | |
| 29.1.2 Making Many Arithmetic Calculations | A command-line calculator. |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
@sf{WWW}: http://dsl.org/comp/tinyutils/
calc. It takes as an argument a
simple mathematical expression, and it outputs the answer.
Use `*' for a multiplication sign and `/' for division; to output the remainder, use `%'. You can use parenthesis to group expressions--but when you do, be sure to quote them (see section Passing Special Characters to Commands).
$ calc 50*10 RET 500 $ |
$ calc '100*(4+420)' RET 42400 $ |
$ calc 10%3 RET 1 $ |
NOTE: This tool is useful for quickly computing a simple
arithmetic equation, but it has several drawbacks: it only outputs whole
integers, its operators are limited, and complex expressions must be
quoted. For doing anything more than the simplest operations, see the
next recipe, which describes bc.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
@sf{Debian}: `bc'
@sf{WWW}: ftp://src.doc.ic.ac.uk:/pub/gnu/bc-1.05a.tar.gz
bc, a calculation language that
supports arbitrary precision numbers. Type bc to perform
arithmetic operations interactively, just like you would with a
calculator.
Type each statement to evaluate on a line by itself, typing RET at
the end the statement; the evaluation of what you type is output on the
following line. Each line you type will be evaluated by bc as an
arithmetic expression. To exit, type quit on a line by itself.
$ bc RET bc 1.05 Copyright 1991, 1992, 1993, 1994, 1997, 1998 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. 42 * 17 RET 714 quit RET $ |
In this example, bc output its version number and warranty
information when it started; then, the statement 42 * 17 was typed
by the user, bc output the result (`714'), and then the
user typed quit to exit bc.
By default, digits to the right of the decimal point are truncated from
the output--so dividing 10 by 3 would output `3' as a result, and
outputting the remainder from this operation by typing 10%3 would
output a `1'. However, bc is an arbitrary precision
calculator, and you can give the number of digits to use after the
decimal point by specifying the value of the scale variable; its
default value is 0.
bc to compute the result of 10 divided by 3, using 20
digits after the decimal point, type:
$ bc RET bc 1.05 Copyright 1991, 1992, 1993, 1994, 1997, 1998 Free Software Foundation, Inc. This is free software with ABSOLUTELY NO WARRANTY. For details type `warranty'. scale=20 RET 10 / 3 RET 3.33333333333333333333 quit RET $ |
The following table describes the symbols you can use to specify mathematical operations.
| SYMBOL | OPERATION |
expression + expression |
Add: output the sum of the two expressions. |
expression - expression |
Subtract: output the difference of the two expressions. |
expression * expression |
Multiply: output the product of the two expressions. |
expression / expression |
Divide: output the quotient of the two expressions. |
expression % expression |
Remainder: output the remainder resulting by dividing the two expressions. |
expression ^ expression |
Power: raise the first expression to the power of the second expression. |
(expressions) |
Group an expression or expressions together, altering the standard precedence of performing operations. |
sqrt(expression) |
Output the square root of expression. |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
@sf{WWW}: http://dsl.org/comp/tinyutils/
random. Give as an argument an
integer denoting the range of numbers to be output; random then
outputs a random number from 0 to the number you give, minus one.
$ random 10 RET |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Use seq to print a sequence of numbers. This is very useful for
getting a listing of numbers to use as arguments, or otherwise passing
sequences of numbers to other commands.
To output the sequence from 1 to any number, give that number as an argument.
$ seq 7 RET |
$ seq -7 RET |
To output the sequence from any one number to another, give those numbers as arguments.
$ seq 9 0 RET |
$ seq -1 -20 RET |
To specify an increment other than one, give it as the second argument, between the starting and ending number.
$ seq -1 3 14 RET |
Use the `-w' option to pad numbers with leading zeros so that they're all output with the same width.
Specify a separator string to be output between numbers as an argument to the `-s' option; the default is a newline character, which outputs each number in the sequence on its own line.
$ seq -w 9 23 999 RET |
$ seq -s ' ' 1 23 RET |
To pass a sequence of numbers as arguments to a command, pipe the output
of seq using a space character as a separator.
$ cat `seq -s " " 25 75` > selected-mail RET |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The factor tool calculates and outputs the prime factors of
numbers passed as arguments.
$ factor 2000 RET 2000: 2 2 2 2 5 5 5 $ |
NOTE: If no number is given, factor reads numbers from
standard input; numbers should be separated by space, tab, or newline
characters.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The following recipes are for converting numbers in various ways.
| 29.5.1 Converting an Amount between Units of Measurement | Converting units of measurement. | |
| 29.5.2 Converting an Arabic Numeral to English | Converting Arabic numerals to text. |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
@sf{Debian}: `units'
@sf{WWW}: http://www.gnu.org/software/units/units.html
units tool to convert units of measurement between
scales. Give two quoted arguments: the number and name of the units you
have, and the name of the units to convert to. It outputs two values:
the number of the second units you have, and how many of the second kind
of unit can make up the quantity of the first that you've specified.
$ units '50 grams' 'ounces' RET
* 1.7636981
/ 0.56699046
$
|
In this example, the output indicates that there are about 1.7636981 ounces in 50 grams, and that conversely, one ounce is about 0.56699046 times 50 grams.
The units tool understands a great many different kinds of
units--from Celsius and Fahrenheit to pounds, hectares, the speed of
light, and a "baker's dozen." All understood units are kept in a text
file database; use the `-V' option to output the location of this
database on your system, which you can then peruse or search through to
see the units your version supports.
units database, type:
$ units -V RET units version 1.55 with readline, units database in /usr/share/misc/units.dat $ |
In this example, the units database is located in the file
`/usr/share/misc/units.dat', which is the file to peruse to list
all of the units data.
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
@sf{Debian}: `bsdgames'
number to convert Arabic numerals to English text. Give a
numeral as an argument; with no argument, number reads a numeral
from the standard input.
$ number 100000 RET |
| [ < ] | [ > ] | [ << ] | [ Up ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
The following table lists some of the other mathematics tools available for Linux. It is by no means a complete list.
| TOOL | DESCRIPTION |
calc |
calc is a scientific calculator tool for Emacs.
{@sf{Debian}}: `calc'
|
dc |
Like bc, the dc tool is an arbitrary-precision
calculator language, but it is a reverse-polish calculator, where
numbers are pushed on a stack. When you give an arithmetic operation
symbol, dc pops numbers off the stack for their operands, and
then it pushes the evaluation on the stack.
{@sf{Debian}}: `dc'
|
dome |
Richard J. Bono's dome is a geodesic math tool for
calculating the properties of a geodesic dome symmetry triangle--it can
calculate chord factors, vertex coordinates, and topological abundance
of various dome types, including "Buckyball" formations and elliptical
geodesics.
{@sf{Debian}}: `dome'
{@sf{WWW}}: http://www.cris.com/~rjbono/html/domes.html
|
gnucash |
GnuCash is an intuitive personal finance application. Use it for managing finances, including bank accounts, stocks, income, and expenses; it's "based on professional accounting principles" to ensure accuracy in computation and reporting. {@sf{Debian}}: `gnucash' {@sf{WWW}}: http://www.gnucash.org/ |
gnumeric |
Gnumeric is the GNOME spreadsheet application. It is powerful, and somewhat reminiscent of Excel. {@sf{Debian}}: `gnumeric' {@sf{WWW}}: http://www.gnu.org/software/gnumeric/gnumeric.html |
gnuplot |
The gnuplot tool can be used for data visualization, making
2-D and 3-D graphs, and plotting functions.
{@sf{Debian}}: `gnuplot'
{@sf{WWW}}: ftp://ftp.gnu.org/pub/gnu/gnuplot/
|
oleo |
GNU Oleo is a spreadsheet application. It can run in both X and in the console, has Emacs-like key bindings, and can generate PostScript output. {@sf{Debian}}: `oleo' {@sf{WWW}}: http://www.gnu.org/software/oleo/oleo.html |
sc |
sc is a small spreadsheet tool that runs in the console; it
provides formulas and other basic features you would expect from a
minimal spreadsheet.
|
xcalc |
xcalc is a visual scientific calculator for the X Window
System--it draws a calculator on the screen, and you can use the mouse
or keyboard to use it. It is capable of emulating the TI-30 and HP-10C
calculators.
|
xspread |
xspread is the X client front-end to sc.
{@sf{Debian}}: `xspread'
|
| [ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |