mirror of
https://github.com/mpusz/mp-units.git
synced 2025-08-04 20:54:28 +02:00
Ratio maths fixed
This commit is contained in:
@@ -52,7 +52,11 @@ struct common_quantity_impl<quantity<D1, U1, Rep1>, quantity<D2, U2, Rep2>, Rep>
|
||||
template<typename D1, typename U1, typename Rep1, typename D2, typename U2, typename Rep2, typename Rep>
|
||||
struct common_quantity_impl<quantity<D1, U1, Rep1>, quantity<D2, U2, Rep2>, Rep> {
|
||||
using dimension = conditional<is_instantiation_of<D1, unknown_dimension>, D2, D1>;
|
||||
using type = quantity<dimension, downcast_unit<dimension, common_ratio(U1::ratio, U2::ratio)>, Rep>;
|
||||
static constexpr ratio r1 = D1::base_units_ratio * U1::ratio;
|
||||
static constexpr ratio r2 = D2::base_units_ratio * U2::ratio;
|
||||
static constexpr ratio cr = common_ratio(r1, r2);
|
||||
using unit = downcast_unit<dimension, cr / dimension::base_units_ratio>;
|
||||
using type = quantity<dimension, unit, Rep>;
|
||||
};
|
||||
|
||||
template<typename D, typename U, typename Rep>
|
||||
|
@@ -313,7 +313,14 @@ struct quantity_cast_impl<To, CRatio, CRep, false, true, false> {
|
||||
template<typename Q1, typename Q2>
|
||||
constexpr ratio cast_ratio(const Q1& from, const Q2& to)
|
||||
{
|
||||
return quantity_ratio(from) / quantity_ratio(to);
|
||||
using FromU = Q1::unit;
|
||||
using ToU = Q2::unit;
|
||||
if constexpr(same_unit_reference<FromU, ToU>::value) {
|
||||
return FromU::ratio / ToU::ratio;
|
||||
}
|
||||
else {
|
||||
return quantity_ratio(from) / quantity_ratio(to);
|
||||
}
|
||||
}
|
||||
|
||||
} // namespace detail
|
||||
|
@@ -69,8 +69,7 @@ static_assert(fps::length<fps::foot>(1) == 0.3048q_m);
|
||||
static_assert(fps::mass<fps::pound>(1) == 0.45359237q_kg);
|
||||
static_assert(fps::time<fps::second>(1) == 1q_s);
|
||||
static_assert(fps::speed<fps::foot_per_second>(1) == 0.3048q_m_per_s);
|
||||
static_assert(fps::area<fps::square_foot>(1) > 0.09290303q_m2 &&
|
||||
fps::area<fps::square_foot>(1) < 0.09290305q_m2);
|
||||
static_assert(fps::area<fps::square_foot>(1) == 0.09290304q_m2);
|
||||
static_assert(fps::acceleration<fps::foot_per_second_sq>(1) == 0.3048q_m_per_s2);
|
||||
static_assert(fps::force<fps::poundal>(1) > 0.138254q_N &&
|
||||
fps::force<fps::poundal>(1) < 0.138256q_N);
|
||||
@@ -113,8 +112,7 @@ static_assert(1q_ft == 0.3048q_m);
|
||||
static_assert(1q_lb == 0.45359237q_kg);
|
||||
static_assert(1q_s == 1q_s);
|
||||
static_assert(1q_ft_per_s == 0.3048q_m_per_s);
|
||||
static_assert(1q_ft2 > 0.09290303q_m2 &&
|
||||
1q_ft2 < 0.09290305q_m2);
|
||||
static_assert(1q_ft2 == 0.09290304q_m2);
|
||||
static_assert(1q_ft_per_s2 == 0.3048q_m_per_s2);
|
||||
static_assert(1q_pdl > 0.138254q_N &&
|
||||
1q_pdl < 0.138256q_N);
|
||||
|
Reference in New Issue
Block a user