[swift-users] Dimensional analysis

Rick Mann rmann at latencyzero.com
Sun Dec 4 20:53:21 CST 2016

> On Dec 1, 2016, at 11:36 , Dave Abrahams via swift-users <swift-users at swift.org> wrote:
> on Mon Nov 28 2016, Rick Mann <swift-users-AT-swift.org> wrote:
>> My earlier post about converting Decimal to Double was part of a
>> larger effort by me to write a calculator app that supports
>> dimensional analysis/unit conversions. I've explored some existing
>> libraries on the topic, ranging from this one in Common Lisp
>> (<http://www.cs.utexas.edu/users/novak/units95.html>) to this
>> nice-looking C++ header-only implementation
>> (<https://github.com/nholthaus/units>). Here's one done in Swift
>> (<https://github.com/michalkonturek/MKUnits>), which has similarities
>> to the C++ library.
>> My calculator allows expressions like this:
>> 	1-3/4" x 2 + (4.3 mm + 0.1") -> <XX> mm
>> And produces values in both inch and mm, but I want to be able to expand that to more units.
>> I also want to support proper dimensional analysis:
>> 	2 mm x 4" -> 203.2 mm^2
>> While my calculator generally only works with lengths, areas, and angles, I figure a general-purpose
>> dimensional analysis library would be useful.
>> Dimensional analysis has come up before
>> (<https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160111/006596.html>
>> and
>> <https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160229/011666.html>). It
>> seems support for constant expressions is useful for dimensional
>> analysis, and Swift doesn't currently support that.
>> Given that limitation, what approach would the gurus recommend? The library should support:
>> • Generating a result with derived units based on the input
>> • Simplifying composite units to some canonical form
>> • Validating conversion from one (derived) unit to another
>> • Supporting leniency in conversions (e.g. conflating lb and lb•f).
> Is that conflating pounds with foot-pounds?  If so that seems
> undesirable, and also incompatible with the very next bullet.  If not,
> what are you suggesting?

lb and lb-force. They are mass and force, respectively, but in a 1-gee gravity field, they result in the same value. Ideally, the library would support being lenient, if desired, but with the (usual) option of being strict.

>> • Compile-time errors when mixing incompatible types.
> Because of the lack of numeric generic parameters in Swift, we don't
> know how to create a library that satisfies the latter requirement.

Right, that's what I gathered from the older posts touching on the subject.


Rick Mann
rmann at latencyzero.com

More information about the swift-users mailing list