Units are used to automatically convert double to and from the internal representation declared in a class and the definition or output (see tape). All units have two parts, the scalar and the fundamental unit.
Scalars
The following scalars are supported
- Y = 10^24
- Z = 10^21
- E = 10^18
- P = 10^15
- T = 10^12
- G = 10^9
- M = 10^6
- k = 10^3
- h = 10^2
- da = 10^1
- d = 10^-1
- c = 10^-2
- m = 10^-3
- u = 10^-6
- n = 10^-9
- p = 10^-12
- f = 10^-15
- a = 10^-18
- z = 10^-21
- y = 10^-24
Fundamental units
Dimensionless units
- unit = 1
- ratio = 1 unit
- % = 0.01 unit
- pu = 1/unit
- /% = 1/%
SI Units
The basic SI units are defined in terms of the following constants
- c = 2.997925e8
- e = 1.602189246e-19
- h = 6.62617636e-34
- k = 1.38066244e-23
- m = 9.10953447e-31
- s = 1.233270e4
The basic SI units are defined as follows:
- m = c^-1 * h * m^-1 * 4.121487*10
- g = m * 1.09775094*10^27
- s = c^-2 * h * m^-1 * 1.235591*10^10
- A = c^2 * e * h^-1 * m * 5.051397*10^8
- K = c^2 * k^-1 * m * 1.686358
- cd = c^4 * h^-1 * m^2 * 1.447328
- 1990$ = m * s * 1.097751*10^30
Angular measures
- pi = 3.1415926536
- rad = 0.159155 unit
- deg = 0.0027777778 unit
- grad = 0.0025 unit
- quad = 0.25 unit
- sr = 0.5 rad
Derived SI
- R = 0.55555556 K
- degC = K-273.14
- degF = R-459.65
- N = 1 m*kg/s^2
- Pa = N/m^2
- J = N*m
Currency
- 1975$ = 0.42 1990$
- 1980$ = 1.60 1990$
- 1985$ = 0.83 1990$
- 1995$ = 1.00 1990$
- 1996$ = 1.01 1990$
- $ = 1.00 1996$
- CA$ = 0.85 $
Time
- min = 60 s
- h = 60 min
- day = 24 h
- wk = 7 day
- yr = 365 day
- syr = 365.24 day
Length
- in = 0.0254 m
- ft = 12 in
- yd = 3 ft
- mile = 5280 ft
Area
- sf = ft^2
- sy = yd^2
Volume
- cf = ft^3
- cy = yd^3
- gal = 0.0037854118 m^3
- l = 0.001 m^3
Mass
- lb = 0.453592909436 kg
- tonne = 1000 kg
Velocity
- mph = 1 mile/h
- fps = 1 ft/s
- fpm = 1 ft/min
- mps = 1 m/s
Flow rates
- gps = 1 gal/s
- gpm = 1 gal/min
- gph = 1 gal/h
- cfm = 1 ft^3/min
- ach = 1/h
Frequency
- Hz = 1/s
EM units
- W = J/s
- Wh = 1 W*h
- Btu = 0.293 W*h
- ton = 12000 Btu/h ; ton cooling
- tons = 1 ton*s ; ton.second cooling
- tonh = 1 ton*h ; ton.hour cooling
- hp = 746 W ; horsepower
- V = W/A ; Volt
- C = A*s ; Coulomb
- F = C/V ; Farad
- Ohm = V/A ; resistance
- H = Ohm*s ; Henry
- VA = V*A ; Volt-Amp
- VAr = 1 V*A ; Volt-Amp reactive
- VAh = 1 VA*h
- Wb = J/A ; Weber
- lm = cd*sr ; lumen
- lx = lm/m^2 ; lux
- Bq = 1/s ; Becquerel
- Gy = J/kg ; Grey
- Sv = J/kg ; Sievert
- S = 1/Ohm ; Siemens
Data
- b = 1 unit ; 1 bit
- B = 8 b ; 1 byte
Custom
- EER = Btu/Wh
- ccf = 1000 Btu ; this conflict with centi-cubic-feet (ccf)
- therm = 100000 Btu
Bad usage
ohm=Ohm ; should be capitalized but often isn't
Derived units
Any unit may be specified as a composite or derived unit. For example,
object my_class { my_double 12 V*A; }
is equivalent to
object my_class { my_double 12 W; }
Caveats
Unexpected Unit Names
Be careful about unit names. For example "F" and "C" are not degrees Fahrenheit and Celcius, respectively. They are Farads and Colombs, respectively. The correct unit for degrees Fahrenheit and Celcius are "degF" and "degC", respectively.
Operator precedence
The syntax for deriving units does not obey the customary operator precedence for multiplication and division. In particular, only one division sign is recognized, with everything before it being in the numerator and everything after it being in the denominator. After the first division, all remaining operators are interpreted as placing the unit in the denominator. For example
Btu/degF*h
is interpreted the same as
Btu/degF/h
Furthermore, parentheses are not recognized.
Improper Syntax
The only valid unit product syntax is an asterisk. In the past users and programmers sometimes used a period instead of an asterisk when specifying derived units. This usage results in incorrect unit specifications but was not always detected in Hassayampa (Version 3.0) and earlier.
Wish list
Although the '.' syntax is not valid now, it should be acceptable as a multiplication on the appropriate side of the '/'. For example a.b/c.d should be the same as a*b/c/d. This would be very much more user friendly and quite easy to implement.