Giter Site home page Giter Site logo

Comments (11)

andi-huber avatar andi-huber commented on May 20, 2024 2

I think we can close this.

from unit-api.

andi-huber avatar andi-huber commented on May 20, 2024

So I'd conclude, for any implementers to consider

  • designing such a normal form
  • and let UnitConverter.concatenate(UnitConverter converter) always produce a normal form

from unit-api.

keilw avatar keilw commented on May 20, 2024

Thanks for pointing that out. Either for the Spec or UoM Guidebook I assume some of this information will also help.

from unit-api.

desruisseaux avatar desruisseaux commented on May 20, 2024

I propose an amendment to the first point:

  • Two Units of the same quantity are equivalent if by replacing one with the other you achieve equivalent numerical results when doing quantity calculus.

For example kilometre and kilowatt have the same UnitConverter to their system unit (their converters can even be the same instance) but are not equivalent.

I agree that implementations should produce normal forms. In the case of unit conversions, this is simplified by the fact that the vast majority of conversions are linear, in which case commutativity (among other) applies. However one difficulty we have with current API is that UnitConverter.isLinear() method specification is wrong. Its current specification said:

Indicates if this converter is linear. A converter is linear if:

  • convert(u + v) == convert(u) + convert(v)
  • convert(r * u) == r * convert(u)

It is not the usual definition of linear conversion since a converter of the form y = scale * x + offset would not comply to this definition. This prevent implementations to detect e.g. that commutativity applies for Celsius units for instance.

from unit-api.

andi-huber avatar andi-huber commented on May 20, 2024

@desruisseaux thanks for the hint, I've updated the description.

from unit-api.

andi-huber avatar andi-huber commented on May 20, 2024

Regarding UnitConverter.isLinear(): This could be superseded by something like UnitConverter.characteristics() to return a set of enums like Java's Collector does ...
https://docs.oracle.com/javase/8/docs/api/java/util/stream/Collector.Characteristics.html

from unit-api.

keilw avatar keilw commented on May 20, 2024

We could add new methods but should not remove any without deprecating them first. Pulling MetricPrefix from the RI into the API was already a bit of a challenge but i was not removed and the package name also changed, so existing code may be migrated with little changes to impor statements. Completely removing a method would only work another version down the road.

from unit-api.

andi-huber avatar andi-huber commented on May 20, 2024

Sorry, I did not mean to start a naming discussion.
Just as a side-note: isLinear will be used rather by API implementers than by API users.

from unit-api.

keilw avatar keilw commented on May 20, 2024

Actually @desruisseaux started it already #39

from unit-api.

keilw avatar keilw commented on May 20, 2024

@andi-huber Is there anything to do here?

from unit-api.

keilw avatar keilw commented on May 20, 2024

Thanks

from unit-api.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.