GNU Units
gnu.org
gnu.org
how long will my laptop take to charge at its current rate of charging?
You have: (22.8 Wh - 16.8 Wh)/7.4W
You want: time
48 min + 38.918919 sec
how long will a 2000mAh 18650 cell take to discharge at 2.5 watts, using a nominal voltage of 3.7 volts? You have: 3.7 V 2 amp hour / 2.5 watt
You want: time
2 hr + 57 min + 36 sec
what energy density is that, so i can compare it to the volume needed for other forms of energy storage? You have: 3.7 V 2 amp hour / circlearea(half 18 mm) 65 mm
You want: MJ/ℓ
* 1.6105936
/ 0.62088909
what's the specific energy of stoichiometrically mixed oxyhydrogen fuel? You have: 44000 J/mol / ((2 hydrogen + oxygen)g/mol)
You want: MJ/kg
* 2.4423711
/ 0.40943818
okay but how much volume? say at atmospheric pressure? You have: 3 mol gasconstant tempC(20) / 1 atm
You want: l
* 72.165351
/ 0.013857066
so that's how much energy density? You have: 44kJ/_
You want: J/l
* 609.71089
/ 0.0016401216
(i may be off by a factor of 2 here)how much energy can this capacitor hold?
You have: half (10V)**2 47 uF
You want: mJ
* 2.35
/ 0.42553191
how much energy density is that? You have: half (10V)**2 47 μF / 15mm circlearea(3mm)
You want: J/ℓ
* 5.5409499
/ 0.18047447
how thick of a cable do i need to support me in a lightweight fabric-sling chair (or, from a different point of view, to pose a risk of accidental strangulation)? suppose its tensile strength is 2.7 gigapascals You have: 120kg gravity / 2.7 GPa
You want: mm2
* 0.43585111
/ 2.2943615
You have: _
You want: circlearea
0.00037247244 m
You have: _
You want: mm
* 0.37247244
/ 2.6847624
note that this is the radius of the cable, not its diameter!the datasheet says this 400×240 display uses 175 μW if all the pixels flip once per second and 60 μW for a static display. how much energy is that per pixel flip?
You have: (175 uW - 50 uW) / 400 240 1 Hz
You want: nJ
* 1.3020833
/ 0.768
if i overclock it to 60 fps how much power will it use? You have: 60 Hz 400 240 1.3nJ
You want: μW
* 7488
/ 0.00013354701
and how many pixels is its diagonal? You have: 400**2+240**2
You want:
Definition: 217600
You have: _**.5
You want:
Definition: 466.47615
what is the visual angle subtended by the sun as seen from earth? You have: 2 sunradius/sundist
You want: milliradians
* 9.3049358
/ 0.10746984
You have: _
You want: dms
31 arcmin + 59.280781 arcsec
okay, how does that compare to the moon? You have: moonradius 2 / moondist
You want:
Definition: 0.0090426639
on average the moon looks a little smaller, which is why annular eclipses are so common, but we can also calculate that total eclipses are possible because sometimes the moon looks bigger You have: moonradius 2 / moondist_min
You want:
Definition: 0.0097530864
what percentage of this copper sulfate is actual copper? You have: copper / (copper + (sulfur + 4 oxygen))
You want: %
* 39.813395
/ 0.025117175
how fast can i write to this slc flash chip without wearing it out in 53 years, assuming perfect wear leveling and no write amplification? You have: 100 thousand 128 MiB/53 years
You want: bytes/second
* 8024.8943
/ 0.00012461223
how much fuel will this truck need to get across the country? You have: 4000 km / (6.5 miles/gallon)
You want: l
* 1447.4744
/ 0.00069085852
how much is that per kilogram of lettuce or sodium lauryl sulfate or whatever? You have: _/28 tonnes
You want: ml/kg
* 51.695513
/ 0.019344039
okay, but how much energy is 52 mℓ of diesel per kg of lettuce? You have: _ 38.6 kJ/l
You want: kJ/kg
* 1.9954468
/ 0.5011409
how much data can i transfer overnight during unmetered hours on a 2400-baud modem? You have: 8 hours 2400 bps
You want: MB
* 8.64
/ 0.11574074
how much power does the earth receive from the sun, assuming a solar constant of 1400 W/m²? You have: 1400 W/m**2 * circlearea(earthradius)
You want: petawatts
* 178.52313
/ 0.0056015152
what would the equilibrium temperature of an object be if it were illuminated at that brightness and had a flat emission spectrum? You have: (1400 W/m**2 / stefanboltzmann)**(1/4)
You want: tempC
123.24583
how about here in buenos aires at the winter solstice? first, what angle is the sun at anyway? we're at 34°36’ south, and the sun's latitude at the solstice is 23°26’ You have: 34° + 36' + 23° + 26'
You want: dms
58 deg + 2 arcmin
so that reduces the peak insolation to how much? here underneath the atmosphere we only get 1kW/m² You have: cos(_) 1000 W/m^2
You want: W/m^2
* 529.4258
/ 0.0018888388
and that would be what temperature in equilibrium? You have: (_/stefanboltzmann)**(1/4)
You want: tempC
37.698189
(integrating the sun's angle over the course of the day as the earth rotates is sadly beyond its capacities)how much money could a sensible heat storage reservoir of 15 kg of water save me over 16 years? say power rates go down to only 2.5¢/kWh because of solar
You have: 1500 kcal/day * 16 years * 2.5 cents/kWh
You want:
Definition: 254.69556 US$
what's the surface area of a 300mm × 400mm × 150mm backpack? like how much cloth? You have: 2 (300mm 400mm + 400mm 150mm + 150mm 300mm)
You want:
Definition: 0.45 m^2
okay but in cm² You have: _
You want: cm2
* 4500
/ 0.00022222222
what's the electrical impedance of a 1000 μF cap at an audio highpass frequency of 20Hz? You have: 1/(2 pi 20 Hz 1000 uF)
You want: ohms
* 7.9577472
/ 0.12566371
what's the time constant of 100 pF (roughly the smallest capacitance you can get in a macroscopic circuit with any degree of precision) and 1 MΩ? You have: 100 pF 1 megohm
You want: ms
* 0.1
/ 10
okay. so how long will an 0.1μF cap take to discharge through a 100kΩ resistor from 5 volts down to a 1.3 volt threshold? You have: ln(5V/1.3V) .1 uF 100kilohm
You want: ms
* 13.470736
/ 0.074234991
how many bits of precision does a linear adc need to be able to measure a difference of 1.8 millivolts if 1.5 volts is full-scale? You have: log(1.8mV/1.5V)/log(2)
You want:
Definition: -9.7027499
if this oxygen absorber contains 7 grams of iron which oxidizes to Fe₂O₃, how much air can it remove all the oxygen from? air is 21% oxygen by volume (and roughly by mass) and weighs 1.2 grams per liter You have: 3 oxygen / 2 iron * 7 g
You want: g
* 3.0082138
/ 0.33242318
You have: _/21%/(1.2g/ℓ)
You want: ℓ
* 11.937356
/ 0.083770641
i've lost 7 kg over the last two months; how much of a caloric deficit does that represent in my diet? You have: 7 kg 3500kcal/pound / 2 months
You want: kcal/day
* 887.30034
/ 0.0011270141
if you were to spread the moon evenly over russia, how deep would it be? You have: spherevol(moonradius) / area_russia
You want:
Definition: 1286134.4 m
how big is nigeria compared to massachusetts? You have: area_nigeria/area_massachusetts
You want:
Definition: 33.793093
how many ounces of platinum is a ton of oil worth at 40 dollars per megawatt hour? You have: tonoil 40 dollars/MWh
You want: platinumounce
* 0.58368883
/ 1.7132416
or in grams? You have: tonoil 40 dollars/MWh / platinumprice
You want: g
* 18.154752
/ 0.055081997Just to work around the bug, you can use a local definitions file to correct it:
cat > ~/.units <<EOF
moondist_min 356.371 Mm
moondist_max 406.720 Mm
EOF sundist 1.0000010178 au # mean earth-sun distance
moondist 3.844e8 m # mean earth-moon distance
sundist_near 1.471e11 m # earth-sun distance at perihelion
sundist_far 1.521e11 m # earth-sun distance at aphelion
moondist_min 3.564e8 m # approximate least distance at
# perigee 1901-2300
moondist_max 4.067e8 m # approximate greatest distance at
# apogee 1901-2300 You have: help moondist_max
then i scrolled up a few lines in lesssearch is also pretty nice
You have: search gallon
alegallon beergallon
beergallon 282 UKinch^3
brgallon 4.54609 l
drygallon 1|2 uspeck
gallon usgallon
imperialgallon brgallon
irishgallon 217.6 UKinch^3
scotsgallon 827.232 UKinch^3
usgallon 231 in^3
winegallon 231 UKinch^3This is an absolutely awesome comment. Thanks, kragen.
everyone is free to redistribute my comment, in whole or in part, modified or unmodified, with or without credit; i waive all rights associated with it to the maximum extent possible under applicable law. where applicable, i abandon its copyright to the public domain. i wrote and published this comment in argentina in 02023
[1]: https://en.wikipedia.org/wiki/Gaussian_units
[2]: A consequence of this is that electromagnetic equations formulated in terms of Gaussian units have goofy things like sqrt(grams) as "base" units. That was the tricky part to handle.
There should also be conversions to/from SI|CGS and "natural units" (particle physics) and "gravitational units" (general relativity - G=c=1).
The "input/output" can be a bit more subtle, too - since you may need to tell the converter the abstract physical kind/"meta type" of the thing like "energy" or "momentum" or "charge" to fully define what might happen (and in some ideal world get back an expression with powers of G's and c's in there symbolically rather than only numerically). Some of this shows up in an unresolved issue on that Nim library I mentioned[1]: https://github.com/SciNim/Unchained/issues/8
EDIT: { One reason to preserve a symbolic capability is that some constants have resisted precise measurement for centuries - G is still only known to about 5 decimals [2] - and you don't want round-trip unit conversion to add such errors to the calculation. }
[1] https://news.ycombinator.com/item?id=36988225
[2] https://en.wikipedia.org/wiki/Gravitational_constant#Modern_...
(Disclaimer: I only heard about all of this via the rumor mill; some details may be wrong or omitted.)
Never know, since they never distributed it.
For my local units file, I've also defined a “floppyMB” for retro computing purposes. The old “1.2 MB”, “1.44 MB”, “2.88 MB” measures were based on the idea that “1 MB = 1000 KiB” (seriously). The “1.44 MB” floppies would be measured as either 1.47 MB or 1.41 MiB in more conventional units.
echo "floppyMB 1000 KiB" >> ~/.units
units "1.44 floppyMB" MiBHardware manufacturers of the 90s have a lot to answer for with regards to binary prefix units.
I wonder if the recent problem with the voyager was due to something like this, for example, 2 arcminutes or 2*pi radians being mistaken for 2 degrees.
The mistake there was that they were unaware that they had to make the unit conversion, not that they did it wrong.
No tool can, by itself, overcome your ignorance of its necessity.
A type system that understands units of measurement can help:
https://learn.microsoft.com/en-us/dotnet/fsharp/language-ref...
It's perfectly possible to write F# code without those and messing up units conversion.
F# has this built in but it can be achieved with libraries in some other languages. For example, in Haskell with the dimensional package[1]:
import Numeric.Units.Dimensional.Prelude
import Numeric.Units.Dimensional.NonSI (mile)
speedLimit :: Velocity Double
speedLimit = 30 *~ (mile / hour)
main :: IO ()
main = do
let speed1 = 35 *~ (kilo meter / hour)
let speed2 = 35 *~ (mile / hour)
let speed3 = 35
print (speed1 <= speedLimit)
print (speed2 <= speedLimit)
print (speed3 <= speedLimit)
GHC will give you an error because `speed3` is mistyped.Go read about it yourself. NASA got some data from a contractor. The data had no units at all. The contractor assumed the data to be in some kind of US-standard units. NASA got these raw numbers and assumed they were in some kind of SI units.
Having enforced units in your language isn't going to help in this situation at all. They weren't exchanging code, they were exchanging raw data, or more specifically, a table with a bunch of numbers on it. The people at NASA simply assumed some units (instead of calling the contractor and asking), and they would have done this in your scenario too.
I think the root cause here was continued use of medieval units, instead of just standardizing on the metric system as it's already done around nearly the entire world.
It is getting less frequent in modern code bases that target 32-bit MCUs with hardware-floating point support, but converting large codebases
It’s also cultural - different fields use different SI units for historical or practical reasons.
My second year at MIT I was in a program (16.001 & 2) that had different classes using cgs, mks, and mills. They all met in the same classroom (different times of course!), so there was no spacial reminder. But we all survived.
That particular tool, "GNU Units"? Nope. It is pretty good command-line calculator (especially if you give inputs on command line so that history is preserved), but it is not really scriptable, and you'd _definitely_ want to avoid all manual calculations in any sort of important process.
as an example of scriptability, i just added this function to ~/.units
# note that theta is the angle from the central axis of the cone to its side
conesolidangle(theta) units=[radian;sr] range=[0,) 2 pi (1 - cos(theta)) sr ; \
acos(1 - conesolidangle/sr/2/pi)
(sadly it is not smart enough to figure out the inverse formula itself, even in a simple acyclic case like this)with this i can calculate, for example, the convergence angle required for concentrated sunlight to melt iron (asymptotically, assuming no heat losses to conduction or convection)
You have: 2 ~conesolidangle(conesolidangle(asin(sunradius/sundist)) tempC(1538)**4 stefanboltzmann / (1000W/m2))
You want: dms
13 deg + 10 arcmin + 34.428619 arcsec
it would be highly desirable to have conditionals and loops, of course, or even numpy-style vectors with broadcasting, as well as either functions of more than one argument or higher-order functions, and it doesn't have any of thoseThere is some solution for most programming languages:
https://gmpreussner.com/research/dimensional-analysis-in-pro...
How well it works mostly depends on features of a programming language or it's compiler.
That said it's rare for a programming language to have a type system with extra features and unit checking support in it's standard library like F# or GNAT does:
https://learn.microsoft.com/en-us/dotnet/fsharp/language-ref...
https://gcc.gnu.org/onlinedocs/gnat_ugn/Performing-Dimension...
My business is thermodynamics of power plants. Professionals in the industry tend to use convenient units like C, bars, kJ/kg and so on. But the formulas usualy need basic SI units. Using this library not only streamlines the conversion process but also keeps track of the unit itself. So instead of variable turbine_output_gj and turbine_output_mw I can have just turbine_output which is convenient.
It is hard to put a value on that but I believe it has already spared me many trivial mistakes that I had to explain to my clients.
Nim [1] has sufficient compile-time strength that units can be integrated with the static type system: https://github.com/SciNim/Unchained
See mp-units[1].
To be concrete (hah!), in C++ a template meta-type with 12 signed integer parameters (6 numerators & 6 denominators for rational exponents of SI base units) might be one way to model it.
Unlike C++ template stuff, Nim macros (like Lisp macros) makes metaprogramming more like procedural programming - just against abstract syntax trees. I think that helps to shield some of this type complexity from users, but the documentation README https://github.com/SciNim/Unchained does better job than I can in an HN comment.
Of course, for unit system conversion, the number of dimensions (6 in SI, 3 in CGS/Gaussian) changes. So, for full generality you need compile-time (if you want static type integration/CT errors) linear algebra over a rational field (at least & conventionally) to project|inverse project. That might be theoretically possible in C++. I would think it very un-fun and unlikely to ever have been done. There's probably a Mathematica package, though.
EDIT: It seems that mp-units mentioned in a sibling comment has some rare support for varying unit systems (no GR or Planck ones, but at least "natural" & "hep" & not sure about system-conversion or just system-use). That lib also leans very heavily on many very modern C++ (C++20 & beyond) features, has constexpr everywhere in use cases. I am not sure I would say it shields users wonderfully or makes it seem like units are very ordinary types. Just looking at mp-units/example/VARIOUS.cpp makes it look syntactically very noisy, verbose, and a lot to learn.
How does GNU unit get the conversion tables to bootstrap, does anybody know?
it's just a finite-dimensional vector space over ℚ
https://en.wikipedia.org/wiki/Dimensional_analysis#Mathemati...
the conversion tables are in /usr/share/units/definitions.units (or previously /usr/share/misc/units.dat)
they are the result of many years of careful scholarship by adrian mariano
The physical kind is a point in an N-dimensional rational space of exponents of base units, such as Mass * Distance ^2 * Time^-2 or (1,2,-2) for energy (maybe with some carry over ^0s for unused slots of a >3D meta-type space). Additive (like add, subtract, compare, and convert) are only meaningful at the same point in that lattice. If you are interested in learning more, this is all a part of dimensional analysis: https://en.wikipedia.org/wiki/Dimensional_analysis .
Even the dimensionality of that rational exponent space (the "unit system", if you will) is more of convenience / convention than fundamental. https://en.wikipedia.org/wiki/Planck_units clobber most things away leaving only 1 dimension (and a tendency for complex rational exponents). Meanwhile, the SI unit system is very "dimension promiscuous" (mass, length, time, electric current, temperature, amount of substance, luminous intensity) [1] to avoid non-integer exponents (but you cannot really forever since as soon as some formula has some square some solution of it has some root that probably gets you a 1/2 exponent).
There are some situations with not purely "conversion factor" scale offsets like thermal units (e.g. Celsius to Fahrenheit) that people often describe in math-ese as "affine conversions". Something like GNU Units attends these things, but they are kind of "conversion only" orphan step-children more than "real" types which "compose better". In physics formulae one will often only care about delta-Temperature, not levels, for example.
EDIT: The implicit creation of a potentially brand new type any time you multiply | divide two extant things is, incidentally, why you need either a dynamic or a very powerful static type system to express these things.
[1] https://en.wikipedia.org/wiki/International_System_of_Units
For currency conversion, it's a lot more tricky because there's many ways to convert. Eg; if I want to go from CHF to USD there's a lot of CHF->USD volume and there are market rates for that exact conversion. But between eg; SGD (singapore dollar) and Peruvian Soles (PEN) the market is a lot smaller so it may be actually beneficial to do SGD -> USD -> PEN.
Typically this means ingesting a feed of real time prices + any fees and then doing a limited-hop graph traversal.
the base unit is the us dollar
this is arguably incorrect but inarguably useful
from the man page:
> The units program database includes currency exchange rates and prices for some precious metals. Of course, these values change over time, sometimes very rapidly, and ‘units’ cannot provide real-time values. To update the exchange rates, run ‘units_cur’, which rewrites the file containing the currency rates, typically ‘/var/lib/units/currency.units’ or ‘/usr/local/com/units/currency.units’ on a Unix-like system or ‘C:\Program Files (x86)\GNU\units\definitions.units’ on a Windows system.
US Dollars would be connected to US Cents in the graph, and Pounds Sterling and New Pence would be connected to each other too, but those two subgraphs would be entirely disconnected from each other and from any SI unit like distance or mass.
What I like about the graph solution is that you don’t have to use SI or base unit at all! If your graph has km -> m, now you add (updating your graph) for m -> feet, you could traverse from km -> feet. Later on, you can add nautical mile -> feet, using this graph you could basically get km -> nautical mile if you need to.
| 3 mm | 4 kg | 0.44444444 kg / mm^2 | 44.444444 kg m^2 / (s^2 mm^2) | (44.444444 kg m^2 / (s^2 mm^2 stefanboltzmann))^0.25 |
| 2 mm | 1 kg | kg / (4 mm^2) | 25 kg m^2 / (s^2 mm^2) | (25 kg m^2 / (s^2 mm^2 stefanboltzmann))^0.25 |
#+TBLFM: $3=$2/$1/$1::$4=$3*(10m/s)**2::$5=($4/ stefanboltzmann)**(1/4)
(edited, previous incorrect version follows) | 3 mm | 4 kg | 0.44444444 kg / mm^2 | 300 mm m^2 / s^2 | (300 mm m^2 / (s^2 stefanboltzmann))^0.25 |
| 2 mm | 1 kg | kg / (4 mm^2) | 200 mm m^2 / s^2 | (200 mm m^2 / (s^2 stefanboltzmann))^0.25 |
#+TBLFM: $3=$2/$1/$1::$4=$1*(10m/s)**2::$5=($4/ stefanboltzmann)**(1/4)
similarly here i was hoping to get the time until the laptop charges and i guess i sort of did but not really | 22.8 Wh | 16.8 Wh | 6. Wh | 7.4W | 0.81081081 Wh / W |
#+TBLFM: $3=$1-$2::$5=$3/$4I wanted a quick, shareable "back of the envelope" tool.
You have: A / m
You want: ?
H_FIELD B_FIELD / (mu0/mu0_SI)
MAGNETIZATION MAGNETIC_DIPOLE_MOMENT / VOLUME
Oe oersted
oe Oe
oersted gauss / mu0
The units definitions file also contains many interesting facts, here's an excerpt: A ! # The ampere, symbol A, is the SI unit of electric current.
ampere A # It is defined by taking the fixed numerical value of the
amp ampere # elementary charge, e, to be 1.602 176 634 * 10^-19 when
# expressed in the unit C, which is equal to A*s.
#
# The previous definition was the current which produces a
# force of 2e-7 N/m between two infinitely long wires a meter
# apart. This definition was difficult to realize accurately.
#
# The ampere is actually realized by establishing the volt and
# the ohm, since A = V / ohm. These measurements can be done
# using the Josephson effect and the quantum Hall effect,
# which accurately measure voltage and resistance, respectively,
# with reference to two fixed constants, the Josephson
# constant, K_J=2e/h and the von Klitzing constant, R_K=h/e^2.
# Under the previous SI system, these constants had official
# fixed values, defined in 1990. This created a situation
# where the standard values for the volt and ohm were in some
# sense outside of SI because they depended primarily on
# constants different from the ones used to define SI. After
# the revision, since e and h have exact definitions, the
# Josephson and von Klitzing constants will also have exact
# definitions that derive from SI instead of the conventional
# 1990 values.
#
# In fact we know that there is a small offset between the
# conventional values of the electrical units based on the
# conventional 1990 values and the SI values. The new
# definition, which brings the practical electrical units back
# into SI, will lead to a one time change of +0.1ppm for
# voltage values and +0.02ppm for resistance values.
#
# The previous definition resulted in fixed exact values for
# the vacuum permeability (mu0), the impedance of free space
# (Z0), the vacuum permittivity (epsilon0), and the Coulomb
# constant. With the new definition, these four values are
# subject to experimental error.It wasn't until a decade or so of using it that I realised it was actually a units-aware calculator, and could make interesting conversions (say: how much land area you'd need to supply all US energy needs with solar power, given various factors of incident sunlight, spacing factors, panel efficiencies, etc.). kragen's comment in this thread blows away my own usage (I learned several new things reading it, which means this is a Good Day).
Note for MacOS and *BSD users: the variant of units shipping on your systems is a parlously pale shadow of the GNU version. MacOS boffins can install GNU Units via Homebrew, where it's accessed as "gunits" by default.
It can convert from linear to log units, e.g.:
You have: 10W You want: dBm 40
but not the other way around (unless I'm missing something):
You have: 40 dBm ^ Parse error
I understand that log units are tricky to get right, but in some fields they are pretty ubiquitous.
You have: dBm(40)
You want: W
* 10
/ 0.1
also you can name the inverse with ~ You have: ~dBm(2 W + dBm(10))
You want:
Definition: 33.031961
the man page documents theseDemo: https://yanosh.net/units-wasm/ GitHub Repo for the demo: https://github.com/yanosh-k/units-wasm GitHub Repo for the WASM project: https://github.com/yanosh-k/gnu-wasmunits
Thank you!
You want: miles per hour
* 0.0074404762
/ 134.4
You have: tempF(45)
You want: tempC
7.2222222 temp 42F
or temp 39C
#!/bin/sh
if echo "$1" | grep -q '[0-9][0-9]*[fF]' ; then
val=`units "tempF( $(echo $1 | sed 's/[a-zA-Z]//g') )" tempC`
echo ${val}C
else
val=`units "tempC( $(echo $1 | sed 's/[a-zA-Z]//g') )" tempF`
echo ${val}F
fi
exit 0units(1) can compute "starting at T Celsius, if i add N degrees celsius, how many degrees Fahrenheit did I add? and defaults to this for naive attempts to convert between the two, AND "what is X Fahrenheit in Celsius?"
That is, it can convert between delta-C and delta-F, and also between absolute C and F.
?!
$ units
Currency exchange rates from FloatRates (USD base) on 2023-08-03
3539 units, 109 prefixes, 111 nonlinear units
You have: dBm(0)
You want:
Definition: 0.001 kg m^2 / s^3
You have: pH(0)You want:
Definition: 1000 mol / m^3
You have: gasmark(0)Argument of function outside domain
You have: gasmark(0.25)
You want:
Definition: 380.37222 K
You have: gasmark(0.5)You want:
Definition: 394.26111 K
You have: gasmark(0.75)You want:
Definition: 401.20556 K
You have: gasmark(1)You want:
Definition: 408.15 K
You have: gasmark(1.25)You want:
Definition: 411.62222 K
You have: shoesize_men(0)You want:
Definition: 0.20955 m
You have: shoesize_men Definition: shoesize_men(n) = shoe_men0 + n shoesize_delta
n is dimensionless
You have: bril(0)You want:
Definition: 2.5110222e-27 cd / m^2
You have: airmass Definition: airmass(alt) = 1 / (sin(alt) + 0.50572 (alt / degree + 6.07995)^-1.6364)
defined for 0 degree <= alt <= 90 degree
You have: airmass(0 degrees)You want:
Definition: 37.919608
You have: atm_transmissionz Definition: atm_transmissionz(zenith) = exp(-extinction_coeff airmassz(zenith))
defined for 0 degree <= zenith <= 90 degree
You have: atm_transmissionz(34 degree)You want:
Definition: 0.77637004
You have: atm_transmissionz(0 degree)You want:
Definition: 0.81063327
You have: vmag(-1.46) # SiriusYou want:
Definition: 9.746164e-06 cd sr / m^2
You have: vmag(0) # VegaYou want:
Definition: 2.54e-06 cd sr / m^2
You have: baume(0)You want:
Definition: 1000 kg / m^3
You have: search gaugebrwiregauge <piecewise linear>
drillgauge <piecewise linear>
gaugepressure <nonlinear>
plategauge <piecewise linear>
screwgauge <nonlinear>
standardgauge 4 ft + 8.5 in
stdgauge <piecewise linear>
wiregauge <nonlinear>
zincgauge <piecewise linear>
You have: plategauge(0)
You want:
Definition: 0.0079375 m
You have: wiregauge(0)You want:
Definition: 0.0082514628 m
You have: sugar_bp(tempF(250)) # candy boiling pointYou want:
Definition: 1475.0252 kg / m^3
You have: degF(30)You want: sugar_conc_bpe # computed via this
86.975291
You have: sugar_conc_bpe Definition: interpolated table with points
sugar_conc_bpe(0) = 0 K
sugar_conc_bpe(5) = 0.0788 K
sugar_conc_bpe(10) = 0.169 K
sugar_conc_bpe(15) = 0.2729 K
...
sugar_conc_bpe(99.6) = 70.1448 K
sugar_conc_bpe(99.7) = 76.7867 K
You have: apidegree(0) # petroleum degreeYou want:
Definition: 1076.0456 kg / m
You have: ipv4subnetsize(24)You want:
Definition: 256
You have: ipv4subnetsize(26)You want:
Definition: 64
You have: gaugepressure(0 psi)You want: psi
* 14.695949
/ 0.068045964
nonlinear and even non-affine measurement units are everywhere manPosted a few times recently
Here's some more discussion 3 years ago: https://news.ycombinator.com/item?id=25657311
Though, back then, most GNU utils were copies of older unix stuff, so (1980) or even (1960) wouldn’t surprise me.
GNU Units - https://news.ycombinator.com/item?id=25657311 - Jan 2021 (203 comments)
The original maintainer still maintains 2185 packages [2].
Can't find an explanation why though.
[0]: https://github.com/archlinux/svntogit-community/commit/2b5ec...
[1]: https://aur.archlinux.org/cgit/aur.git/commit/?h=units&id=e6...
Measuring things like this seems brain dead.
Though imperial-system users don't mix units like that, it's not like "20 minutes 30 seconds", they just use fractions or decimals as appropriate. "20 and a half minutes" or "20.5 minutes". You'd just say "17.8 yards".
(Metric user here, with an appreciation for base 12)
nobody has a tape measure marked in decimal yards or decimal feet, so nobody is going to say 17.8 feet or 17.8 yards
sexagesimal system users also mix units like this: 2 hours, 10 minutes, and 5.2 seconds
same for larger units of time: 5 years, 2 months, and 12 days (which is an example units(1) can't hack)
You have: QuedraTim
You want: hour
* 1
/ 1
You have: QuedraTim
You want: minutes
* 60
/ 0.016666667
You have: TrinaTim
You want: minutes
* 5
/ 0.2
You have: DunaTim
You want: minutes;seconds
25 seconds
You have: QuenaTim
You want: hour
* 12
/ 0.083333333
You have: Grafut
You want:
Definition: gravity Tim^2 = 0.29558045 m
You have: QuedraGrafut
You want:
Definition: 12^4 Grafut = 6129.1562 mAs a physics undergrad I had a fascinating discussion with a lecturer on metrology. I always used SI units, my friend always preferred natural units, and the lecturer used gaussian units frequently (which always threw me off).
My position was that SI is the only reasonable measuring system because it’s a widely accepted standard, has no silly conversions, and bears resemblance to things we experience in every day life. I can space my hands apart by a metre through guesswork and I’m generally quite close, but centimetres or inches I’m awful at (any excuse, eh?). I can judge how many kilograms something is but not grams or pounds.
“Ah,” said the lecturer. “But these are units you are familiar with because they match your everyday experiences. In mine, statVolts etc are the most natural thing in the world - I don’t have constants where I don’t need them, and my numerical results are at a comfortable order of magnitude”.
“The most natural thing in the world are the universal constants - planck’s constant, the speed of light, the charge on an electron”, countered my friend. “If I measured something in those, anyone or anything in the universe, under any physical conditions, can recreate my measurements. If civilisation ended and my calculations were discovered millions of years later by an entirely new intelligent species, they would understand it with enough legwork”.
I quickly became a proponent of natural units. But then 50mph signs being renamed to 7.46e-8 might not go down well with the highways agency.
Anyway, the point of this story is that measurements are measurements, as long as they’re consistent. It isn’t about intellect, it’s about what you’re working with, what you normally work with, culture, and all kinds of things. If you have a 17 yard thingamagig and need 2ft clearance on one side and 5in clearance in the other, then this is a perfectly reasonable task to ask a computer with a teraflop or so of computational power.