GNU Units

From Wikipedia, the free encyclopedia
(Redirected from Units (Unix))
Jump to navigation Jump to search
Units
DeveloperGNU Project
Repositoryweb.cvs.savannah.gnu.org/viewvc/units/
Written inC
Engine
    Lua error in Module:EditAtWikidata at line 29: attempt to index field 'wikibase' (a nil value).
    Operating systemLinux, FreeBSD, NetBSD, OpenBSD, most Unix implementations, Windows
    PlatformIncluded with some[which?] Linux distributions. Two Windows binary distributions are available; distribution for other platforms is source only.
    Size1.2 Megabytes (tar source)
    TypeUtility
    License2007: GPL-3.0-or-later[a]
    1997: GPL-2.0-or-later[b]

    Lua error in mw.title.lua at line 392: bad argument #2 to 'title.new' (unrecognized namespace name 'Portal'). GNU Units is a cross-platform computer program for conversion of units of quantities. It has a database of measurement units, including esoteric and historical units. This for instance allows conversion of velocities specified in furlongs per fortnight, and pressures specified in tons per acre. Output units are checked for consistency with the input, allowing verification of conversion of complex expressions.

    History

    [edit | edit source]

    GNU Units was written by Adrian Mariano as an implementation of the units utility included with the Unix operating system. It was originally available under a permissive license. The GNU variant is distributed under the GPL although the FreeBSD project maintains a free fork of units from before the license change.

    units (Unix utility)

    [edit | edit source]

    The original units program has been a standard part of Unix since the early Bell Laboratories versions.[1] Source code for a version very similar to the original is available from the Heirloom Project.[2]

    GNU implementation

    [edit | edit source]

    GNU units includes several extensions to the original version,[3] including

    • Exponents can be written with ^ or **.
    • Exponents can be larger than 9 if written with ^ or **.
    • Rational and decimal exponents are supported.
    • Sums of units (e.g., btu + ft lbf) can be converted.
    • Conversions can be made to sums of units, termed unit lists (e.g., from degrees to degrees, minutes, and seconds).
    • Units that measure reciprocal dimensions can be converted (e.g., S to megohm).
    • Parentheses for grouping are supported. This sometimes allows more natural expressions, such as in the example given in Complex units expressions.
    • Roots of units (e.g., sqrt((lbf/inch) / lb) can be computed.
    • Affine units conversions (e.g., °F to °C) are supported.
    • Functions such as sin, cos, ln, log, and log2 are included.
    • A script for updating the currency conversions is included; the script requires Python.

    Units definitions, including nonlinear conversions and unit lists, are user extensible.

    The plain text database definitions.units is a good reference in itself, as it is extensively commented and cites numerous sources.

    Other implementations

    [edit | edit source]

    UDUNITS is a similar utility program, except that it has an additional programming library interface and date conversion abilities. UDUNITS is considered the de facto program and library for variable unit conversion for netCDF files.[4]

    Version history

    [edit | edit source]

    GNU Units version 2.19 was released on 31 May 2019, to reflect the 2019 revision of the SI; Version 2.14 released on 8 March 2017 fixed several minor bugs and improved support for building on Windows. Version 2.10, released on 26 March 2014, added support for rational exponents greater than one, and added the ability to save an interactive session in a file to provide a record of the conversions performed. Beginning with version 2.10, a 32-bit Windows binary distribution has been available on the project Web page (a 32-bit Windows port of version 1.87 has been available since 2008 as part of the GnuWin32 project).

    Version 2.02, released on 11 July 2013, added hexadecimal floating-point output and two other options to simplify changing the output format.

    Version 2.0, released on 2 July 2012, added the ability to convert to sums of units, such as hours and minutes or feet and inches. In addition, this release added support for UTF-8 encoding.[5] Provision for locale-specific unit definitions was added. The syntax for defining non-linear units was changed, and added optional domain and range specifications. The names of the standard and personal units data files were changed, and the currency definitions were placed in a separate data file; a Python script for updating the currency definitions was added.

    The version history is covered in detail in the NEWS file included with the source distribution.

    Usage

    [edit | edit source]

    Units will output the result of the conversion in two lines. Usually, the first line (multiplication) is the desired result; the second line is the same conversion expressed as a division.

    Units can also function as a general-purpose scientific calculator; it includes several built-in mathematical functions such as sin, cos, atan, ln, exp, etc.

    Attempting to convert types of measurements that are incompatible will cause units to print a conformability error message and display a reduced form of each measurement.

    Examples

    [edit | edit source]

    The examples that follow show results from GNU units version 2.10.

    Interactive mode

    [edit | edit source]
    Currency exchange rates from www.timegenie.com on 2014-03-28
    2729 units, 92 prefixes, 77 nonlinear units
    
    You have: 10 furlongs
    You want: miles
            * 1.25
            / 0.8
    You have: 1 gallon + 3 pints
    You want: quarts
            * 5.5
            / 0.18181818
    You have: sqrt(meter)
                        ^
    Unit not a root
    You have: sqrt(acre)
    You want: ft
            * 208.71033
            / 0.0047913298
    You have: 21 btu + 6500 ft lbf
    You want: btu
            * 29.352939
            / 0.034068139
    You have: _
    You want: J
            * 30968.99
            / 3.2290366e-005
    You have: 3.277 hr
    You want: time
            3 hr + 16 min + 37.2 sec
    You have: 1|2 inch
    You want: cm
            * 1.27
            / 0.78740157
    

    The underscore ('_') is used to indicate the result of the last successful unit conversion.

    On the command line (non-interactive)

    [edit | edit source]
    C:\>units "ten furlongs per fortnight" "kilometers per hour"
            * 0.0059871429
            / 167.02458
    
    % units cup ounces
    conformability error
            0.00023658824 m^3
            0.028349523 kg
    

    Complex units expressions

    [edit | edit source]

    One form of the Darcy–Weisbach equation for fluid flow is

    ΔP=8π2ρfLQ2d5,

    where ΔP is the pressure drop, ρ is the mass density, f is the (dimensionless) friction factor, L is the length of the pipe, Q is the volumetric flow rate, and d is the pipe diameter. It might be desirable to have the equation in the form

    ΔP=A1ρfLQ2d5

    that would accept typical US units; the constant A1 could be determined manually using the unit-factor method, but it could be determined more quickly and easily using units:[6]

    $ units "(8/pi^2)(lbm/ft^3)ft(ft^3/s)^2(1/in^5)" psi
            * 43.533969
            / 0.022970568
    

    Crane Technical Paper No. 410,[7] Eq. 3-5, gives the multiplicative value as 43.5.

    See also

    [edit | edit source]

    Notes

    [edit | edit source]
    1. ^ GPL-3.0-or-later since 2007-09-26 (1.87)
    2. ^ GPL-2.0-or-later from 1997-01-14 (1.53) until 2006-11-11 (1.86)

    References

    [edit | edit source]
    1. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value). Online archive of the manual pages included with the Seventh Edition Unix distribution tapes.
    2. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    3. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    4. ^ As specified from several NetCDF conventions, e.g.:
      • COARDSLua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
      • CFLua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    5. ^ (German language) « GNU Units 2.0 berechnet Feet und Inches », linux-magazin.de, 3 July 2012.
    6. ^ GNU units version 2.10, Windows XP SP3, PTC MKS Korn shell
    7. ^ Lua error in Module:Citation/CS1/Configuration at line 2172: attempt to index field '?' (a nil value).
    [edit | edit source]