SCIP Doxygen Documentation
Loading...
Searching...
No Matches

Detailed Description

interval arithmetics for provable bounds

Author
Tobias Achterberg
Stefan Vigerske
Kati Wolter

Definition in file intervalarith.c.

#include <stdlib.h>
#include <assert.h>
#include <math.h>
#include "scip/def.h"
#include "scip/intervalarith.h"
#include "scip/pub_message.h"
#include "scip/misc.h"

Go to the source code of this file.

Macros

#define SCIP_ROUND_DOWNWARDS   0
#define SCIP_ROUND_UPWARDS   1
#define SCIP_ROUND_NEAREST   2
#define SCIP_ROUND_ZERO   3
#define CALCB(y)
#define CALCR(c, y)

Functions

SCIP_Bool SCIPintervalHasRoundingControl (void)
static void intervalSetRoundingMode (SCIP_ROUNDMODE roundmode)
static SCIP_ROUNDMODE intervalGetRoundingMode (void)
void SCIPintervalSetRoundingMode (SCIP_ROUNDMODE roundmode)
SCIP_ROUNDMODE SCIPintervalGetRoundingMode (void)
static SCIP_Real negate (SCIP_Real x)
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)
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 SCIPintervalPowerScalarScalar (SCIP_INTERVAL *resultant, SCIP_Real operand1, SCIP_Real operand2)
void SCIPintervalPowerScalar (SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real 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)

Variables

static const double pi_d_l = (3373259426.0 + 273688.0 / (1<<21)) / (1<<30)
static const double pi_d_u = (3373259426.0 + 273689.0 / (1<<21)) / (1<<30)

Macro Definition Documentation

◆ SCIP_ROUND_DOWNWARDS

◆ SCIP_ROUND_UPWARDS

◆ SCIP_ROUND_NEAREST

◆ SCIP_ROUND_ZERO

#define SCIP_ROUND_ZERO   3

round always towards zero

Definition at line 236 of file intervalarith.c.

Referenced by SCIPintervalSetRoundingModeTowardsZero().

◆ CALCB

#define CALCB ( y)
Value:
((bx + axy * (y)) / (2.0 * sqrtax))
SCIP_VAR ** y

Referenced by SCIPintervalSolveBivariateQuadExpressionAllScalar().

◆ CALCR

#define CALCR ( c,
y )
Value:
(rcoef_const + (c) + (rcoef_y + rcoef_yy * (y)) * (y))
int c

Referenced by SCIPintervalSolveBivariateQuadExpressionAllScalar().

Function Documentation

◆ intervalSetRoundingMode()

◆ intervalGetRoundingMode()

◆ negate()

SCIP_Real negate ( SCIP_Real x)
static

gets the negation of a double

Fallback implementation that calls the negation method from misc.o. Having the implementation in a different object file will hopefully prevent it from being "optimized away".

Parameters
xnumber that should be negated

Definition at line 333 of file intervalarith.c.

References SCIP_Real, SCIPnegateReal(), and x.

Referenced by aggregation(), SCIPintervalNegateReal(), SCIPintervalPowerScalarInteger(), SCIPintervalQuadUpperBound(), SCIPintervalSignPowerScalar(), and SCIPintervalSolveUnivariateQuadExpressionPositiveAllScalar().

Variable Documentation

◆ pi_d_l

const double pi_d_l = (3373259426.0 + 273688.0 / (1<<21)) / (1<<30)
static

Definition at line 2692 of file intervalarith.c.

Referenced by SCIPintervalCos(), and SCIPintervalSin().

◆ pi_d_u

const double pi_d_u = (3373259426.0 + 273689.0 / (1<<21)) / (1<<30)
static

Definition at line 2693 of file intervalarith.c.

Referenced by SCIPintervalCos(), and SCIPintervalSin().