You can enter more complicated units by combining units with operations
such as multiplication, division, powers, addition, subtraction, and
parentheses for grouping. You can use the customary symbols for these
units is invoked with its default options.
units supports some extensions, including high
priority multiplication using a space, and a high priority numerical
division operator (‘|’) that can simplify some expressions.
You multiply units using a space or an asterisk (‘*’). The next example shows both forms:
You have: arabicfoot * arabictradepound * force You want: ft lbf * 0.7296 / 1.370614
You can divide units using the slash (‘/’) or with ‘per’:
You have: furlongs per fortnight You want: m/s * 0.00016630986 / 6012.8727
You can use parentheses for grouping:
You have: (1/2) kg / (kg/meter) You want: league * 0.00010356166 / 9656.0833
Multiplication using a space has a higher precedence than division using a slash and is evaluated left to right; in effect, the first ‘/’ character marks the beginning of the denominator of a unit expression. This makes it simple to enter a quotient with several terms in the denominator: ‘J / mol K’. The ‘*’ and ‘/’ operators have the same precedence, and are evaluated left to right; if you multiply with ‘*’, you must group the terms in the denominator with parentheses: ‘J / (mol * K)’.
The higher precedence of the space operator may not always be advantageous. For example, ‘m/s s/day’ is equivalent to ‘m / s s day’ and has dimensions of length per time cubed. Similarly, ‘1/2 meter’ refers to a unit of reciprocal length equivalent to 0.5/meter, perhaps not what you would intend if you entered that expression. The get a half meter you would need to use parentheses: ‘(1/2) meter’. The ‘*’ operator is convenient for multiplying a sequence of quotients. For example, ‘m/s * s/day’ is equivalent to ‘m/day’. Similarly, you could write ‘1/2 * meter’ to get half a meter.
units program supports another option for numerical fractions:
you can indicate division of numbers with the vertical bar
(‘|’), so if you wanted half a meter you could write
You cannot use the vertical bar to indicate division of non-numerical
units (e.g., ‘m|s’ results in an error message).
Powers of units can be specified using the ‘^’ character, as shown in the following example, or by simple concatenation of a unit and its exponent: ‘cm3’ is equivalent to ‘cm^3’; if the exponent is more than one digit, the ‘^’ is required. You can also use ‘**’ as an exponent operator.
You have: cm^3 You want: gallons * 0.00026417205 / 3785.4118
Concatenation only works with a single unit name: if you write ‘(m/s)2’,
units will treat it as multiplication by 2.
When a unit includes a prefix, exponent operators apply to the
combination, so ‘centimeter3’ gives cubic centimeters. If you
separate the prefix from the unit with any multiplication operator (e.g.,
‘centi meter^3’), the prefix is treated as a separate unit, so
the exponent applies only to the unit without the prefix. The second
example is equivalent to ‘centi * (meter^3)’, and gives a hundredth
of a cubic meter, not a cubic centimeter. The
is limited internally to products of 99 units; accordingly, expressions
like ‘meter^100’ or ‘joule^34’ (represented internally as
‘kg^34 m^68 / s^68’) will fail.
The ‘|’ operator has the highest precedence, so you can write the square root of two thirds as ‘2|3^1|2’. The ‘^’ operator has the second highest precedence, and is evaluated right to left, as usual:
You have: 5 * 2^3^2 You want: Definition: 2560
With a dimensionless base unit, any dimensionless exponent is meaningful (e.g., ‘pi^exp(2.371)’). Even though angle is sometimes treated as dimensionless, exponents cannot have dimensions of angle:
You have: 2^radian ^ Exponent not dimensionless
If the base unit is not dimensionless, the
exponent must be a rational number p/q, and the
dimension of the unit must be a power of q, so ‘gallon^2|3’
works but ‘acre^2|3’ fails. An exponent using the slash (‘/’)
operator (e.g., ‘gallon^(2/3)’) is also acceptable; the parentheses
are needed because the precedence of ‘^’ is higher than that of
units cannot represent dimensions with
exponents greater than 99, a fully reduced exponent must have
q < 100. When raising a non-dimensionless unit to a power,
units attempts to convert a decimal exponent to a rational
number with q < 100. If this is not possible
units displays an error message:
You have: ft^1.234 Base unit not dimensionless; rational exponent required
A decimal exponent must match its rational representation to machine precision, so ‘acre^1.5’ works but ‘gallon^0.666’ does not.