nholthaus / units

a compile-time, header-only, dimensional analysis and unit conversion library built on c++14 with no dependencies.
http://nholthaus.github.io/units/
MIT License
934 stars 134 forks source link

Math functions not compatible with percent #328

Open StefanoD opened 5 months ago

StefanoD commented 5 months ago

Please include the following information in your issue:

  1. Which version of units you are using Branch v3.x, Commit da6dd9176e8515323c75030d5e51ee19cf6c9afd

  2. Which compiler exhibited the problem (including compiler version) GCC 11.4.0

The math function don't work for dimensionless units like percent

using units::concentration::percent;

percent<double> pct1 = 100_pct;
percent<double> pct2 = 70_pct;

percent<double> delta = fabs(pct1 - pct2); // Results into percent<double>(0.3)
percent<double> maxValue = fmax(pct1, pct2); // Results into percent<double>(1.0)
percent<double> minValue = fmin(pct1, pct2);  // Results into percent<double>(0.7)

// Following tests are failing:

EXPECT_EQ(delta, 30_pct);
EXPECT_EQ(maxValue, pct1);
EXPECT_EQ(minValue, pct2);

The problem lies in core.h where the said functions use .value() instead of .raw()

chiphogg commented 4 months ago

Seems very highly related to #276. Although I wouldn't go so far as to call this one a duplicate, I think some of the discussion there can be helpful.

Same for this comment on #275.