Skip to content

Commit

Permalink
numeric_limits and numeric helper functions for units
Browse files Browse the repository at this point in the history
  • Loading branch information
siposcsaba89 authored and nholthaus committed Dec 9, 2024
1 parent bf02612 commit 4a7da3a
Showing 1 changed file with 44 additions and 0 deletions.
44 changes: 44 additions & 0 deletions include/units.h
Original file line number Diff line number Diff line change
Expand Up @@ -4860,9 +4860,53 @@ namespace std
{
return units::unit_t<Units, T, NonLinearScale>(std::numeric_limits<T>::lowest());
}
static constexpr units::unit_t<Units, T, NonLinearScale> epsilon()
{
return units::unit_t<Units, T, NonLinearScale>(std::numeric_limits<T>::epsilon());
}
static constexpr units::unit_t<Units, T, NonLinearScale> round_error()
{
return units::unit_t<Units, T, NonLinearScale>(std::numeric_limits<T>::round_error());
}
static constexpr units::unit_t<Units, T, NonLinearScale> infinity()
{
return units::unit_t<Units, T, NonLinearScale>(std::numeric_limits<T>::infinity());
}
static constexpr units::unit_t<Units, T, NonLinearScale> quiet_NaN()
{
return units::unit_t<Units, T, NonLinearScale>(std::numeric_limits<T>::quiet_NaN());
}
static constexpr units::unit_t<Units, T, NonLinearScale> signaling_NaN()
{
return units::unit_t<Units, T, NonLinearScale>(std::numeric_limits<T>::signaling_NaN());
}

static constexpr bool is_integer = std::numeric_limits<T>::is_integer;
static constexpr bool is_signed = std::numeric_limits<T>::is_signed;
static constexpr bool has_quiet_NaN = std::numeric_limits<T>::has_quiet_NaN;
static constexpr bool has_signaling_NaN = std::numeric_limits<T>::has_signaling_NaN;
static constexpr bool has_infinity = std::numeric_limits<T>::has_infinity;

};

template<class Units, typename T, template<typename> class NonLinearScale>
bool isnan(const units::unit_t<Units, T, NonLinearScale>& x)
{
return std::isnan(x());
}

template<class Units, typename T, template<typename> class NonLinearScale>
bool isinf(const units::unit_t<Units, T, NonLinearScale>& x)
{
return std::isinf(x());
}

template<class Units, typename T, template<typename> class NonLinearScale>
bool signbit(const units::unit_t<Units, T, NonLinearScale>& x)
{
return std::signbit(x());
}

}

#ifdef _MSC_VER
Expand Down

0 comments on commit 4a7da3a

Please sign in to comment.