Scippy

SCIP

Solving Constraint Integer Programs

Detailed Description

methods for interval arithmetics

Data Structures

struct  SCIP_Interval
 

Typedefs

typedef struct SCIP_Interval SCIP_INTERVAL
 
typedef int SCIP_ROUNDMODE
 

Functions

SCIP_Bool SCIPintervalHasRoundingControl (void)
 
void SCIPintervalSetRoundingMode (SCIP_ROUNDMODE roundmode)
 
SCIP_ROUNDMODE SCIPintervalGetRoundingMode (void)
 
void SCIPintervalSetRoundingModeDownwards (void)
 
void SCIPintervalSetRoundingModeUpwards (void)
 
void SCIPintervalSetRoundingModeToNearest (void)
 
void SCIPintervalSetRoundingModeTowardsZero (void)
 
SCIP_Real SCIPintervalNegateReal (SCIP_Real x)
 
SCIP_Real SCIPintervalGetInf (SCIP_INTERVAL interval)
 
SCIP_Real SCIPintervalGetSup (SCIP_INTERVAL interval)
 
void SCIPintervalSet (SCIP_INTERVAL *resultant, SCIP_Real value)
 
void SCIPintervalSetBounds (SCIP_INTERVAL *resultant, SCIP_Real inf, SCIP_Real sup)
 
void SCIPintervalSetEmpty (SCIP_INTERVAL *resultant)
 
SCIP_Bool SCIPintervalIsEmpty (SCIP_Real infinity, SCIP_INTERVAL operand)
 
void SCIPintervalSetEntire (SCIP_Real infinity, SCIP_INTERVAL *resultant)
 
SCIP_Bool SCIPintervalIsEntire (SCIP_Real infinity, SCIP_INTERVAL operand)
 
SCIP_Bool SCIPintervalIsPositiveInfinity (SCIP_Real infinity, SCIP_INTERVAL operand)
 
SCIP_Bool SCIPintervalIsNegativeInfinity (SCIP_Real infinity, SCIP_INTERVAL operand)
 
SCIP_Bool SCIPintervalIsSubsetEQ (SCIP_Real infinity, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
SCIP_Bool SCIPintervalAreDisjoint (SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
SCIP_Bool SCIPintervalAreDisjointEps (SCIP_Real eps, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalIntersect (SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalIntersectEps (SCIP_INTERVAL *resultant, SCIP_Real eps, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalUnify (SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalAddInf (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalAddSup (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalAdd (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalAddScalar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
 
void SCIPintervalAddVectors (SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_INTERVAL *operand2)
 
void SCIPintervalSub (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalSubScalar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
 
void SCIPintervalMulInf (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalMulSup (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalMul (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalMulScalarInf (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
 
void SCIPintervalMulScalarSup (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
 
void SCIPintervalMulScalar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
 
void SCIPintervalDiv (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalDivScalar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
 
void SCIPintervalScalprod (SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_INTERVAL *operand2)
 
void SCIPintervalScalprodScalarsInf (SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_Real *operand2)
 
void SCIPintervalScalprodScalarsSup (SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_Real *operand2)
 
void SCIPintervalScalprodScalars (SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_Real *operand2)
 
void SCIPintervalSquare (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalSquareRoot (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalPower (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalPowerScalar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
 
void SCIPintervalPowerScalarScalar (SCIP_INTERVAL *resultant, SCIP_Real operand1, SCIP_Real operand2)
 
SCIP_Real SCIPintervalPowerScalarIntegerInf (SCIP_Real operand1, int operand2)
 
SCIP_Real SCIPintervalPowerScalarIntegerSup (SCIP_Real operand1, int operand2)
 
void SCIPintervalPowerScalarInteger (SCIP_INTERVAL *resultant, SCIP_Real operand1, int operand2)
 
void SCIPintervalPowerScalarInverse (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL basedomain, SCIP_Real exponent, SCIP_INTERVAL image)
 
void SCIPintervalSignPowerScalar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
 
void SCIPintervalReciprocal (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalExp (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalLog (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalMin (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalMax (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
 
void SCIPintervalAbs (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalSin (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalCos (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalSign (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
void SCIPintervalEntropy (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
 
SCIP_Real SCIPintervalQuadUpperBound (SCIP_Real infinity, SCIP_Real a, SCIP_INTERVAL b_, SCIP_INTERVAL x)
 
void SCIPintervalQuad (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_Real sqrcoeff, SCIP_INTERVAL lincoeff, SCIP_INTERVAL xrng)
 
void SCIPintervalSolveUnivariateQuadExpressionPositive (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL sqrcoeff, SCIP_INTERVAL lincoeff, SCIP_INTERVAL rhs, SCIP_INTERVAL xbnds)
 
void SCIPintervalSolveUnivariateQuadExpressionNegative (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL sqrcoeff, SCIP_INTERVAL lincoeff, SCIP_INTERVAL rhs, SCIP_INTERVAL xbnds)
 
void SCIPintervalSolveUnivariateQuadExpressionPositiveAllScalar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_Real sqrcoeff, SCIP_Real lincoeff, SCIP_Real rhs, SCIP_INTERVAL xbnds)
 
void SCIPintervalSolveUnivariateQuadExpression (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL sqrcoeff, SCIP_INTERVAL lincoeff, SCIP_INTERVAL rhs, SCIP_INTERVAL xbnds)
 
void SCIPintervalQuadBivar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_Real ax, SCIP_Real ay, SCIP_Real axy, SCIP_Real bx, SCIP_Real by, SCIP_INTERVAL xbnds, SCIP_INTERVAL ybnds)
 
void SCIPintervalSolveBivariateQuadExpressionAllScalar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_Real ax, SCIP_Real ay, SCIP_Real axy, SCIP_Real bx, SCIP_Real by, SCIP_INTERVAL rhs, SCIP_INTERVAL xbnds, SCIP_INTERVAL ybnds)
 
int SCIPintervalPropagateWeightedSum (SCIP_Real infinity, int noperands, SCIP_INTERVAL *operands, SCIP_Real *weights, SCIP_Real constant, SCIP_INTERVAL rhs, SCIP_INTERVAL *resultants, SCIP_Bool *infeasible)
 

Typedef Documentation

◆ SCIP_INTERVAL

typedef struct SCIP_Interval SCIP_INTERVAL

Definition at line 58 of file intervalarith.h.

◆ SCIP_ROUNDMODE

typedef int SCIP_ROUNDMODE

rounding mode of floating point operations (upwards, downwards, nearest, ...)

exact values depend on machine and compiler

Definition at line 64 of file intervalarith.h.

Function Documentation

◆ SCIPintervalHasRoundingControl()

SCIP_Bool SCIPintervalHasRoundingControl ( void  )

returns whether rounding mode control is available

Definition at line 236 of file intervalarith.c.

References FALSE.

Referenced by SCIPfindSimpleRational().

◆ SCIPintervalSetRoundingMode()

void SCIPintervalSetRoundingMode ( SCIP_ROUNDMODE  roundmode)

sets rounding mode of floating point operations

Parameters
roundmoderounding mode to activate

Definition at line 265 of file intervalarith.c.

References intervalSetRoundingMode().

Referenced by computeMaxBoundaryForBilinearProp(), computeMaxForBilinearProp(), SCIP_DECL_NLHDLRINTEVAL(), SCIP_DECL_NLHDLRREVERSEPROP(), SCIPfindSimpleRational(), SCIPintervalCos(), and SCIPintervalPropagateWeightedSum().

◆ SCIPintervalGetRoundingMode()

◆ SCIPintervalSetRoundingModeDownwards()

void SCIPintervalSetRoundingModeDownwards ( void  )

sets rounding mode of floating point operations to downwards rounding

Definition at line 341 of file intervalarith.c.

References intervalSetRoundingMode(), and SCIP_ROUND_DOWNWARDS.

Referenced by computeMaxForBilinearProp(), SCIP_DECL_NLHDLRINTEVAL(), SCIP_DECL_NLHDLRREVERSEPROP(), SCIPfindSimpleRational(), SCIPintervalCos(), and SCIPintervalPropagateWeightedSum().

◆ SCIPintervalSetRoundingModeUpwards()

void SCIPintervalSetRoundingModeUpwards ( void  )

sets rounding mode of floating point operations to upwards rounding

Definition at line 349 of file intervalarith.c.

References intervalSetRoundingMode(), and SCIP_ROUND_UPWARDS.

Referenced by computeMaxBoundaryForBilinearProp(), SCIP_DECL_NLHDLRINTEVAL(), SCIP_DECL_NLHDLRREVERSEPROP(), and SCIPintervalEntropy().

◆ SCIPintervalSetRoundingModeToNearest()

void SCIPintervalSetRoundingModeToNearest ( void  )

sets rounding mode of floating point operations to nearest rounding

Definition at line 357 of file intervalarith.c.

References intervalSetRoundingMode(), and SCIP_ROUND_NEAREST.

Referenced by SCIPintervalEntropy().

◆ SCIPintervalSetRoundingModeTowardsZero()

void SCIPintervalSetRoundingModeTowardsZero ( void  )

sets rounding mode of floating point operations to towards zero rounding

Definition at line 365 of file intervalarith.c.

References intervalSetRoundingMode(), and SCIP_ROUND_ZERO.

◆ SCIPintervalNegateReal()

SCIP_Real SCIPintervalNegateReal ( SCIP_Real  x)

negates a number in a way that the compiler does not optimize it away

Parameters
xnumber to negate

Definition at line 373 of file intervalarith.c.

References negate().

Referenced by computeMaxBoundaryForBilinearProp(), computeMaxForBilinearProp(), and SCIPintervalPropagateWeightedSum().

◆ SCIPintervalGetInf()

◆ SCIPintervalGetSup()

◆ SCIPintervalSet()

◆ SCIPintervalSetBounds()

◆ SCIPintervalSetEmpty()

◆ SCIPintervalIsEmpty()

SCIP_Bool SCIPintervalIsEmpty ( SCIP_Real  infinity,
SCIP_INTERVAL  operand 
)

indicates whether interval is empty, i.e., whether inf > sup

Parameters
infinityvalue for infinity
operandoperand of operation

Definition at line 455 of file intervalarith.c.

References FALSE, SCIP_Interval::inf, and SCIP_Interval::sup.

Referenced by computeRoot(), createAuxVar(), estimateVertexPolyhedralProduct(), forwardPropExpr(), getFeasiblePointsBilinear(), intevalBilinear(), intEvalQuotient(), isIntervalBetter(), presolveRedundantConss(), propagateBoundsQuadExpr(), propConss(), reverseProp(), reversePropQueue(), reversepropQuotient(), SCIP_DECL_EXPRESTIMATE(), SCIP_DECL_EXPRINTEVAL(), SCIP_DECL_EXPRREVERSEPROP(), SCIP_DECL_NLHDLRESTIMATE(), SCIP_DECL_NLHDLRINITSEPA(), SCIP_DECL_NLHDLRINTEVAL(), SCIP_DECL_NLHDLRREVERSEPROP(), SCIPintervalAbs(), SCIPintervalAdd(), SCIPintervalAddScalar(), SCIPintervalCos(), SCIPintervalDiv(), SCIPintervalDivScalar(), SCIPintervalEntropy(), SCIPintervalExp(), SCIPintervalLog(), SCIPintervalMax(), SCIPintervalMin(), SCIPintervalMul(), SCIPintervalMulInf(), SCIPintervalMulScalar(), SCIPintervalMulScalarInf(), SCIPintervalMulScalarSup(), SCIPintervalMulSup(), SCIPintervalPower(), SCIPintervalPowerScalar(), SCIPintervalPropagateWeightedSum(), SCIPintervalQuad(), SCIPintervalQuadUpperBound(), SCIPintervalReciprocal(), SCIPintervalSign(), SCIPintervalSignPowerScalar(), SCIPintervalSolveBivariateQuadExpressionAllScalar(), SCIPintervalSolveUnivariateQuadExpression(), SCIPintervalSquare(), SCIPintervalSquareRoot(), SCIPintervalSub(), SCIPtightenExprIntervalNonlinear(), and tightenAuxVarBounds().

◆ SCIPintervalSetEntire()

void SCIPintervalSetEntire ( SCIP_Real  infinity,
SCIP_INTERVAL resultant 
)

◆ SCIPintervalIsEntire()

SCIP_Bool SCIPintervalIsEntire ( SCIP_Real  infinity,
SCIP_INTERVAL  operand 
)

indicates whether interval is entire, i.e., whether inf ≤ -infinity and sup ≥ infinity

Parameters
infinityvalue for infinity
operandoperand of operation

Definition at line 479 of file intervalarith.c.

References SCIP_Interval::inf, infinity, and SCIP_Interval::sup.

Referenced by nlrowCalcActivityBounds(), reversePropQueue(), SCIP_DECL_EXPRREVERSEPROP(), SCIP_DECL_NLHDLRDETECT(), SCIP_DECL_NLHDLRREVERSEPROP(), SCIPintervalPropagateWeightedSum(), and SCIPtightenExprIntervalNonlinear().

◆ SCIPintervalIsPositiveInfinity()

SCIP_Bool SCIPintervalIsPositiveInfinity ( SCIP_Real  infinity,
SCIP_INTERVAL  operand 
)

indicates whether interval is positive infinity, i.e., [infinity, infinity]

Parameters
infinityvalue for infinity
operandoperand of operation

Definition at line 488 of file intervalarith.c.

References SCIP_Interval::inf, and SCIP_Interval::sup.

◆ SCIPintervalIsNegativeInfinity()

SCIP_Bool SCIPintervalIsNegativeInfinity ( SCIP_Real  infinity,
SCIP_INTERVAL  operand 
)

indicates whether interval is negative infinity, i.e., [-infinity, -infinity]

Parameters
infinityvalue for infinity
operandoperand of operation

Definition at line 497 of file intervalarith.c.

References SCIP_Interval::inf, and SCIP_Interval::sup.

◆ SCIPintervalIsSubsetEQ()

SCIP_Bool SCIPintervalIsSubsetEQ ( SCIP_Real  infinity,
SCIP_INTERVAL  operand1,
SCIP_INTERVAL  operand2 
)

indicates whether operand1 is contained in operand2

Parameters
infinityvalue for infinity
operand1first operand of operation
operand2second operand of operation

Definition at line 506 of file intervalarith.c.

References FALSE, SCIP_Interval::inf, MAX, SCIP_Interval::sup, and TRUE.

Referenced by isIntervalBetter(), presolveRedundantConss(), and reverseProp().

◆ SCIPintervalAreDisjoint()

SCIP_Bool SCIPintervalAreDisjoint ( SCIP_INTERVAL  operand1,
SCIP_INTERVAL  operand2 
)

indicates whether operand1 and operand2 are disjoint

Parameters
operand1first operand of operation
operand2second operand of operation

Definition at line 525 of file intervalarith.c.

References SCIP_Interval::inf, and SCIP_Interval::sup.

◆ SCIPintervalAreDisjointEps()

SCIP_Bool SCIPintervalAreDisjointEps ( SCIP_Real  eps,
SCIP_INTERVAL  operand1,
SCIP_INTERVAL  operand2 
)

indicates whether operand1 and operand2 are disjoint with epsilon tolerance

Returns whether minimal (relative) distance of intervals is larger than epsilon. Same as SCIPintervalIsEmpty(SCIPintervalIntersectEps(operand1, operand2)).

Parameters
epsepsilon
operand1first operand of operation
operand2second operand of operation

Definition at line 538 of file intervalarith.c.

References eps, FALSE, SCIP_Interval::inf, SCIPrelDiff(), and SCIP_Interval::sup.

◆ SCIPintervalIntersect()

◆ SCIPintervalIntersectEps()

void SCIPintervalIntersectEps ( SCIP_INTERVAL resultant,
SCIP_Real  eps,
SCIP_INTERVAL  operand1,
SCIP_INTERVAL  operand2 
)

intersection of two intervals with epsilon tolerance

If intersection of operand1 and operand2 is empty, but minimal (relative) distance of intervals is at most epsilon, then set resultant to singleton containing the point in operand1 that is closest to operand2, i.e.,

  • resultant = { operand1.sup }, if operand1.sup < operand2.inf and reldiff(operand2.inf,operand1.sup) ≤ eps
  • resultant = { operand1.inf }, if operand1.inf > operand2.sup and reldiff(operand1.inf,operand2.sup) ≤ eps
  • resultant = intersection of operand1 and operand2, otherwise
Parameters
resultantresultant interval of operation
epsepsilon
operand1first operand of operation
operand2second operand of operation

Definition at line 575 of file intervalarith.c.

References SCIP_Interval::inf, NULL, SCIPintervalIntersect(), SCIPintervalSet(), SCIPrelDiff(), and SCIP_Interval::sup.

Referenced by estimateBivariateQuotient(), estimateUnivariateQuotient(), forwardPropExpr(), SCIP_DECL_NLHDLRESTIMATE(), SCIPgetExprBoundsNonlinear(), and SCIPtightenExprIntervalNonlinear().

◆ SCIPintervalUnify()

void SCIPintervalUnify ( SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_INTERVAL  operand2 
)

interval enclosure of the union of two intervals

Parameters
resultantresultant interval of operation
operand1first operand of operation
operand2second operand of operation

Definition at line 606 of file intervalarith.c.

References SCIP_Interval::inf, MAX, NULL, and SCIP_Interval::sup.

Referenced by intEvalQuotient(), reversepropQuotient(), SCIP_DECL_EXPRREVERSEPROP(), SCIPintervalPowerScalarInverse(), SCIPintervalSolveBivariateQuadExpressionAllScalar(), and SCIPintervalSolveUnivariateQuadExpression().

◆ SCIPintervalAddInf()

void SCIPintervalAddInf ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_INTERVAL  operand2 
)

adds operand1 and operand2 and stores infimum of result in infimum of resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation
operand2second operand of operation

Definition at line 633 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), NULL, and SCIP_ROUND_DOWNWARDS.

Referenced by SCIPintervalAdd(), SCIPintervalAddVectors(), SCIPintervalScalprod(), and SCIPintervalScalprodScalarsInf().

◆ SCIPintervalAddSup()

void SCIPintervalAddSup ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_INTERVAL  operand2 
)

adds operand1 and operand2 and stores supremum of result in supremum of resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation
operand2second operand of operation

Definition at line 660 of file intervalarith.c.

References infinity, intervalGetRoundingMode(), NULL, SCIP_ROUND_UPWARDS, and SCIP_Interval::sup.

Referenced by SCIPintervalAdd(), SCIPintervalAddVectors(), SCIPintervalScalprod(), and SCIPintervalScalprodScalarsSup().

◆ SCIPintervalAdd()

void SCIPintervalAdd ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_INTERVAL  operand2 
)

adds operand1 and operand2 and stores result in resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation
operand2second operand of operation

Definition at line 687 of file intervalarith.c.

References intervalGetRoundingMode(), intervalSetRoundingMode(), NULL, SCIP_ROUND_DOWNWARDS, SCIP_ROUND_UPWARDS, SCIPintervalAddInf(), SCIPintervalAddSup(), and SCIPintervalIsEmpty().

Referenced by lpUpdateVarLooseProved(), lpUpdateVarProved(), nlrowCalcActivityBounds(), provedBound(), SCIP_DECL_EXPRINTEVAL(), SCIP_DECL_NLHDLRINTEVAL(), SCIP_DECL_NLHDLRREVERSEPROP(), SCIPintervalQuadBivar(), SCIPintervalSin(), and SCIPlpGetModifiedProvedPseudoObjval().

◆ SCIPintervalAddScalar()

void SCIPintervalAddScalar ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_Real  operand2 
)

adds operand1 and scalar operand2 and stores result in resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation
operand2second operand of operation

Definition at line 714 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), intervalSetRoundingMode(), NULL, SCIP_ROUND_DOWNWARDS, SCIP_ROUND_UPWARDS, SCIPintervalIsEmpty(), and SCIP_Interval::sup.

Referenced by intEvalQuotient(), reversepropQuotient(), SCIP_DECL_EXPRREVERSEPROP(), SCIPintervalQuadBivar(), SCIPintervalSolveBivariateQuadExpressionAllScalar(), and SCIPintervalSubScalar().

◆ SCIPintervalAddVectors()

void SCIPintervalAddVectors ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
int  length,
SCIP_INTERVAL operand1,
SCIP_INTERVAL operand2 
)

adds vector operand1 and vector operand2 and stores result in vector resultant

Parameters
infinityvalue for infinity
resultantarray of resultant intervals of operation
lengthlength of arrays
operand1array of first operands of operation
operand2array of second operands of operation

Definition at line 764 of file intervalarith.c.

References intervalGetRoundingMode(), intervalSetRoundingMode(), SCIP_ROUND_DOWNWARDS, SCIP_ROUND_UPWARDS, SCIPintervalAddInf(), and SCIPintervalAddSup().

◆ SCIPintervalSub()

void SCIPintervalSub ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_INTERVAL  operand2 
)

subtracts operand2 from operand1 and stores result in resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation
operand2second operand of operation

Definition at line 794 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), intervalSetRoundingMode(), NULL, SCIP_ROUND_DOWNWARDS, SCIP_ROUND_UPWARDS, SCIPintervalIsEmpty(), and SCIP_Interval::sup.

Referenced by lpUpdateVarColumnProved(), lpUpdateVarProved(), provedBound(), SCIP_DECL_NLHDLRREVERSEPROP(), SCIPintervalCos(), SCIPintervalSin(), SCIPintervalSolveBivariateQuadExpressionAllScalar(), and SCIPlpGetModifiedProvedPseudoObjval().

◆ SCIPintervalSubScalar()

void SCIPintervalSubScalar ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_Real  operand2 
)

subtracts scalar operand2 from operand1 and stores result in resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation
operand2second operand of operation

Definition at line 842 of file intervalarith.c.

References SCIPintervalAddScalar().

Referenced by reversepropQuotient().

◆ SCIPintervalMulInf()

void SCIPintervalMulInf ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_INTERVAL  operand2 
)

multiplies operand1 with operand2 and stores infimum of result in infimum of resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation; can be +/-inf
operand2second operand of operation; can be +/-inf

Definition at line 853 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), NULL, SCIP_Real, SCIP_ROUND_DOWNWARDS, SCIPintervalIsEmpty(), SCIPintervalMulScalarInf(), and SCIP_Interval::sup.

Referenced by SCIPintervalMul(), and SCIPintervalScalprod().

◆ SCIPintervalMulSup()

void SCIPintervalMulSup ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_INTERVAL  operand2 
)

multiplies operand1 with operand2 and stores supremum of result in supremum of resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation; can be +/-inf
operand2second operand of operation; can be +/-inf

Definition at line 913 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), MAX, NULL, SCIP_Real, SCIP_ROUND_UPWARDS, SCIPintervalIsEmpty(), SCIPintervalMulScalarSup(), and SCIP_Interval::sup.

Referenced by SCIPintervalMul(), and SCIPintervalScalprod().

◆ SCIPintervalMul()

void SCIPintervalMul ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_INTERVAL  operand2 
)

multiplies operand1 with operand2 and stores result in resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation; can be +/-inf
operand2second operand of operation; can be +/-inf

Definition at line 973 of file intervalarith.c.

References intervalGetRoundingMode(), intervalSetRoundingMode(), NULL, SCIP_ROUND_DOWNWARDS, SCIP_ROUND_UPWARDS, SCIPintervalIsEmpty(), SCIPintervalMulInf(), and SCIPintervalMulSup().

Referenced by lpUpdateVarColumnProved(), lpUpdateVarLooseProved(), lpUpdateVarProved(), provedBound(), SCIP_DECL_EXPRINTEVAL(), SCIP_DECL_EXPRREVERSEPROP(), SCIPintervalDiv(), SCIPintervalPower(), SCIPintervalQuad(), and SCIPlpGetModifiedProvedPseudoObjval().

◆ SCIPintervalMulScalarInf()

void SCIPintervalMulScalarInf ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_Real  operand2 
)

multiplies operand1 with scalar operand2 and stores infimum of result in infimum of resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation
operand2second operand of operation; can be +/- inf

Definition at line 1000 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), NULL, SCIP_ROUND_DOWNWARDS, SCIPintervalIsEmpty(), and SCIP_Interval::sup.

Referenced by SCIPintervalMulInf(), SCIPintervalMulScalar(), and SCIPintervalScalprodScalarsInf().

◆ SCIPintervalMulScalarSup()

void SCIPintervalMulScalarSup ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_Real  operand2 
)

multiplies operand1 with scalar operand2 and stores supremum of result in supremum of resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation
operand2second operand of operation; can be +/- inf

Definition at line 1056 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), NULL, SCIP_ROUND_UPWARDS, SCIPintervalIsEmpty(), and SCIP_Interval::sup.

Referenced by SCIPintervalMulScalar(), SCIPintervalMulSup(), and SCIPintervalScalprodScalarsSup().

◆ SCIPintervalMulScalar()

void SCIPintervalMulScalar ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_Real  operand2 
)

◆ SCIPintervalDiv()

void SCIPintervalDiv ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_INTERVAL  operand2 
)

divides operand1 by operand2 and stores result in resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation
operand2second operand of operation

Definition at line 1151 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), intervalSetRoundingMode(), NULL, SCIP_ROUND_DOWNWARDS, SCIP_ROUND_UPWARDS, SCIPintervalIsEmpty(), SCIPintervalMul(), SCIPintervalSet(), and SCIP_Interval::sup.

Referenced by intEvalQuotient(), reversepropQuotient(), and SCIPintervalSolveUnivariateQuadExpression().

◆ SCIPintervalDivScalar()

void SCIPintervalDivScalar ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_Real  operand2 
)

divides operand1 by scalar operand2 and stores result in resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation
operand2second operand of operation

Definition at line 1205 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), intervalSetRoundingMode(), NULL, SCIP_ROUND_DOWNWARDS, SCIP_ROUND_UPWARDS, SCIPintervalIsEmpty(), and SCIP_Interval::sup.

Referenced by computeMaxForBilinearProp(), intEvalQuotient(), propagateBoundsLinExpr(), and SCIPintervalPropagateWeightedSum().

◆ SCIPintervalScalprod()

void SCIPintervalScalprod ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
int  length,
SCIP_INTERVAL operand1,
SCIP_INTERVAL operand2 
)

computes the scalar product of two vectors of intervals and stores result in resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
lengthlength of vectors
operand1first vector as array of intervals; can have +/-inf entries
operand2second vector as array of intervals; can have +/-inf entries

Definition at line 1308 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), intervalSetRoundingMode(), SCIP_ROUND_DOWNWARDS, SCIP_ROUND_UPWARDS, SCIPintervalAddInf(), SCIPintervalAddSup(), SCIPintervalMulInf(), SCIPintervalMulSup(), SCIPintervalSetEntire(), and SCIP_Interval::sup.

◆ SCIPintervalScalprodScalarsInf()

void SCIPintervalScalprodScalarsInf ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
int  length,
SCIP_INTERVAL operand1,
SCIP_Real operand2 
)

computes the scalar product of a vector of intervals and a vector of scalars and stores infimum of result in infimum of resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
lengthlength of vectors
operand1first vector as array of intervals
operand2second vector as array of scalars; can have +/-inf entries

Definition at line 1348 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), SCIP_ROUND_DOWNWARDS, SCIPintervalAddInf(), SCIPintervalMulScalarInf(), SCIPintervalSetEntire(), and SCIP_Interval::sup.

Referenced by SCIPintervalScalprodScalars().

◆ SCIPintervalScalprodScalarsSup()

void SCIPintervalScalprodScalarsSup ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
int  length,
SCIP_INTERVAL operand1,
SCIP_Real operand2 
)

computes the scalar product of a vector of intervals and a vector of scalars and stores supremum of result in supremum of resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
lengthlength of vectors
operand1first vector as array of intervals
operand2second vector as array of scalars; can have +/-inf entries

Definition at line 1374 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), SCIP_ROUND_UPWARDS, SCIPintervalAddSup(), SCIPintervalMulScalarSup(), SCIPintervalSetEntire(), and SCIP_Interval::sup.

Referenced by SCIPintervalScalprodScalars().

◆ SCIPintervalScalprodScalars()

void SCIPintervalScalprodScalars ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
int  length,
SCIP_INTERVAL operand1,
SCIP_Real operand2 
)

computes the scalar product of a vector of intervals and a vector of scalars and stores result in resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
lengthlength of vectors
operand1first vector as array of intervals
operand2second vector as array of scalars; can have +/-inf entries

Definition at line 1400 of file intervalarith.c.

References SCIP_Interval::inf, intervalGetRoundingMode(), intervalSetRoundingMode(), SCIP_ROUND_DOWNWARDS, SCIP_ROUND_UPWARDS, SCIPintervalScalprodScalarsInf(), SCIPintervalScalprodScalarsSup(), and SCIP_Interval::sup.

◆ SCIPintervalSquare()

void SCIPintervalSquare ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand 
)

squares operand and stores result in resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operandoperand of operation

Definition at line 1428 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), intervalSetRoundingMode(), MAX, NULL, SCIP_Real, SCIP_ROUND_DOWNWARDS, SCIP_ROUND_UPWARDS, SCIPintervalIsEmpty(), SCIP_Interval::sup, x, and y.

◆ SCIPintervalSquareRoot()

void SCIPintervalSquareRoot ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand 
)

stores (positive part of) square root of operand in resultant

Attention
we assume a correctly rounded sqrt(double) function when rounding is to nearest
Parameters
infinityvalue for infinity
resultantresultant interval of operation
operandoperand of operation

Definition at line 1500 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), NULL, SCIP_Real, SCIP_REAL_MAX, SCIP_REAL_MIN, SCIP_ROUND_NEAREST, SCIPintervalIsEmpty(), SCIPintervalSetEmpty(), SCIPnextafter(), and SCIP_Interval::sup.

Referenced by computeMaxForBilinearProp().

◆ SCIPintervalPower()

void SCIPintervalPower ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_INTERVAL  operand2 
)

stores operand1 to the power of operand2 in resultant

uses SCIPintervalPowerScalar if operand2 is a scalar, otherwise computes exp(op2*log(op1))

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation
operand2second operand of operation

Definition at line 1561 of file intervalarith.c.

References SCIP_Interval::inf, NULL, SCIPintervalExp(), SCIPintervalIsEmpty(), SCIPintervalLog(), SCIPintervalMul(), SCIPintervalPowerScalar(), SCIPintervalSet(), SCIPintervalSetBounds(), and SCIP_Interval::sup.

Referenced by SCIPintervalPowerScalarInverse().

◆ SCIPintervalPowerScalar()

void SCIPintervalPowerScalar ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_Real  operand2 
)

stores operand1 to the power of the scalar operand2 in resultant

Attention
we assume a correctly rounded pow(double) function when rounding is to nearest
Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation
operand2second operand of operation

Definition at line 1900 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), MAX, NULL, SCIP_Bool, SCIP_REAL_MAX, SCIP_REAL_MIN, SCIP_ROUND_NEAREST, SCIPintervalIsEmpty(), SCIPintervalPowerScalarIntegerInf(), SCIPintervalPowerScalarIntegerSup(), SCIPintervalSetEmpty(), SCIPnextafter(), and SCIP_Interval::sup.

Referenced by SCIP_DECL_EXPRINTEVAL(), and SCIPintervalPower().

◆ SCIPintervalPowerScalarScalar()

void SCIPintervalPowerScalarScalar ( SCIP_INTERVAL resultant,
SCIP_Real  operand1,
SCIP_Real  operand2 
)

stores bounds on the power of a scalar operand1 to a scalar operand2 in resultant

Both operands need to be finite numbers. Needs to have operand1 ≥ 0 or operand2 integer and needs to have operand2 ≥ 0 if operand1 = 0.

Attention
we assume a correctly rounded pow(double) function when rounding is to nearest
Parameters
resultantresultant of operation
operand1first operand of operation
operand2second operand of operation

Definition at line 1857 of file intervalarith.c.

References SCIP_Interval::inf, intervalGetRoundingMode(), NULL, SCIP_Real, SCIP_REAL_MAX, SCIP_REAL_MIN, SCIP_ROUND_NEAREST, SCIPintervalSet(), SCIPnextafter(), and SCIP_Interval::sup.

◆ SCIPintervalPowerScalarIntegerInf()

SCIP_Real SCIPintervalPowerScalarIntegerInf ( SCIP_Real  operand1,
int  operand2 
)

computes lower bound on power of a scalar operand1 to an integer operand2

Both operands need to be finite numbers. Needs to have operand1 ≥ 0 and need to have operand2 ≥ 0 if operand1 = 0.

Parameters
operand1first operand of operation
operand2second operand of operation

Definition at line 1607 of file intervalarith.c.

References intervalGetRoundingMode(), intervalSetRoundingMode(), SCIP_Real, SCIP_ROUND_DOWNWARDS, SCIPintervalPowerScalarIntegerSup(), and TRUE.

Referenced by SCIPintervalPowerScalar(), and SCIPintervalPowerScalarIntegerSup().

◆ SCIPintervalPowerScalarIntegerSup()

SCIP_Real SCIPintervalPowerScalarIntegerSup ( SCIP_Real  operand1,
int  operand2 
)

computes upper bound on power of a scalar operand1 to an integer operand2

Both operands need to be finite numbers. Needs to have operand1 ≥ 0 and needs to have operand2 ≥ 0 if operand1 = 0.

Parameters
operand1first operand of operation
operand2second operand of operation

Definition at line 1690 of file intervalarith.c.

References intervalGetRoundingMode(), intervalSetRoundingMode(), SCIP_Real, SCIP_ROUND_UPWARDS, SCIPintervalPowerScalarIntegerInf(), and TRUE.

Referenced by SCIPintervalPowerScalar(), and SCIPintervalPowerScalarIntegerInf().

◆ SCIPintervalPowerScalarInteger()

void SCIPintervalPowerScalarInteger ( SCIP_INTERVAL resultant,
SCIP_Real  operand1,
int  operand2 
)

computes bounds on power of a scalar operand1 to an integer operand2

Both operands need to be finite numbers. Needs to have operand1 ≥ 0 and needs to have operand2 ≥ 0 if operand1 = 0.

Parameters
resultantresultant interval of operation
operand1first operand of operation
operand2second operand of operation

Definition at line 1765 of file intervalarith.c.

References SCIP_Interval::inf, intervalGetRoundingMode(), intervalSetRoundingMode(), negate(), SCIP_Real, SCIP_REAL_MAX, SCIP_ROUND_UPWARDS, SCIPintervalPowerScalarInteger(), SCIPintervalReciprocal(), SCIPintervalSet(), SCIP_Interval::sup, and TRUE.

Referenced by SCIPintervalPowerScalarInteger().

◆ SCIPintervalPowerScalarInverse()

void SCIPintervalPowerScalarInverse ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  basedomain,
SCIP_Real  exponent,
SCIP_INTERVAL  image 
)

given an interval for the image of a power operation, computes an interval for the origin

That is, for \(y = x^p\) with the exponent \(p\) a given scalar and \(y\) = image a given interval, computes \(x \subseteq \text{basedomain}\) such that \(y \in x^p\) and such that for all \(z \in \text{basedomain} \setminus x: z^p \not \in y\).

Parameters
infinityvalue for infinity
resultantresultant interval of operation
basedomaindomain of base
exponentexponent
imageinterval image of power

Definition at line 2149 of file intervalarith.c.

References EPSISINT, SCIP_Interval::inf, MAX, NULL, SCIPintervalIntersect(), SCIPintervalPower(), SCIPintervalReciprocal(), SCIPintervalSetBounds(), SCIPintervalSetEmpty(), SCIPintervalUnify(), and SCIP_Interval::sup.

Referenced by SCIP_DECL_EXPRREVERSEPROP().

◆ SCIPintervalSignPowerScalar()

void SCIPintervalSignPowerScalar ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_Real  operand2 
)

stores operand1 to the signed power of the scalar positive operand2 in resultant

The signed power of x w.r.t. an exponent n ≥ 0 is given as \(\mathrm{sign}(x) |x|^n\).

Attention
we assume correctly rounded sqrt(double) and pow(double) functions when rounding is to nearest
Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation
operand2second operand of operation

Definition at line 2230 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), intervalSetRoundingMode(), negate(), NULL, SCIP_REAL_MAX, SCIP_REAL_MIN, SCIP_ROUND_DOWNWARDS, SCIP_ROUND_NEAREST, SCIP_ROUND_UPWARDS, SCIPintervalIsEmpty(), SCIPnextafter(), and SCIP_Interval::sup.

Referenced by SCIP_DECL_EXPRINTEVAL(), and SCIP_DECL_EXPRREVERSEPROP().

◆ SCIPintervalReciprocal()

void SCIPintervalReciprocal ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand 
)

computes the reciprocal of an interval

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operandoperand of operation

Definition at line 2402 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), intervalSetRoundingMode(), NULL, SCIP_ROUND_DOWNWARDS, SCIP_ROUND_UPWARDS, SCIPintervalIsEmpty(), and SCIP_Interval::sup.

Referenced by SCIP_DECL_EXPRREVERSEPROP(), SCIPintervalPowerScalarInteger(), and SCIPintervalPowerScalarInverse().

◆ SCIPintervalExp()

void SCIPintervalExp ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand 
)

stores exponential of operand in resultant

Attention
we assume a correctly rounded exp(double) function when rounding is to nearest
Parameters
infinityvalue for infinity
resultantresultant interval of operation
operandoperand of operation

Definition at line 2475 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), NULL, SCIP_Real, SCIP_REAL_MAX, SCIP_REAL_MIN, SCIP_ROUND_NEAREST, SCIPintervalIsEmpty(), SCIPnextafter(), and SCIP_Interval::sup.

Referenced by SCIP_DECL_EXPRINTEVAL(), SCIP_DECL_EXPRREVERSEPROP(), and SCIPintervalPower().

◆ SCIPintervalLog()

void SCIPintervalLog ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand 
)

stores natural logarithm of operand in resultant

Attention
we assume a correctly rounded log(double) function when rounding is to nearest
Parameters
infinityvalue for infinity
resultantresultant interval of operation
operandoperand of operation

Definition at line 2559 of file intervalarith.c.

References SCIP_Interval::inf, infinity, intervalGetRoundingMode(), NULL, SCIP_Real, SCIP_REAL_MAX, SCIP_REAL_MIN, SCIP_ROUND_NEAREST, SCIPintervalIsEmpty(), SCIPintervalSetEmpty(), SCIPnextafter(), and SCIP_Interval::sup.

Referenced by SCIP_DECL_EXPRINTEVAL(), SCIP_DECL_EXPRREVERSEPROP(), and SCIPintervalPower().

◆ SCIPintervalMin()

void SCIPintervalMin ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_INTERVAL  operand2 
)

stores minimum of operands in resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation
operand2second operand of operation

Definition at line 2627 of file intervalarith.c.

References SCIP_Interval::inf, NULL, SCIPintervalIsEmpty(), and SCIP_Interval::sup.

◆ SCIPintervalMax()

void SCIPintervalMax ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand1,
SCIP_INTERVAL  operand2 
)

stores maximum of operands in resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operand1first operand of operation
operand2second operand of operation

Definition at line 2643 of file intervalarith.c.

References SCIP_Interval::inf, MAX, NULL, SCIPintervalIsEmpty(), and SCIP_Interval::sup.

◆ SCIPintervalAbs()

void SCIPintervalAbs ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand 
)

stores absolute value of operand in resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operandoperand of operation

Definition at line 2659 of file intervalarith.c.

References SCIP_Interval::inf, MAX, NULL, SCIPintervalIsEmpty(), and SCIP_Interval::sup.

Referenced by SCIP_DECL_EXPRINTEVAL().

◆ SCIPintervalSin()

void SCIPintervalSin ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand 
)

stores sine value of operand in resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operandoperand of operation

Definition at line 2697 of file intervalarith.c.

References SCIP_Interval::inf, SCIP_Real, SCIPintervalAdd(), SCIPintervalCos(), SCIPintervalMulScalar(), SCIPintervalSetBounds(), SCIPintervalSub(), and SCIP_Interval::sup.

Referenced by SCIP_DECL_EXPRINTEVAL().

◆ SCIPintervalCos()

void SCIPintervalCos ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand 
)

stores cosine value of operand in resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operandoperand of operation

Definition at line 2739 of file intervalarith.c.

References SCIP_Interval::inf, MAX, NULL, SCIP_Real, SCIP_REAL_MAX, SCIP_REAL_MIN, SCIP_ROUND_NEAREST, SCIPdebugMessage, SCIPintervalGetRoundingMode(), SCIPintervalIsEmpty(), SCIPintervalMulScalar(), SCIPintervalSetBounds(), SCIPintervalSetRoundingMode(), SCIPintervalSetRoundingModeDownwards(), SCIPintervalSub(), SCIPnextafter(), and SCIP_Interval::sup.

Referenced by SCIP_DECL_EXPRINTEVAL(), and SCIPintervalSin().

◆ SCIPintervalSign()

void SCIPintervalSign ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand 
)

stores sign of operand in resultant

Parameters
infinityvalue for infinity
resultantresultant interval of operation
operandoperand of operation

Definition at line 2866 of file intervalarith.c.

References SCIP_Interval::inf, NULL, SCIPintervalIsEmpty(), and SCIP_Interval::sup.

◆ SCIPintervalEntropy()

void SCIPintervalEntropy ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  operand 
)

◆ SCIPintervalQuadUpperBound()

SCIP_Real SCIPintervalQuadUpperBound ( SCIP_Real  infinity,
SCIP_Real  a,
SCIP_INTERVAL  b_,
SCIP_INTERVAL  x 
)

computes exact upper bound on \( a x^2 + b x \) for x in [xlb, xub], b an interval, and a scalar

Uses Algorithm 2.2 from Domes and Neumaier: Constraint propagation on quadratic constraints (2008).

Parameters
infinityvalue for infinity
acoefficient of x^2
b_coefficient of x
xrange of x

Definition at line 2992 of file intervalarith.c.

References b, SCIP_Interval::inf, infinity, intervalGetRoundingMode(), intervalSetRoundingMode(), MAX, negate(), SCIP_Real, SCIP_ROUND_UPWARDS, SCIPintervalIsEmpty(), SCIPintervalQuadUpperBound(), SCIP_Interval::sup, and x.

Referenced by SCIP_DECL_NLHDLRINTEVAL(), SCIPintervalQuad(), SCIPintervalQuadUpperBound(), and SCIPintervalSolveBivariateQuadExpressionAllScalar().

◆ SCIPintervalQuad()

void SCIPintervalQuad ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_Real  sqrcoeff,
SCIP_INTERVAL  lincoeff,
SCIP_INTERVAL  xrng 
)

stores range of quadratic term in resultant

given scalar a and intervals b and x, computes interval for \( a x^2 + b x \)

Parameters
infinityvalue for infinity
resultantresultant interval of operation
sqrcoeffcoefficient of x^2
lincoeffcoefficient of x
xrngrange of x

Definition at line 3087 of file intervalarith.c.

References SCIP_Interval::inf, SCIP_Real, SCIPintervalIsEmpty(), SCIPintervalMul(), SCIPintervalQuadUpperBound(), SCIPintervalSetEmpty(), and SCIP_Interval::sup.

Referenced by SCIPintervalQuadBivar(), and SCIPintervalSolveBivariateQuadExpressionAllScalar().

◆ SCIPintervalSolveUnivariateQuadExpressionPositive()

void SCIPintervalSolveUnivariateQuadExpressionPositive ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  sqrcoeff,
SCIP_INTERVAL  lincoeff,
SCIP_INTERVAL  rhs,
SCIP_INTERVAL  xbnds 
)

computes interval with positive solutions of a quadratic equation with interval coefficients

Given intervals a, b, and c, this function computes an interval that contains all positive solutions of \( a x^2 + b x \in c\) within xbnds.

Parameters
infinityvalue for infinity
resultantresultant interval of operation
sqrcoeffcoefficient of x^2
lincoeffcoefficient of x
rhsright hand side of equation
xbndsbounds on x

Definition at line 3122 of file intervalarith.c.

References SCIP_Interval::inf, infinity, NULL, SCIPdebugMessage, SCIPdebugPrintf, SCIPintervalIntersect(), SCIPintervalSetEmpty(), SCIPintervalSolveUnivariateQuadExpressionPositiveAllScalar(), and SCIP_Interval::sup.

Referenced by SCIPintervalSolveBivariateQuadExpressionAllScalar(), SCIPintervalSolveUnivariateQuadExpression(), and SCIPintervalSolveUnivariateQuadExpressionNegative().

◆ SCIPintervalSolveUnivariateQuadExpressionNegative()

void SCIPintervalSolveUnivariateQuadExpressionNegative ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  sqrcoeff,
SCIP_INTERVAL  lincoeff,
SCIP_INTERVAL  rhs,
SCIP_INTERVAL  xbnds 
)

computes interval with negative solutions of a quadratic equation with interval coefficients

Given intervals a, b, and c, this function computes an interval that contains all negative solutions of \( a x^2 + b x \in c\) within xbnds.

Parameters
infinityvalue for infinity
resultantresultant interval of operation
sqrcoeffcoefficient of x^2
lincoeffcoefficient of x
rhsright hand side of equation
xbndsbounds on x

Definition at line 3169 of file intervalarith.c.

References SCIP_Interval::inf, SCIP_Real, SCIPintervalSolveUnivariateQuadExpressionPositive(), and SCIP_Interval::sup.

Referenced by SCIPintervalSolveBivariateQuadExpressionAllScalar(), and SCIPintervalSolveUnivariateQuadExpression().

◆ SCIPintervalSolveUnivariateQuadExpressionPositiveAllScalar()

void SCIPintervalSolveUnivariateQuadExpressionPositiveAllScalar ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_Real  sqrcoeff,
SCIP_Real  lincoeff,
SCIP_Real  rhs,
SCIP_INTERVAL  xbnds 
)

computes positive solutions of a quadratic equation with scalar coefficients

Givens scalar a, b, and c, this function computes an interval that contains all positive solutions of \( a x^2 + b x \geq c\) within xbnds. Implements Algorithm 3.2 from Domes and Neumaier: Constraint propagation on quadratic constraints (2008).

Parameters
infinityvalue for infinity
resultantresultant interval of operation
sqrcoeffcoefficient of x^2
lincoeffcoefficient of x
rhsright hand side of equation
xbndsbounds on x

Definition at line 3205 of file intervalarith.c.

References b, SCIP_Interval::inf, infinity, intervalGetRoundingMode(), intervalSetRoundingMode(), MAX, negate(), NULL, SCIP_Real, SCIP_REAL_MAX, SCIP_REAL_MIN, SCIP_ROUND_DOWNWARDS, SCIP_ROUND_NEAREST, SCIP_ROUND_UPWARDS, SCIPintervalIntersect(), SCIPintervalSetEmpty(), SCIPnextafter(), and SCIP_Interval::sup.

Referenced by computeRoot(), and SCIPintervalSolveUnivariateQuadExpressionPositive().

◆ SCIPintervalSolveUnivariateQuadExpression()

void SCIPintervalSolveUnivariateQuadExpression ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_INTERVAL  sqrcoeff,
SCIP_INTERVAL  lincoeff,
SCIP_INTERVAL  rhs,
SCIP_INTERVAL  xbnds 
)

solves a quadratic equation with interval coefficients

Given intervals a, b and c, this function computes an interval that contains all solutions of \( a x^2 + b x \in c\) within xbnds.

Parameters
infinityvalue for infinity
resultantresultant interval of operation
sqrcoeffcoefficient of x^2
lincoeffcoefficient of x
rhsright hand side of equation
xbndsbounds on x

Definition at line 3409 of file intervalarith.c.

References SCIP_Interval::inf, MAX, NULL, SCIPdebugMessage, SCIPintervalDiv(), SCIPintervalGetInf(), SCIPintervalGetSup(), SCIPintervalIntersect(), SCIPintervalIsEmpty(), SCIPintervalSetEmpty(), SCIPintervalSolveUnivariateQuadExpressionNegative(), SCIPintervalSolveUnivariateQuadExpressionPositive(), SCIPintervalUnify(), and SCIP_Interval::sup.

Referenced by getFeasiblePointsBilinear(), propagateBoundsQuadExpr(), SCIP_DECL_EXPRREVERSEPROP(), and SCIPintervalSolveBivariateQuadExpressionAllScalar().

◆ SCIPintervalQuadBivar()

void SCIPintervalQuadBivar ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_Real  ax,
SCIP_Real  ay,
SCIP_Real  axy,
SCIP_Real  bx,
SCIP_Real  by,
SCIP_INTERVAL  xbnds,
SCIP_INTERVAL  ybnds 
)

stores range of bivariate quadratic term in resultant

Given scalars \(a_x\), \(a_y\), \(a_{xy}\), \(b_x\), and \(b_y\) and intervals for \(x\) and \(y\), computes interval for \( a_x x^2 + a_y y^2 + a_{xy} x y + b_x x + b_y y \).

Attention
The operations are not applied rounding-safe here!
Parameters
infinityvalue for infinity in interval arithmetics
resultantbuffer where to store result of operation
axsquare coefficient of x
aysquare coefficient of y
axybilinear coefficients
bxlinear coefficient of x
bylinear coefficient of y
xbndsbounds on x
ybndsbounds on y

Definition at line 3475 of file intervalarith.c.

References SCIP_Interval::inf, infinity, MAX, NULL, REALABS, SCIP_Real, SCIPdebugMessage, SCIPintervalAdd(), SCIPintervalAddScalar(), SCIPintervalQuad(), SCIPintervalSet(), SCIPintervalSetBounds(), SCIP_Interval::sup, x, and y.

◆ SCIPintervalSolveBivariateQuadExpressionAllScalar()

void SCIPintervalSolveBivariateQuadExpressionAllScalar ( SCIP_Real  infinity,
SCIP_INTERVAL resultant,
SCIP_Real  ax,
SCIP_Real  ay,
SCIP_Real  axy,
SCIP_Real  bx,
SCIP_Real  by,
SCIP_INTERVAL  rhs,
SCIP_INTERVAL  xbnds,
SCIP_INTERVAL  ybnds 
)

solves a bivariate quadratic equation for the first variable

Given scalars \(a_x\), \(a_y\), \(a_{xy}\), \(b_x\) and \(b_y\), and intervals for \(x\), \(y\), and rhs, computes \( \{ x \in \mathbf{x} : \exists y \in \mathbf{y} : a_x x^2 + a_y y^2 + a_{xy} x y + b_x x + b_y y \in \mathbf{\mbox{rhs}} \} \).

Attention
the operations are not applied rounding-safe here
Parameters
infinityvalue for infinity in interval arithmetics
resultantbuffer where to store result of operation
axsquare coefficient of x
aysquare coefficient of y
axybilinear coefficients
bxlinear coefficient of x
bylinear coefficient of y
rhsright-hand-side of equation
xbndsbounds on x
ybndsbounds on y

Definition at line 3736 of file intervalarith.c.

References b, CALCB, CALCR, EPSGE, EPSGT, EPSLE, EPSLT, EPSN, EPSZ, SCIP_Interval::inf, infinity, MAX, NULL, REALABS, SCIP_Real, SCIPintervalAddScalar(), SCIPintervalIntersect(), SCIPintervalIsEmpty(), SCIPintervalMulScalar(), SCIPintervalQuad(), SCIPintervalQuadUpperBound(), SCIPintervalSet(), SCIPintervalSetBounds(), SCIPintervalSetEmpty(), SCIPintervalSolveBivariateQuadExpressionAllScalar(), SCIPintervalSolveUnivariateQuadExpression(), SCIPintervalSolveUnivariateQuadExpressionNegative(), SCIPintervalSolveUnivariateQuadExpressionPositive(), SCIPintervalSub(), SCIPintervalUnify(), and SCIP_Interval::sup.

Referenced by SCIPintervalSolveBivariateQuadExpressionAllScalar().

◆ SCIPintervalPropagateWeightedSum()

int SCIPintervalPropagateWeightedSum ( SCIP_Real  infinity,
int  noperands,
SCIP_INTERVAL operands,
SCIP_Real weights,
SCIP_Real  constant,
SCIP_INTERVAL  rhs,
SCIP_INTERVAL resultants,
SCIP_Bool infeasible 
)

propagates a weighted sum of intervals in a given interval

Given \(\text{constant} + \sum_i \text{weights}_i \text{operands}_i \in \text{rhs}\), computes possibly tighter interval for each term.

Attention
Valid values are returned in resultants only if any tightening has been found and no empty interval, that is, function returns with non-zero and *infeasible = FALSE.
Returns
Number of terms for which resulting interval is smaller than operand interval.
Parameters
infinityvalue for infinity in interval arithmetics
noperandsnumber of operands (intervals) to propagate
operandsintervals to propagate
weightsweights of intervals in sum
constantconstant in sum
rhsright-hand-side interval
resultantsarray to store propagated intervals, if any reduction is found at all (check return code and *infeasible)
infeasiblebuffer to store if propagation produced empty interval

Definition at line 4622 of file intervalarith.c.

References BMScopyMemoryArray, FALSE, SCIP_Interval::inf, NULL, SCIP_Real, SCIPdebugMessage, SCIPdebugPrintf, SCIPintervalDivScalar(), SCIPintervalGetRoundingMode(), SCIPintervalIntersect(), SCIPintervalIsEmpty(), SCIPintervalIsEntire(), SCIPintervalMulScalar(), SCIPintervalNegateReal(), SCIPintervalSetEntire(), SCIPintervalSetRoundingMode(), SCIPintervalSetRoundingModeDownwards(), SCIP_Interval::sup, and TRUE.

Referenced by reversePropagateLinearExpr(), and SCIP_DECL_EXPRREVERSEPROP().