)
74#ifdef SCIP_ROUNDING_FE 83#define SCIP_ROUND_DOWNWARDS FE_DOWNWARD 84#define SCIP_ROUND_UPWARDS FE_UPWARD 85#define SCIP_ROUND_NEAREST FE_TONEAREST 86#define SCIP_ROUND_ZERO FE_TOWARDZERO 103 if( fesetround(roundmode) != 0 )
109(void) fesetround(roundmode);
126#ifdef SCIP_ROUNDING_FP 135#define SCIP_ROUND_DOWNWARDS FP_RND_RM 136#define SCIP_ROUND_UPWARDS FP_RND_RP 137#define SCIP_ROUND_NEAREST FP_RND_RN 138#define SCIP_ROUND_ZERO FP_RND_RZ 155 if( write_rnd(roundmode) != 0 )
161(void) write_rnd(roundmode);
178#ifdef SCIP_ROUNDING_MS 187#define SCIP_ROUND_DOWNWARDS RC_DOWN 188#define SCIP_ROUND_UPWARDS RC_UP 189#define SCIP_ROUND_NEAREST RC_NEAR 190#define SCIP_ROUND_ZERO RC_CHOP 207 if( (_controlfp(roundmode, _MCW_RC) & _MCW_RC) != roundmode )
213(void) _controlfp(roundmode, _MCW_RC);
223 return_controlfp(0, 0) & _MCW_RC;
233#define SCIP_ROUND_DOWNWARDS 0 234#define SCIP_ROUND_UPWARDS 1 235#define SCIP_ROUND_NEAREST 2 236#define SCIP_ROUND_ZERO 3 252 SCIPerrorMessage(
"setting rounding mode not available - interval arithmetic is invalid!\n");
283#if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) 297__asm
volatile(
"fldl %1; fchs; fstpl %0":
"=m"(
x) :
"m"(
x));
304#elif defined(_MSC_VER) && (defined(__INTEL_COMPILER) || !defined(_M_X64)) 393#undef SCIPintervalGetInf 394#undef SCIPintervalGetSup 395#undef SCIPintervalSet 396#undef SCIPintervalSetBounds 397#undef SCIPintervalSetEmpty 398#undef SCIPintervalIsEmpty 399#undef SCIPintervalSetEntire 400#undef SCIPintervalIsEntire 401#undef SCIPintervalIsPositiveInfinity 402#undef SCIPintervalIsNegativeInfinity 409 returninterval.
inf;
417 returninterval.
sup;
426assert(resultant !=
NULL);
428resultant->
inf= value;
429resultant->
sup= value;
439assert(resultant !=
NULL);
442resultant->
inf= inf;
443resultant->
sup= sup;
451assert(resultant !=
NULL);
453resultant->
inf= 1.0;
454resultant->
sup= -1.0;
466 returnoperand.
sup< operand.
inf;
475assert(resultant !=
NULL);
516 if( operand1.
inf> operand1.
sup)
520 if( operand2.
inf> operand2.
sup)
533 return(operand1.
sup< operand2.
inf) || (operand2.
sup< operand1.
inf);
547 if( operand1.
sup< operand2.
inf)
550 if( operand1.
inf> operand2.
sup)
563assert(resultant !=
NULL);
585assert(resultant !=
NULL);
588 if( operand1.
sup< operand2.
inf)
596 else if( operand1.
inf> operand2.
sup)
615assert(resultant !=
NULL);
617 if( operand1.
inf> operand1.
sup)
620*resultant = operand2;
624 if( operand2.
inf> operand2.
sup)
627*resultant = operand1;
644assert(resultant !=
NULL);
658resultant->
inf= operand1.
inf+ operand2.
inf;
671assert(resultant !=
NULL);
685resultant->
sup= operand1.
sup+ operand2.
sup;
699assert(resultant !=
NULL);
726assert(resultant !=
NULL);
744resultant->
inf= operand1.
inf+ operand2;
760resultant->
sup= operand1.
sup+ operand2;
782 for( i = 0; i < length; ++i )
788 for( i = 0; i < length; ++i )
806assert(resultant !=
NULL);
824resultant->
inf= operand1.
inf- operand2.
sup;
838resultant->
sup= operand1.
sup- operand2.
inf;
863assert(resultant !=
NULL);
907cand1 = operand1.
inf* operand2.
inf;
908cand2 = operand1.
inf* operand2.
sup;
909cand3 = operand1.
sup* operand2.
inf;
910cand4 = operand1.
sup* operand2.
sup;
911resultant->
inf=
MIN(
MIN(cand1, cand2),
MIN(cand3, cand4));
923assert(resultant !=
NULL);
967cand1 = operand1.
inf* operand2.
inf;
968cand2 = operand1.
inf* operand2.
sup;
969cand3 = operand1.
sup* operand2.
inf;
970cand4 = operand1.
sup* operand2.
sup;
971resultant->
sup=
MAX(
MAX(cand1, cand2),
MAX(cand3, cand4));
985assert(resultant !=
NULL);
1011assert(resultant !=
NULL);
1017 if( operand1.
inf> 0 )
1019 else if( operand1.
inf< 0 )
1022resultant->
inf= 0.0;
1027 if( operand1.
sup> 0 )
1029 else if( operand1.
sup< 0 )
1032resultant->
inf= 0.0;
1034 else if( operand2 == 0.0 )
1036resultant->
inf= 0.0;
1038 else if( operand2 > 0.0 )
1045resultant->
inf= operand1.
inf* operand2;
1054resultant->
inf= operand1.
sup* operand2;
1067assert(resultant !=
NULL);
1073 if( operand1.
sup> 0 )
1075 else if( operand1.
sup< 0 )
1078resultant->
sup= 0.0;
1083 if( operand1.
inf> 0 )
1085 else if( operand1.
inf< 0 )
1088resultant->
sup= 0.0;
1090 else if( operand2 == 0.0 )
1092resultant->
sup= 0.0;
1094 else if( operand2 > 0.0 )
1101resultant->
sup= operand1.
sup* operand2;
1110resultant->
sup= operand1.
inf* operand2;
1124assert(resultant !=
NULL);
1127 if( operand2 == 1.0 )
1129*resultant = operand1;
1133 if( operand2 == -1.0 )
1135resultant->
inf= -operand1.
sup;
1136resultant->
sup= -operand1.
inf;
1164assert(resultant !=
NULL);
1168 if( operand2.
inf<= 0.0 && operand2.
sup>= 0.0 )
1175 if( operand1.
inf== 0.0 && operand1.
sup== 0.0 )
1191intmed.
inf= 1.0 / operand2.
sup;
1200intmed.
sup= 1.0 / operand2.
inf;
1217assert(resultant !=
NULL);
1225resultant->
inf= 0.0;
1226resultant->
sup= 0.0;
1228 else if( operand2 > 0.0 )
1240resultant->
inf= operand1.
inf/ operand2;
1253resultant->
sup= operand1.
sup/ operand2;
1256 else if( operand2 < 0.0 )
1268resultant->
inf= operand1.
sup/ operand2;
1281resultant->
sup= operand1.
inf/ operand2;
1286 if( operand1.
inf>= 0 )
1292 else if( operand1.
sup<= 0 )
1325resultant->
inf= 0.0;
1326resultant->
sup= 0.0;
1330 for( i = 0; i < length && resultant->
inf> -
infinity; ++i )
1336assert(resultant->
sup== 0.0);
1340 for( i = 0; i < length && resultant->
sup<
infinity; ++i )
1364resultant->
inf= 0.0;
1368 for( i = 0; i < length && resultant->
inf> -
infinity; ++i )
1390resultant->
sup= 0.0;
1394 for( i = 0; i < length && resultant->
sup<
infinity; ++i )
1415resultant->
inf= 0.0;
1416resultant->
sup= 0.0;
1421assert(resultant->
sup== 0.0);
1439assert(resultant !=
NULL);
1444 if( operand.
sup<= 0.0 )
1451resultant->
inf= operand.
sup* operand.
sup;
1459resultant->
sup= operand.
inf* operand.
inf;
1462 else if( operand.
inf>= 0.0 )
1469resultant->
inf= operand.
inf* operand.
inf;
1477resultant->
sup= operand.
sup* operand.
sup;
1482resultant->
inf= 0.0;
1491 x= operand.
inf* operand.
inf;
1492 y= operand.
sup* operand.
sup;
1509assert(resultant !=
NULL);
1512 if( operand.
sup< 0.0 )
1518 if( operand.
inf== operand.
sup)
1530tmp = sqrt(operand.
inf);
1538 if( operand.
inf<= 0.0 )
1539resultant->
inf= 0.0;
1571assert(resultant !=
NULL);
1575 if( operand2.
inf== operand2.
sup)
1584 if( operand1.
sup== 0.0 )
1586 if( operand2.
inf<= 0.0 && operand2.
sup>= 0.0 )
1618assert(operand1 >= 0.0);
1620 if( operand1 == 0.0 )
1622assert(operand2 >= 0);
1623 if( operand2 == 0 )
1630 if( operand1 == 1.0 || operand2 == 0 )
1637assert(result != 0.0);
1641result = 1.0 / result;
1652n = (
unsignedint)operand2;
1671result = result * z;
1701assert(operand1 >= 0.0);
1703 if( operand1 == 0.0 )
1705assert(operand2 >= 0);
1706 if( operand2 == 0 )
1713 if( operand1 == 1.0 || operand2 == 0 )
1720assert(result != 0.0);
1724result = 1.0 / result;
1735n = (
unsignedint)operand2;
1746result = result * z;
1776assert(operand1 >= 0.0);
1778 if( operand1 == 0.0 )
1780assert(operand2 >= 0);
1781 if( operand2 == 0 )
1794 if( operand1 == 1.0 || operand2 == 0 )
1804assert(resultant->
inf> 0.0 || resultant->
sup< 0.0);
1821n = (
unsignedint)operand2;
1834result_sup = result_sup * z_sup;
1842z_sup = z_sup * z_sup;
1848resultant->
inf= result_inf;
1849resultant->
sup= result_sup;
1850assert(resultant->
inf<= resultant->
sup);
1868assert(resultant !=
NULL);
1870 if( operand1 == 0.0 )
1872assert(operand2 >= 0);
1873 if( operand2 == 0 )
1886 if( operand1 == 1.0 || operand2 == 0 )
1893result = pow(operand1, operand2);
1912assert(resultant !=
NULL);
1921 if( operand1.
inf< 0.0 )
1924resultant->
inf= 0.0;
1925 if( operand1.
sup> 0.0 )
1928resultant->
sup= 0.0;
1932 if( operand2 == 0.0 )
1934 if( operand1.
inf== 0.0 && operand1.
sup== 0.0 )
1936resultant->
inf= 0.0;
1937resultant->
sup= 0.0;
1939 else if( operand1.
inf<= 0.0 || operand1.
sup>= 0.0 )
1941resultant->
inf= 0.0;
1942resultant->
sup= 1.0;
1946resultant->
inf= 1.0;
1947resultant->
sup= 1.0;
1952 if( operand2 == 1.0 )
1955*resultant = operand1;
1959op2isint = (ceil(operand2) == operand2);
1961 if( !op2isint && operand1.
inf< 0.0 )
1963operand1.
inf= 0.0;
1964 if( operand1.
sup< operand1.
inf)
1971 if( operand1.
inf>= 0.0 )
1973 if( operand2 >= 0.0 )
1978 else if( operand1.
inf> 0.0 )
1984resultant->
inf= 0.0;
1988 else if( operand1.
sup> 0.0 )
1994resultant->
sup= 0.0;
1999resultant->
inf= 0.0;
2000 else if( operand1.
sup== 0.0 )
2004 if( ceil(operand2/2) == operand2/2 )
2016 if( operand1.
inf== 0.0 )
2025 else if( operand1.
sup<= 0.0 )
2028 if( operand2 >= 0.0 && ceil(operand2/2) == operand2/2 )
2042 else if( operand2 <= 0.0 && ceil(operand2/2) != operand2/2 )
2047resultant->
inf= 0.0;
2048 else if( operand1.
sup== 0.0 )
2056resultant->
sup= 0.0;
2057 else if( operand1.
inf== 0.0 )
2063 else if( operand2 >= 0.0 )
2080resultant->
inf= 0.0;
2081 else if( operand1.
inf== 0.0 )
2088resultant->
sup= 0.0;
2089 else if( operand1.
sup== 0.0 )
2100 if( operand2 >= 0.0 && operand2/2 == ceil(operand2/2) )
2103resultant->
inf= 0.0;
2109 else if( operand2 <= 0.0 && ceil(operand2/2) == operand2/2 )
2114resultant->
inf= 0.0;
2118 else if( operand2 >= 0.0 )
2163assert(resultant !=
NULL);
2164assert(image.
inf<= image.
sup);
2165assert(basedomain.
inf<= basedomain.
sup);
2167 if( exponent == 0.0 )
2170 if( image.
inf<= 1.0 && image.
sup>= 1.0 )
2173*resultant = basedomain;
2175 else if( image.
inf<= 0.0 && image.
sup>= 0.0 )
2199 if( image.
sup>= 0.0 )
2203 if( basedomain.
inf<= -resultant->
inf&&
EPSISINT(exponent, 0.0) && (
int)exponent % 2 == 0 )
2205 if( basedomain.
sup< resultant->
inf)
2217 if( image.
inf< 0.0 && basedomain.
inf< 0.0 &&
EPSISINT(exponent, 0.0) && ((
int)exponent % 2 != 0) )
2241assert(resultant !=
NULL);
2244assert(operand2 >= 0.0);
2252 if( operand1.
inf< 0.0 )
2255resultant->
inf= 0.0;
2256 if( operand1.
sup> 0.0 )
2259resultant->
sup= 0.0;
2263 if( operand2 == 0.0 )
2266 if( operand1.
inf< 0.0 )
2267resultant->
inf= -1.0;
2268 else if( operand1.
inf== 0.0 )
2269resultant->
inf= 0.0;
2271resultant->
inf= 1.0;
2273 if( operand1.
sup< 0.0 )
2274resultant->
sup= -1.0;
2275 else if( operand1.
sup== 0.0 )
2276resultant->
sup= 0.0;
2278resultant->
sup= 1.0;
2283 if( operand2 == 1.0 )
2285*resultant = operand1;
2291 if( operand2 == 2.0 )
2301 else if( operand1.
inf> 0.0 )
2304resultant->
inf= operand1.
inf* operand1.
inf;
2321 else if( operand1.
sup> 0.0 )
2324resultant->
sup= operand1.
sup* operand1.
sup;
2332assert(resultant->
inf<= resultant->
sup);
2334 else if( operand2 == 0.5 )
2340 else if( operand1.
inf>= 0.0 )
2355 else if( operand1.
sup> 0.0 )
2365assert(resultant->
inf<= resultant->
sup);
2373 else if( operand1.
inf> 0.0 )
2388 else if( operand1.
sup> 0.0 )
2413assert(resultant !=
NULL);
2416 if( operand.
inf== 0.0 && operand.
sup== 0.0 )
2425 if( operand.
inf>= 0.0 )
2428resultant->
inf= 0.0;
2432resultant->
inf= 1.0 / operand.
sup;
2436resultant->
sup= 0.0;
2437 else if( operand.
inf== 0.0 )
2442resultant->
sup= 1.0 / operand.
inf;
2447 else if( operand.
sup<= 0.0 )
2450resultant->
inf= 0.0;
2451 else if( operand.
sup== 0.0 )
2456resultant->
inf= 1.0 / operand.
sup;
2464resultant->
sup= 1.0 / operand.
inf;
2484assert(resultant !=
NULL);
2489resultant->
inf= 0.0;
2490resultant->
sup= 0.0;
2501 if( operand.
inf== operand.
sup)
2503 if( operand.
inf== 0.0 )
2505resultant->
inf= 1.0;
2506resultant->
sup= 1.0;
2513tmp = exp(operand.
inf);
2515assert(resultant->
inf>= 0.0);
2524resultant->
inf= 0.0;
2526 else if( operand.
inf== 0.0 )
2528resultant->
inf= 1.0;
2535tmp = exp(operand.
inf);
2546 else if( operand.
sup== 0.0 )
2548resultant->
sup= 1.0;
2568assert(resultant !=
NULL);
2574 if( operand.
sup<= 0.0 )
2580 if( operand.
inf== operand.
sup)
2582 if( operand.
sup== 1.0 )
2584resultant->
inf= 0.0;
2585resultant->
sup= 0.0;
2592tmp = log(operand.
inf);
2600 if( operand.
inf<= 0.0 )
2604 else if( operand.
inf== 1.0 )
2606resultant->
inf= 0.0;
2618 else if( operand.
sup== 1.0 )
2620resultant->
sup= 0.0;
2637assert(resultant !=
NULL);
2641resultant->
inf=
MIN(operand1.
inf, operand2.
inf);
2642resultant->
sup=
MIN(operand1.
sup, operand2.
sup);
2653assert(resultant !=
NULL);
2657resultant->
inf=
MAX(operand1.
inf, operand2.
inf);
2658resultant->
sup=
MAX(operand1.
sup, operand2.
sup);
2668assert(resultant !=
NULL);
2671 if( operand.
inf<= 0.0 && operand.
sup>= 0.0)
2673resultant->
inf= 0.0;
2676 else if( operand.
inf> 0.0 )
2678*resultant = operand;
2682resultant->
inf= -operand.
sup;
2683resultant->
sup= -operand.
inf;
2692static const double pi_d_l= (3373259426.0 + 273688.0 / (1<<21)) / (1<<30);
2693static const double pi_d_u= (3373259426.0 + 273689.0 / (1<<21)) / (1<<30);
2695#define pi_d_l ((3373259426.0 + 273688.0 / (1<<21)) / (1<<30)) 2696#define pi_d_u ((3373259426.0 + 273689.0 / (1<<21)) / (1<<30)) 2724tmp = -resultant->
sup;
2725resultant->
sup= -resultant->
inf;
2726resultant->
inf= tmp;
2736resultant->
inf= 0.0;
2737 else if( operand.
sup== 0.0 && operand.
inf> -
pi_d_l)
2738resultant->
sup= 0.0;
2762assert(resultant !=
NULL);
2767 if( operand.
inf== operand.
sup)
2772tmp = cos(operand.
inf);
2781 if( operand.
sup> 1e12 || operand.
inf< -1e12 )
2791negwidth = operand.
inf- operand.
sup;
2792 if( -negwidth >= 2.0*
pi_d_l)
2811assert(operand.
inf>= 0.0);
2822resultant->
inf=
MAX(-1.0, resultant->
inf);
2823 if( operand.
inf== 0.0 )
2824resultant->
sup= 1.0;
2828resultant->
sup=
MIN( 1.0, resultant->
sup);
2835resultant->
inf= -1.0;
2836 if( operand.
inf== 0.0 )
2837resultant->
sup= 1.0;
2843cinf = cos(operand.
inf);
2844csup = cos(operand.
sup);
2846resultant->
sup=
MIN(1.0, resultant->
sup);
2856 if( fmod(k, 2.0) != 0.0 )
2859resultant->
sup= -resultant->
inf;
2860resultant->
inf= tmp;
2864assert(resultant->
inf>= -1.0);
2865assert(resultant->
sup<= 1.0);
2875assert(resultant !=
NULL);
2878 if( operand.
sup< 0.0 )
2880resultant->
inf= -1.0;
2881resultant->
sup= -1.0;
2883 else if( operand.
inf>= 0.0 )
2885resultant->
inf= 1.0;
2886resultant->
sup= 1.0;
2890resultant->
inf= -1.0;
2891resultant->
sup= 1.0;
2912assert(resultant !=
NULL);
2916 if( operand.
sup< 0.0 )
2923 if( operand.
sup== 0.0 )
2933 if( operand.
inf> 0.0 )
2935loginf = log(operand.
inf);
2942logsup = log(operand.
sup);
2951 if( operand.
inf> 0.0 )
2976inf =
MIN(infcand1, infcand2);
2979 if( operand.
inf<= extr && extr <= operand.
sup)
2982sup =
MAX3(supcand1, supcand2, extr);
2985sup =
MAX(supcand1, supcand2);
3028cand1 = b_.
inf*
x.inf;
3029cand2 = b_.
inf*
x.sup;
3030cand3 = b_.
sup*
x.inf;
3031cand4 = b_.
sup*
x.sup;
3032u =
MAX(
MAX(cand1, cand2),
MAX(cand3, cand4));
3040 if(
x.sup <= 0.0 )
3052 if(
x.inf >= 0.0 )
3063u =
MAX(
x.inf * (
a*
x.inf +
b),
x.sup * (
a*
x.sup +
b));
3066 if( t >
x.inf &&
negate(2*
a)*
x.sup >
b&& s*t > u )
3077assert(
x.inf < 0.0 &&
x.sup > 0);
3083 return MAX(cand1, cand2);
3105 if( sqrcoeff == 0.0 )
3113tmp = lincoeff.
inf;
3114lincoeff.
inf= -lincoeff.
sup;
3115lincoeff.
sup= -tmp;
3118assert(resultant->
sup>= resultant->
inf);
3134assert(resultant !=
NULL);
3139resultant->
inf= 0.0;
3145 SCIPdebugMessage(
"solve %g*x^2 + %g*x >= %g gives [%.20f, %.20f]\n", -sqrcoeff.
inf, -lincoeff.
inf, -rhs.
sup, resultant->
inf, resultant->
sup);
3187tmp = lincoeff.
inf;
3188lincoeff.
inf= -lincoeff.
sup;
3189lincoeff.
sup= -tmp;
3192xbnds.
inf= -xbnds.
sup;
3197tmp = resultant->
inf;
3198resultant->
inf= -resultant->
sup;
3199resultant->
sup= -tmp;
3222assert(resultant !=
NULL);
3226 if( sqrcoeff == 0.0 )
3239 if( lincoeff <= 0.0 && rhs > 0.0 )
3245 if( lincoeff >= 0.0 && rhs <= 0.0 )
3248resultant->
inf=
MAX(0.0, xbnds.
inf);
3249resultant->
sup= xbnds.
sup;
3255 if( lincoeff < 0.0 && rhs <= 0.0 )
3258resultant->
inf=
MAX(0.0, xbnds.
inf);
3261resultant->
sup= rhs / lincoeff;
3262 if( xbnds.
sup< resultant->
sup)
3263resultant->
sup= xbnds.
sup;
3267assert(lincoeff > 0.0);
3273resultant->
inf= rhs / lincoeff;
3274 if( resultant->
inf< xbnds.
inf)
3275resultant->
inf= xbnds.
inf;
3277resultant->
sup= xbnds.
sup;
3285resultant->
inf= 0.0;
3296 if( lincoeff >= 0.0 )
3301delta =
b*
b+ sqrcoeff*rhs;
3313 if( sqrcoeff < 0.0 )
3314resultant->
sup= z /
negate(sqrcoeff);
3319 if( sqrcoeff < 0.0 )
3322delta =
b*
b+ sqrcoeff*rhs;
3327resultant->
sup= z /
negate(sqrcoeff);
3335 if( sqrcoeff > 0.0 )
3338delta =
b*
b+ sqrcoeff*rhs;
3343resultant->
inf= z / sqrcoeff;
3353delta =
b*
b+ sqrcoeff * rhs;
3367 if( sqrcoeff > 0.0 )
3376 if( xbnds.
sup< zdiva )
3380 else if( xbnds.
inf> resultant->
sup)
3383resultant->
inf= zdiva;
3424assert(resultant !=
NULL);
3433 if( sqrcoeff.
inf== 0.0 && sqrcoeff.
sup== 0.0 && (lincoeff.
inf> 0.0 || lincoeff.
sup< 0.0) )
3437 SCIPdebugMessage(
"solving [%g,%g]*x = [%g,%g] for x in [%g,%g] gives [%g,%g]\n", lincoeff.
inf, lincoeff.
sup, rhs.
inf, rhs.
sup, xbnds.
inf, xbnds.
sup, resultant->
inf, resultant->
sup);
3441 SCIPdebugMessage(
"solving [%g,%g]*x^2 + [%g,%g]*x = [%g,%g] for x in [%g,%g]\n", sqrcoeff.
inf, sqrcoeff.
sup, lincoeff.
inf, lincoeff.
sup, rhs.
inf, rhs.
sup, xbnds.
inf, xbnds.
sup);
3444 if( xbnds.
sup>= 0 )
3447 SCIPdebugMessage(
" solutions of [%g,%g]*x^2 + [%g,%g]*x in [%g,%g] for x in [%g,%g] are [%.15g,%.15g]\n",
3448sqrcoeff.
inf, sqrcoeff.
sup, lincoeff.
inf, lincoeff.
sup, rhs.
inf, rhs.
sup,
MAX(xbnds.
inf, 0.0), xbnds.
sup, xpos.
inf, xpos.
sup);
3456 if( xbnds.
inf<= 0.0 )
3459 SCIPdebugMessage(
" solutions of [%g,%g]*x^2 + [%g,%g]*x in [%g,%g] for x in [%g,%g] are [%g,%g]\n",
3460sqrcoeff.
inf, sqrcoeff.
sup, lincoeff.
inf, lincoeff.
sup, rhs.
inf, rhs.
sup, xbnds.
inf,
MIN(xbnds.
sup, 0.0), xneg.
inf, xneg.
sup);
3498assert(resultant !=
NULL);
3499assert(xbnds.
inf<= xbnds.
sup);
3500assert(ybnds.
inf<= ybnds.
sup);
3524denom = 4.0 * ax * ay - axy * axy;
3527 x= (axy * by - 2.0 * ay * bx) / denom;
3528 y= (axy * bx - 2.0 * ax * by) / denom;
3529 if( xbnds.
inf<=
x&&
x<= xbnds.
sup&& ybnds.
inf<=
y&&
y<= ybnds.
sup)
3531val = (axy * bx * by - ay * bx * bx - ax * by * by) / denom;
3532minval =
MIN(val, minval);
3533maxval =
MAX(val, maxval);
3536 else if(
REALABS(2.0 * ay * bx - axy * by) <= 1e-9 )
3544val = -ay * bx * bx / (axy * axy);
3545minval =
MIN(val, minval);
3546maxval =
MAX(val, maxval);
3557 else if( ax < 0.0 )
3559 else if( ax == 0.0 )
3565 else if( bx + axy * ybnds.
inf< 0.0 )
3569minval =
MIN(val, minval);
3570maxval =
MAX(val, maxval);
3574 else if( bx + axy * ybnds.
sup< 0.0 )
3578minval =
MIN(val, minval);
3579maxval =
MAX(val, maxval);
3591minval =
MIN(tmp.
inf, minval);
3592maxval =
MAX(tmp.
sup, maxval);
3600 else if( ax < 0.0 )
3602 else if( ax == 0.0 )
3608 else if( bx + axy * ybnds.
inf> 0.0 )
3612minval =
MIN(val, minval);
3613maxval =
MAX(val, maxval);
3617 else if( bx + axy * ybnds.
sup> 0.0 )
3621minval =
MIN(val, minval);
3622maxval =
MAX(val, maxval);
3634minval =
MIN(tmp.
inf, minval);
3635maxval =
MAX(tmp.
sup, maxval);
3643 else if( ay < 0.0 )
3645 else if( ay == 0.0 )
3651 else if( by + axy * xbnds.
inf< 0.0 )
3655minval =
MIN(val, minval);
3656maxval =
MAX(val, maxval);
3660 else if( by + axy * xbnds.
sup< 0.0 )
3664minval =
MIN(val, minval);
3665maxval =
MAX(val, maxval);
3677minval =
MIN(tmp.
inf, minval);
3678maxval =
MAX(tmp.
sup, maxval);
3686 else if( ay < 0.0 )
3688 else if( ay == 0.0 )
3694 else if( by + axy * xbnds.
inf> 0.0 )
3698minval =
MIN(val, minval);
3699maxval =
MAX(val, maxval);
3703 else if( by + axy * xbnds.
sup> 0.0 )
3707minval =
MIN(val, minval);
3708maxval =
MAX(val, maxval);
3720minval =
MIN(tmp.
inf, minval);
3721maxval =
MAX(tmp.
sup, maxval);
3724minval -= 1e-10 *
REALABS(minval);
3725maxval += 1e-10 *
REALABS(maxval);
3728 SCIPdebugMessage(
"range for %gx^2 + %gy^2 + %gxy + %gx + %gy = [%g, %g] for x = [%g, %g], y=[%g, %g]\n",
3729ax, ay, axy, bx, by, minval, maxval, xbnds.
inf, xbnds.
sup, ybnds.
inf, ybnds.
sup);
3755assert(resultant !=
NULL);
3773 if( xbnds.
sup>= 0.0 )
3782 if( xbnds.
inf< 0.0 )
3864rcoef_y = axy * bx / (2.0*ax) - by;
3865rcoef_yy = axy * axy / (4.0*ax) - ay;
3866rcoef_const = bx * bx / (4.0*ax);
3868#define CALCB(y) ((bx + axy * (y)) / (2.0 * sqrtax)) 3869#define CALCR(c,y) (rcoef_const + (c) + (rcoef_y + rcoef_yy * (y)) * (y)) 3880 if(
EPSN(ub, 1e-9) )
3885 else if( ub < 0.0 )
3891rhs.
sup+= -2.0*ub;
3920 if( !
EPSZ(ay, 1e-9) && axy * axy >= 4.0 * ax * ay )
3941 else if( !
EPSZ(ay, 1e-9) )
3948minvalleft = -by / 2.0;
3949maxvalleft = -by / 2.0;
3970minvalleft =
MIN(-sqrtc -
b, minvalleft);
3971maxvalright =
MAX( sqrtc -
b, maxvalright);
3984maxvalleft =
MAX(-sqrtc -
b, maxvalleft);
3985minvalright =
MIN( sqrtc -
b, minvalright);
3994 if( !
EPSZ(ay, 1e-9) && axy * axy >= 4.0 * ax * ay )
4015 else if( !
EPSZ(ay, 1e-9) )
4024minvalright =
MIN(minvalright, -by / 2.0);
4025maxvalright =
MAX(maxvalright, -by / 2.0);
4044minvalleft =
MIN(-sqrtc -
b, minvalleft);
4045maxvalright =
MAX( sqrtc -
b, maxvalright);
4058maxvalleft =
MAX(-sqrtc -
b, maxvalleft);
4059minvalright =
MIN( sqrtc -
b, minvalright);
4066 if( !
EPSZ(ay, 1e-9) )
4068 if(
REALABS(axy*axy - 4.0*ax*ay) > 1e-9 )
4074sqrtterm = axy * axy * ay * (ay * bx * bx - axy * bx * by + ax * by * by - axy * axy * rhs.
sup+ 4.0 * ax * ay * rhs.
sup);
4075 if( !
EPSN(sqrtterm, 1e-9) )
4077sqrtterm = sqrt(
MAX(sqrtterm, 0.0));
4079ymin = axy * ay * bx - 2.0 * ax * ay * by - sqrtterm;
4081ymin /= 4.0 * ax * ay - axy * axy;
4083 if( ymin > ybnds.
inf&& ymin < ybnds.
sup)
4096minvalleft =
MIN(-sqrtc -
b, minvalleft);
4097maxvalright =
MAX( sqrtc -
b, maxvalright);
4102ymin = axy * ay * bx - 2.0 * ax * ay * by + sqrtterm;
4104ymin /= 4.0 * ax * ay - axy * axy;
4106 if( ymin > ybnds.
inf&& ymin < ybnds.
sup)
4119minvalleft =
MIN(-sqrtc -
b, minvalleft);
4120maxvalright =
MAX( sqrtc -
b, maxvalright);
4128sqrtterm = axy * axy * ay * (ay * bx * bx - axy * bx * by + ax * by * by - axy * axy * rhs.
inf+ 4.0 * ax * ay * rhs.
inf);
4129 if( !
EPSN(sqrtterm, 1e-9) )
4131sqrtterm = sqrt(
MAX(sqrtterm, 0.0));
4133ymin = axy * ay * bx - 2.0 * ax * ay * by - sqrtterm;
4135ymin /= 4.0 * ax * ay - axy * axy;
4137 if( ymin > ybnds.
inf&& ymin < ybnds.
sup)
4150maxvalleft =
MAX(-sqrtc -
b, maxvalleft);
4151minvalright =
MIN( sqrtc -
b, minvalright);
4156ymin = axy * ay * bx - 2.0 * ax * ay * by + sqrtterm;
4158ymin /= 4.0 * ax * ay - axy * axy;
4160 if( ymin > ybnds.
inf&& ymin < ybnds.
sup)
4173maxvalleft =
MAX(-sqrtc -
b, maxvalleft);
4174minvalright =
MIN( sqrtc -
b, minvalright);
4180 else if(
REALABS(2.0 * ay * bx - axy * by) > 1e-9 )
4184ymin = - (4.0 * ay * bx * by - axy * by * by + 4.0 * axy * ay * rhs.
sup);
4186ymin /= 2.0 * ay * bx - axy * by;
4188 if( ymin > ybnds.
inf&& ymin < ybnds.
sup)
4201minvalleft =
MIN(-sqrtc -
b, minvalleft);
4202maxvalright =
MAX( sqrtc -
b, maxvalright);
4209ymin = - (4.0 * ay * bx * by - axy * by * by + 4.0 * axy * ay * rhs.
inf);
4211ymin /= 2.0 * ay * bx - axy * by;
4213 if( ymin > ybnds.
inf&& ymin < ybnds.
sup)
4226maxvalleft =
MAX(-sqrtc -
b, maxvalleft);
4227minvalright =
MIN( sqrtc -
b, minvalright);
4258 if( ybnds.
sup>= 0.0 )
4265assert(ypos.
inf>= 0.0);
4267minvalleft =
MIN(minvalleft, -
b);
4268maxvalleft =
MAX(maxvalleft, -
b);
4269minvalright =
MIN(minvalright, -
b);
4270maxvalright =
MAX(maxvalright, -
b);
4275minvalleft =
MIN(minvalleft, -
b);
4276maxvalleft =
MAX(maxvalleft, -
b);
4277minvalright =
MIN(minvalright, -
b);
4278maxvalright =
MAX(maxvalright, -
b);
4301 if( ybnds.
inf< 0.0 )
4311minvalleft =
MIN(minvalleft, -
b);
4312maxvalleft =
MAX(maxvalleft, -
b);
4313minvalright =
MIN(minvalright, -
b);
4314maxvalright =
MAX(maxvalright, -
b);
4331assert(yneg.
sup<= 0.0);
4333minvalleft =
MIN(minvalleft, -
b);
4334maxvalleft =
MAX(maxvalleft, -
b);
4335minvalright =
MIN(minvalright, -
b);
4336maxvalright =
MAX(maxvalright, -
b);
4345assert(
EPSGE(minvalright, minvalleft, 1e-9));
4366assert(
EPSLE(maxvalleft, maxvalright, 1e-9));
4400 if(
EPSGE(-bx / axy, ybnds.
inf, 1e-9) &&
EPSLE(-bx / axy, ybnds.
sup, 1e-9) )
4410 if( xbnds.
inf< 0.0 && xbnds.
sup> 0.0 )
4428 if( lincoef.
inf== 0.0 && lincoef.
sup== 0.0 )
4431 if( myrhs.
inf<= 0.0 && myrhs.
sup>= 0.0 )
4436 else if( xbnds.
inf>= 0.0 )
4449assert(xbnds.
sup<= 0.0);
4467 if( bx + axy * (axy > 0.0 ? ybnds.
inf: ybnds.
sup) > 0.0 )
4477 if(
EPSZ(ay, 1e-9) )
4479 else if( ay * axy < 0.0 )
4484val = (c - ay * ybnds.
inf* ybnds.
inf- by * ybnds.
inf) / (bx + axy * ybnds.
inf);
4485minval =
MIN(val, minval);
4491 if(
EPSZ(ay, 1e-9) )
4492minval =
MIN(minval, -by / axy);
4493 else if( ay * axy > 0.0 )
4498val = (c - ay * ybnds.
sup* ybnds.
sup- by * ybnds.
sup) / (bx + axy * ybnds.
sup);
4499minval =
MIN(val, minval);
4502 if( !
EPSZ(ay, 1e-9) )
4504d = ay * (ay * bx * bx - axy * (bx * by + axy * c));
4505 if( !
EPSN(d, 1e-9) )
4507ymin = -ay * bx + sqrt(
MAX(d, 0.0));
4510 if( ymin > ybnds.
inf&& ymin < ybnds.
sup)
4512assert(bx + axy * ymin != 0.0);
4514val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4515minval =
MIN(val, minval);
4518ymin = -ay * bx - sqrt(
MAX(d, 0.0));
4521 if(ymin > ybnds.
inf&& ymin < ybnds.
sup)
4523assert(bx + axy * ymin != 0.0);
4525val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4526minval =
MIN(val, minval);
4537 if( bx + axy * (axy > 0.0 ? ybnds.
inf: ybnds.
sup) > 0.0 )
4547 if(
EPSZ(ay, 1e-9) )
4549 else if( ay * axy > 0.0 )
4554val = (c - ay * ybnds.
inf* ybnds.
inf- by * ybnds.
inf) / (bx + axy * ybnds.
inf);
4555maxval =
MAX(val, maxval);
4561 if(
EPSZ(ay, 1e-9) )
4562maxval =
MAX(maxval, -by / axy);
4563 else if( ay * axy < 0.0 )
4568val = (c - ay * ybnds.
sup* ybnds.
sup- by * ybnds.
sup) / (bx + axy * ybnds.
sup);
4569maxval =
MAX(val, maxval);
4572 if( !
EPSZ(ay, 1e-9) )
4574d = ay * (ay * bx * bx - axy * (bx * by + axy * c));
4575 if( !
EPSN(d, 1e-9) )
4577ymin = ay * bx + sqrt(
MAX(d, 0.0));
4580 if( ymin > ybnds.
inf&& ymin < ybnds.
sup)
4582assert(bx + axy * ymin != 0.0);
4583val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4584maxval =
MAX(val, maxval);
4587ymin = ay * bx - sqrt(
MAX(d, 0.0));
4590 if( ymin > ybnds.
inf&& ymin < ybnds.
sup)
4592assert(bx + axy * ymin != 0.0);
4593val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4594maxval =
MAX(val, maxval);
4605resultant->
inf= minval - 1e-10 *
REALABS(minval);
4609resultant->
sup= maxval + 1e-10 *
REALABS(maxval);
4640 intminlinactivityinf;
4641 intmaxlinactivityinf;
4642 intnreductions = 0;
4645assert(noperands > 0);
4646assert(operands !=
NULL);
4647assert(weights !=
NULL);
4648assert(resultants !=
NULL);
4649assert(infeasible !=
NULL);
4651*infeasible =
FALSE;
4660minlinactivity = constant;
4661maxlinactivity = -constant;
4662minlinactivityinf = 0;
4663maxlinactivityinf = 0;
4665 SCIPdebugMessage(
"reverse prop with %d children: %.20g", noperands, constant);
4670 for( c = 0; c < noperands; ++c )
4672childbounds = operands[c];
4677*infeasible =
TRUE;
4684 if( resultants[c].sup >=
infinity)
4685++maxlinactivityinf;
4688assert(resultants[c].sup > -
infinity);
4689maxlinactivity -= resultants[c].
sup;
4692 if( resultants[c].inf <= -
infinity)
4693++minlinactivityinf;
4696assert(resultants[c].inf <
infinity);
4697minlinactivity += resultants[c].
inf;
4700maxlinactivity = -maxlinactivity;
4703minlinactivityinf ? -
infinity: minlinactivity,
4704maxlinactivityinf ?
infinity: maxlinactivity,
4708 if( (minlinactivityinf >= 2 || rhs.
sup>=
infinity) && (maxlinactivityinf >= 2 || rhs.
inf<= -
infinity) )
4714 for( c = 0; c < noperands; ++c )
4724 if( resultants[c].inf <= -
infinity&& minlinactivityinf <= 1 )
4726assert(minlinactivityinf == 1);
4729 else if( minlinactivityinf == 0 )
4741 if( resultants[c].sup >=
infinity&& maxlinactivityinf <= 1 )
4743assert(maxlinactivityinf == 1);
4744childbounds.
inf= rhs.
inf- maxlinactivity;
4746 else if( maxlinactivityinf == 0 )
4748childbounds.
inf= rhs.
inf- maxlinactivity + resultants[c].
sup;
4752 SCIPdebugMessage(
"child %d: %.20g*x in [%.20g,%.20g]", c, weights[c], childbounds.
inf, childbounds.
sup);
4761*infeasible =
TRUE;
4775*infeasible =
TRUE;
4780 if( resultants[c].inf != operands[c].inf || resultants[c].sup != operands[c].sup )
4787 if( c < noperands )
common defines and data types used in all packages of SCIP
SCIP_Real SCIPnextafter(SCIP_Real from, SCIP_Real to)
SCIP_Real SCIPrelDiff(SCIP_Real val1, SCIP_Real val2)
void SCIPintervalMulSup(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalSetRoundingModeUpwards(void)
void SCIPintervalIntersectEps(SCIP_INTERVAL *resultant, SCIP_Real eps, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalAddSup(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 SCIPintervalSetRoundingModeDownwards(void)
SCIP_Real SCIPintervalGetInf(SCIP_INTERVAL interval)
SCIP_Real SCIPintervalQuadUpperBound(SCIP_Real infinity, SCIP_Real a, SCIP_INTERVAL b_, SCIP_INTERVAL x)
SCIP_Bool SCIPintervalIsEntire(SCIP_Real infinity, SCIP_INTERVAL operand)
void SCIPintervalScalprodScalarsInf(SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_Real *operand2)
void SCIPintervalSub(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalSetEntire(SCIP_Real infinity, SCIP_INTERVAL *resultant)
SCIP_Bool SCIPintervalIsPositiveInfinity(SCIP_Real infinity, SCIP_INTERVAL operand)
SCIP_Real SCIPintervalPowerScalarIntegerSup(SCIP_Real operand1, int operand2)
void SCIPintervalSquareRoot(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
void SCIPintervalMulInf(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalScalprodScalarsSup(SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_Real *operand2)
SCIP_ROUNDMODE SCIPintervalGetRoundingMode(void)
void SCIPintervalSetRoundingModeToNearest(void)
void SCIPintervalPower(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalSolveUnivariateQuadExpression(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL sqrcoeff, SCIP_INTERVAL lincoeff, SCIP_INTERVAL rhs, SCIP_INTERVAL xbnds)
void SCIPintervalSignPowerScalar(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
SCIP_Real SCIPintervalPowerScalarIntegerInf(SCIP_Real operand1, int operand2)
void SCIPintervalSetRoundingMode(SCIP_ROUNDMODE roundmode)
void SCIPintervalScalprodScalars(SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_Real *operand2)
void SCIPintervalUnify(SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalAbs(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
void SCIPintervalSubScalar(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
void SCIPintervalSetRoundingModeTowardsZero(void)
void SCIPintervalCos(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
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)
void SCIPintervalMax(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalIntersect(SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalSquare(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
void SCIPintervalSet(SCIP_INTERVAL *resultant, SCIP_Real value)
SCIP_Bool SCIPintervalIsSubsetEQ(SCIP_Real infinity, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
SCIP_Bool SCIPintervalIsEmpty(SCIP_Real infinity, SCIP_INTERVAL operand)
void SCIPintervalPowerScalarInverse(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL basedomain, SCIP_Real exponent, SCIP_INTERVAL image)
SCIP_Bool SCIPintervalHasRoundingControl(void)
void SCIPintervalSin(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
void SCIPintervalSolveUnivariateQuadExpressionPositive(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL sqrcoeff, SCIP_INTERVAL lincoeff, SCIP_INTERVAL rhs, SCIP_INTERVAL xbnds)
void SCIPintervalSetBounds(SCIP_INTERVAL *resultant, SCIP_Real inf, SCIP_Real sup)
void SCIPintervalAddInf(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalMin(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalAddVectors(SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_INTERVAL *operand2)
SCIP_Bool SCIPintervalIsNegativeInfinity(SCIP_Real infinity, SCIP_INTERVAL operand)
void SCIPintervalMulScalar(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
void SCIPintervalReciprocal(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
void SCIPintervalPowerScalarInteger(SCIP_INTERVAL *resultant, SCIP_Real operand1, int operand2)
void SCIPintervalEntropy(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
void SCIPintervalMul(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalDiv(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalPowerScalarScalar(SCIP_INTERVAL *resultant, SCIP_Real operand1, SCIP_Real operand2)
void SCIPintervalQuad(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_Real sqrcoeff, SCIP_INTERVAL lincoeff, SCIP_INTERVAL xrng)
void SCIPintervalSign(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
void SCIPintervalPowerScalar(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
void SCIPintervalLog(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
void SCIPintervalAddScalar(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 SCIPintervalDivScalar(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
SCIP_Bool SCIPintervalAreDisjointEps(SCIP_Real eps, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalSolveUnivariateQuadExpressionNegative(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL sqrcoeff, SCIP_INTERVAL lincoeff, SCIP_INTERVAL rhs, SCIP_INTERVAL xbnds)
SCIP_Real SCIPintervalGetSup(SCIP_INTERVAL interval)
void SCIPintervalSolveUnivariateQuadExpressionPositiveAllScalar(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_Real sqrcoeff, SCIP_Real lincoeff, SCIP_Real 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)
SCIP_Real SCIPintervalNegateReal(SCIP_Real x)
SCIP_Bool SCIPintervalAreDisjoint(SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
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)
void SCIPintervalExp(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
void SCIPintervalAdd(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalScalprod(SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_INTERVAL *operand2)
void SCIPintervalSetEmpty(SCIP_INTERVAL *resultant)
static const double pi_d_l
#define SCIP_ROUND_NEAREST
static SCIP_Real negate(SCIP_Real x)
static SCIP_ROUNDMODE intervalGetRoundingMode(void)
#define SCIP_ROUND_UPWARDS
static const double pi_d_u
#define SCIP_ROUND_DOWNWARDS
static void intervalSetRoundingMode(SCIP_ROUNDMODE roundmode)
interval arithmetics for provable bounds
#define BMScopyMemoryArray(ptr, source, num)
SCIP_Real SCIPnegateReal(SCIP_Real x)
internal miscellaneous methods
public methods for message output
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4