[ Addition and Subtraction ]
[ Multiplication and Division ]
[ Exponentials ]

Physical quantities may be manipulated with basic multiply, division and power operations.

Let `Variable1` and `Variable2` be physical quantities of the form

Variable1 = Number1 [Length]^a . [Mass]^b . [Time]^c . [Temp]^d Variable2 = Number2 [Length]^e . [Mass]^f . [Time]^g . [Temp]^h

where `a-g` are exponent constants.
The quentity sum/difference arithmetic operation

Quantity Sum ==> Variable1 + Variable2 Quantity Difference ==> Variable1 - Variable2

will be defined only if `a = e`, `b = f`,
`c = g`, and `d = h`.

ALADDIN computes, by default, a physical quantity result with units matching the second physical quantity in the arithmetic operation.

** Example 1 : ** The script of code:

x = 1.0 m; y = 100 cm; print "x + y = ", x + y, "\n"; print "y + x = ", y + x, "\n";

generates the output:

x + y = 200 cm y + x = 2 m

** Example 2 : ** An important feature of quantity operations is the
check for consistent units. Suppose that we try to add a quantity with
time units to a second quantity having units of length, as in the script:

x = 1 in; y = 1 sec; z = x + y;

ALADDIN provides an appropriate fatal error message

FATAL ERROR >> In Add() : Inconsistent Dimensions. FATAL ERROR >> Compilation Aborted.

followed by the termination of program execution.

Let `Variable1` and `Variable2` be physical quantities of the form

Variable1 = Number1 [Length]^a . [Mass]^b . [Time]^c . [Temp]^d Variable2 = Number2 [Length]^e . [Mass]^f . [Time]^g . [Temp]^h

where `a-g` are exponent constants.
The quentity product and quentity division
arithmetic operations are given by

Quantity Product ==> Variable1 * Variable2 Quantity Division ==> Variable1 / Variable2

The units in `Variable1 * Variable2` will be

[Length]^(a+e) . [Mass]^(b+f) . [Time]^(c+g) . [Temp]^(d+h)

and the in `Variable1 / Variable2`

[Length]^(a-e) . [Mass]^(b-f) . [Time]^(c-g) . [Temp]^(d-h)

** Example 3 : ** Suppose that the velocity and distance
traveled by a free-falling object is given by

velocity = gravity * time distance = 1/2 . gravity * time * time

where ``gravity'' is the acceleration due to gravity, and ``time'' is the time of free-fall.

The script of code

gravity = 9.81 m/sec^2; t = 3 sec; print "acceleration = ", gravity , "\n"; print "velocity = ", gravity*t , "\n"; print "distance = ", 1/2*gravity*t*t, "\n";

generates the output:

acceleration = 9.81 m/sec^2 velocity = 29.43 m/sec distance = 44.14 m

** Example 4 : ** The script of code

force = 20 N; mass = 5 kg; area = 20 cm^2; print "force = ", force , "\n"; print "mass = ", mass , "\n"; print "area = ", area (cm^2) , "\n"; print "force/mass = ", force/mass , "\n"; print "force/area = ", force/area , "\n";

generates the output:

force = 20 N mass = 5 kg area = 20 cm^2 force/mass = 4 m/sec^2 force/area = 1e+04 Pa

Power operations on quantities do not work in quite the
same way as the basic add, subtract, multiply and divide operations on quantities.
If ` quantity1 ` and ` quantity2 ` are physical quantities,
then the operation

quantity1 ^ quantity2;

is defined for dimensionless ` quantity1 ` and ` quantity2 `,
and cases where one of the two operands, but not both operands, has units.

** Order of Evaluation **

Unlike the basic arithmetic operations, which are evaluated left-to-right, expressions involving power operations are evaluated from right-to-left. Power operations also have higher precedence than the add/subtract operators, and the muldiply/divide operators.

** Example 5 : ** The statement

print "2^2^3 = ", 2^2^3 , "\n";generates the output

2^2^3 = 256Becasue expressions involving power operations are evaluated from right-to-left, the expression

2^2^3is evaluated as if it were written

2^(2^3)The expression evaluates to

** Example 6 : ** The following statements show how power operations
apply to quantities having units -- the script:

print "(2 m)^2 = ", (2 m)^2 , "\n"; print "2^2 m = ", 2^2 m , "\n"; print "10^2^2 N/m = ", 10^2^2 N/m , "\n";generates the output

(2 m)^2 = 4 m^2 2^2 m = 4 m 10^2^2 N/m = 1e+04 N/m

You should should carefully note how parentheses are used to bind a unit to a constant, and how the right-to-left evaluation of numerical quantities takes precedence over the unit itself.

** Example 7 : ** Now let's look at a family of expressions where power
operations are mixed in with multiply and divide operations.
The block of code

print "0.25*2^2 m = ", 0.25*2^2 m, "\n"; print "1/2*2 m = ", 1/2*2 m, "\n"; print "(1/2*2 m) = ", (1/2*2 m), "\n"; print "(1/2^2 m) = ", (1/2^2 m), "\n"; print "(1/2^2)*(1 m) = ", (1/2^2)*(1 m), "\n"; print "1/2^2*(1 m) = ", 1/2^2 *(1 m), "\n";generates the output

0.25*2^2 m = 1 m 1/2*2 m = 1 m (1/2*2 m) = 1 m (1/2^2 m) = 0.25 1/m (1/2^2)*(1 m) = 0.25 m 1/2^2*(1 m) = 0.25 m

Notice how parentheses can be used to adjust the precedence of evaluation, and how the multiply and divide operations are evaluated left-to-right.

** Example 8 : ** In this example, we demonstrate the
exponential operator on quantity variables:

x = 100 kg; z = 10 m;The block of input

print "z^-3 = ", z^-3, "\n"; print "(x*z)^2 = ", (x*z)^2, "\n";generates the output

z^-3 = 0.001 1/m^3 (x*z)^2 = 1e+06 m^2.kg^2

** Example 9 : ** Power operations such as

x = (1 m)^(2 sec);

are illegal, and will cause ALADDIN to terminate its execution.