[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
--
Rick Mann
rmann at latencyzero.com
More information about the swift-users
mailing list