Remove inverse_if_negative()

Fixes #332.
This commit is contained in:
Chip Hogg
2022-04-09 17:48:04 +00:00
parent 85d6e35d79
commit 5c0eb0667c

View File

@@ -23,6 +23,7 @@
#pragma once #pragma once
#include <units/derived_dimension.h> #include <units/derived_dimension.h>
#include <units/magnitude.h>
namespace units::detail { namespace units::detail {
@@ -35,23 +36,20 @@ inline constexpr bool same_scaled_units<exponent_list<Es...>, Us...> = (UnitOf<U
// derived_unit // derived_unit
template<Exponent E> template<Unit... Us, typename... Es>
constexpr ratio inverse_if_negative(const ratio& r) constexpr Magnitude auto derived_mag(exponent_list<Es...>)
{ {
if constexpr (E::num * E::den > 0) return (as_magnitude<1>() * ... *
return r; pow<ratio{Es::num, Es::den}>(Us::mag / dimension_unit<typename Es::dimension>::mag));
else
return inverse(r);
} }
template<Unit... Us, typename... Es> template<Unit... Us, typename... Es>
constexpr ratio derived_ratio(exponent_list<Es...>) constexpr ratio derived_ratio(exponent_list<Es...> es)
{ {
return (... * inverse_if_negative<Es>( return as_ratio(derived_mag<Us...>(es));
pow<detail::abs(Es::num)>(Us::ratio / dimension_unit<typename Es::dimension>::ratio)));
} }
template<DerivedDimension D, Unit... Us> template<DerivedDimension D, Unit... Us>
using derived_unit = scaled_unit<derived_ratio<Us...>(typename D::recipe()), typename D::coherent_unit::reference>; using derived_unit = scaled_unit<derived_mag<Us...>(typename D::recipe()), typename D::coherent_unit::reference>;
} // namespace units::detail } // namespace units::detail