From 3b0ba31e4d2fa0ad796ac844ca99cfe8f288b4df Mon Sep 17 00:00:00 2001 From: Mateusz Pusz Date: Mon, 14 Sep 2020 20:07:26 +0200 Subject: [PATCH] fix: constant evaluation encouraged in `quantity_cast` Refers to #164 --- src/include/units/quantity_cast.h | 40 +++++++++++++++---------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/src/include/units/quantity_cast.h b/src/include/units/quantity_cast.h index c8bf4253..de5ee90e 100644 --- a/src/include/units/quantity_cast.h +++ b/src/include/units/quantity_cast.h @@ -108,21 +108,21 @@ struct quantity_cast_impl { { if constexpr (treat_as_floating_point) { return To(static_cast(static_cast(q.count()) * - static_cast(detail::fpow10(CRatio.exp)) * + (static_cast(detail::fpow10(CRatio.exp)) * (static_cast(CRatio.num) / - static_cast(CRatio.den)))); + static_cast(CRatio.den))))); } else { if constexpr (CRatio.exp > 0) { return To(static_cast(static_cast(q.count()) * - static_cast(CRatio.num) * + (static_cast(CRatio.num) * static_cast(detail::ipow10(CRatio.exp)) / - static_cast(CRatio.den))); + static_cast(CRatio.den)))); } else { return To(static_cast(static_cast(q.count()) * - static_cast(CRatio.num) / + (static_cast(CRatio.num) / (static_cast(CRatio.den) * - static_cast(detail::ipow10(-CRatio.exp))))); + static_cast(detail::ipow10(-CRatio.exp)))))); } } } @@ -143,10 +143,10 @@ struct quantity_cast_impl { static constexpr To cast(const Q& q) { if constexpr (treat_as_floating_point) { - return To(static_cast(static_cast(q.count()) * static_cast(detail::fpow10(CRatio.exp)) * (CRep{1} / static_cast(CRatio.den)))); + return To(static_cast(static_cast(q.count()) * (static_cast(detail::fpow10(CRatio.exp)) * (CRep{1} / static_cast(CRatio.den))))); } else { if constexpr (CRatio.exp > 0) { - return To(static_cast(static_cast(q.count()) * static_cast(detail::ipow10(CRatio.exp)) / static_cast(CRatio.den))); + return To(static_cast(static_cast(q.count()) * (static_cast(detail::ipow10(CRatio.exp)) / static_cast(CRatio.den)))); } else { return To(static_cast(static_cast(q.count()) / (static_cast(detail::ipow10(-CRatio.exp)) * static_cast(CRatio.den)))); @@ -170,13 +170,13 @@ struct quantity_cast_impl { static constexpr To cast(const Q& q) { if constexpr (treat_as_floating_point) { - return To(static_cast(static_cast(q.count()) * static_cast(CRatio.num) * static_cast(detail::fpow10(CRatio.exp)))); + return To(static_cast(static_cast(q.count()) * (static_cast(CRatio.num) * static_cast(detail::fpow10(CRatio.exp))))); } else { if constexpr (CRatio.exp > 0) { - return To(static_cast(static_cast(q.count()) * static_cast(CRatio.num) * static_cast(detail::ipow10(CRatio.exp)))); + return To(static_cast(static_cast(q.count()) * (static_cast(CRatio.num) * static_cast(detail::ipow10(CRatio.exp))))); } else { - return To(static_cast(static_cast(q.count()) * static_cast(CRatio.num) / static_cast(detail::ipow10(-CRatio.exp)))); + return To(static_cast(static_cast(q.count()) * (static_cast(CRatio.num) / static_cast(detail::ipow10(-CRatio.exp))))); } } } @@ -215,13 +215,13 @@ struct quantity_cast_impl { static constexpr To cast(const Q& q) { if constexpr (treat_as_floating_point) { - return To(static_cast(q.count() * detail::fpow10(CRatio.exp) * (CRatio.num / CRatio.den))); + return To(static_cast(q.count() * (detail::fpow10(CRatio.exp) * (CRatio.num / CRatio.den)))); } else { if constexpr (CRatio.exp > 0) { - return To(static_cast(q.count() * CRatio.num * detail::ipow10(CRatio.exp) / CRatio.den)); + return To(static_cast(q.count() * (CRatio.num * detail::ipow10(CRatio.exp) / CRatio.den))); } else { - return To(static_cast(q.count()) * CRatio.num / (CRatio.den * detail::ipow10(-CRatio.exp))); + return To(static_cast(q.count()) * (CRatio.num / (CRatio.den * detail::ipow10(-CRatio.exp)))); } } } @@ -242,13 +242,13 @@ struct quantity_cast_impl { static constexpr To cast(const Q& q) { if constexpr (treat_as_floating_point) { - return To(static_cast(q.count() * detail::fpow10(CRatio.exp) / CRatio.den)); + return To(static_cast(q.count() * (detail::fpow10(CRatio.exp) / CRatio.den))); } else { if constexpr (CRatio.exp > 0) { - return To(static_cast(q.count() * detail::ipow10(CRatio.exp) / CRatio.den)); + return To(static_cast(q.count() * (detail::ipow10(CRatio.exp) / CRatio.den))); } else { - return To(static_cast(q.count() / (detail::ipow10(-CRatio.exp) * CRatio.den))); + return To(static_cast(q.count() / ((detail::ipow10(-CRatio.exp) * CRatio.den)))); } } } @@ -269,13 +269,13 @@ struct quantity_cast_impl { static constexpr To cast(const Q& q) { if constexpr (treat_as_floating_point) { - return To(static_cast(q.count() * CRatio.num * detail::fpow10(CRatio.exp))); + return To(static_cast(q.count() * (CRatio.num * detail::fpow10(CRatio.exp)))); } else { if constexpr (CRatio.exp > 0) { - return To(static_cast(q.count() * CRatio.num * detail::ipow10(CRatio.exp))); + return To(static_cast(q.count() * (CRatio.num * detail::ipow10(CRatio.exp)))); } else { - return To(static_cast(q.count() * CRatio.num / detail::ipow10(-CRatio.exp))); + return To(static_cast(q.count() * (CRatio.num / detail::ipow10(-CRatio.exp)))); } } }