5#ifndef OPTIMIZE_NUMERICALS_H 
    6#define OPTIMIZE_NUMERICALS_H 
   13#include <idol/mixed-integer/modeling/Types.h> 
   17    static constexpr double Inf = 1e20;
 
   39        static unsigned int Digits = 8;
 
 
   95    static bool is_pos_inf(
double t_value) {
 
   96        return t_value >= Inf;
 
   99    static bool is_neg_inf(
double t_value) {
 
  100        return t_value <= -Inf;
 
  103    static bool is_inf(
double t_value) {
 
  104        return is_pos_inf(t_value) || is_neg_inf(t_value);
 
  107    static bool equals(
double t_a, 
double t_b, 
double t_tolerance) {
 
  108        return std::abs(t_a - t_b) <= t_tolerance;
 
  111    static bool is(
double t_a, CtrType t_type, 
double t_b, 
double t_tolerance) {
 
  115                return t_a <= t_b + t_tolerance;
 
  117                return t_a >= t_b - t_tolerance;
 
  119                return equals(t_a, t_b, t_tolerance);
 
  123        throw Exception(
"Enum out of bounds.");
 
  126    static double relative_gap(
double t_lb, 
double t_ub) {
 
  128        if (is_neg_inf(t_lb) || is_pos_inf(t_ub)) {
 
  132        return std::abs(t_lb - t_ub) / (1e-10 + std::abs(t_ub));
 
  135    static double absolute_gap(
double t_lb, 
double t_ub) {
 
  136        if (is_pos_inf(t_ub) || is_neg_inf(t_lb)) {
 
  139        return std::abs(t_ub - t_lb);
 
  142    static bool is_zero(
double t_value, 
double t_tolerance) {
 
  143        return std::abs(t_value) <= t_tolerance;
 
  147    decltype(std::declval<T>().is_zero(.1)) is_zero(
const T& t_expr, 
double t_tolerance) {
 
  148        return t_expr.is_zero(t_tolerance);
 
  151    static bool is_integer(
double t_value, 
double t_tolerance) {
 
  152        return std::abs(t_value - std::round(t_value)) <= t_tolerance;
 
  155    static double round(
double t_value, 
unsigned int t_n_digits = 0) {
 
  156        const double multiplier = std::pow(10, t_n_digits);
 
  157        return std::round(t_value * multiplier) / multiplier;
 
static double Feasibility
static double MIPAbsoluteGap
static double MIPRelativeGap