From 5c0eb0667c97cfa4e48eea011c5259e9e88211e0 Mon Sep 17 00:00:00 2001 From: Chip Hogg Date: Sat, 9 Apr 2022 17:48:04 +0000 Subject: [PATCH] Remove `inverse_if_negative()` Fixes #332. --- src/core/include/units/bits/derived_unit.h | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) 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