9#include "idol/general/numericals.h"
14 template<
class KeyT,
class ValueT>
18template<
class KeyT =
idol::Var,
class ValueT =
double>
21 ValueT m_constant = 0.;
39 AffExpr& operator*=(
double t_rhs);
40 AffExpr& operator/=(
double t_rhs);
46 ValueT& constant() {
return m_constant; }
48 [[nodiscard]]
const ValueT& constant()
const {
return m_constant; }
50 [[nodiscard]]
bool is_zero(
double t_tolerance)
const { return ::idol::is_zero(constant(), t_tolerance) && linear().is_zero(t_tolerance); }
62template<
class KeyT,
class ValueT>
67template<
class Key1,
class ValueT>
70 result.constant() = -result.constant();
71 result.linear() = -result.linear();
75template<
class Key1,
class ValueT>
80template<
class Key1,
class ValueT>
85template<
class Key1,
class ValueT>
90template<
class Key1,
class ValueT>
92 m_linear += t_rhs.m_linear;
93 m_constant += t_rhs.m_constant;
97template<
class Key1,
class ValueT>
99 m_linear -= t_rhs.m_linear;
100 m_constant -= t_rhs.m_constant;
104template<
class Key1,
class ValueT>
111template<
class Key1,
class ValueT>
120 template<
class Key1,
class ValueT>
125 t_os << t_expr.linear();
130 t_os << t_expr.constant();
132 if (!t_expr.linear().empty()) {
133 t_os <<
" + " << t_expr.linear();