diff --git a/src/core/include/units/bits/derived_unit.h b/src/core/include/units/bits/derived_unit.h index f078c26c..01ebbf23 100644 --- a/src/core/include/units/bits/derived_unit.h +++ b/src/core/include/units/bits/derived_unit.h @@ -23,6 +23,7 @@ #pragma once #include +#include namespace units::detail { @@ -35,23 +36,20 @@ inline constexpr bool same_scaled_units, Us...> = (UnitOf -constexpr ratio inverse_if_negative(const ratio& r) +template +constexpr Magnitude auto derived_mag(exponent_list) { - if constexpr (E::num * E::den > 0) - return r; - else - return inverse(r); + return (as_magnitude<1>() * ... * + pow(Us::mag / dimension_unit::mag)); } template -constexpr ratio derived_ratio(exponent_list) +constexpr ratio derived_ratio(exponent_list es) { - return (... * inverse_if_negative( - pow(Us::ratio / dimension_unit::ratio))); + return as_ratio(derived_mag(es)); } template -using derived_unit = scaled_unit(typename D::recipe()), typename D::coherent_unit::reference>; +using derived_unit = scaled_unit(typename D::recipe()), typename D::coherent_unit::reference>; } // namespace units::detail