[swift-users] Dimensional analysis
dabrahams at apple.com
Thu Dec 1 13:36:53 CST 2016
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-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?
> • 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.
More information about the swift-users