25 #define _USE_MATH_DEFINES 45 #define SCIP_ROUND_DOWNWARDS FE_DOWNWARD 46 #define SCIP_ROUND_UPWARDS FE_UPWARD 47 #define SCIP_ROUND_NEAREST FE_TONEAREST 48 #define SCIP_ROUND_ZERO FE_TOWARDZERO 63 if( fesetround(roundmode) != 0 )
91 #define SCIP_ROUND_DOWNWARDS FP_RND_RM 92 #define SCIP_ROUND_UPWARDS FP_RND_RP 93 #define SCIP_ROUND_NEAREST FP_RND_RN 94 #define SCIP_ROUND_ZERO FP_RND_RZ 109 if( write_rnd(roundmode) != 0 )
137 #define SCIP_ROUND_DOWNWARDS RC_DOWN 138 #define SCIP_ROUND_UPWARDS RC_UP 139 #define SCIP_ROUND_NEAREST RC_NEAR 140 #define SCIP_ROUND_ZERO RC_CHOP 155 if( (_controlfp(roundmode, _MCW_RC) & _MCW_RC) != roundmode )
167 return _controlfp(0, 0) & _MCW_RC;
177 #define SCIP_ROUND_DOWNWARDS 0 178 #define SCIP_ROUND_UPWARDS 1 179 #define SCIP_ROUND_NEAREST 2 180 #define SCIP_ROUND_ZERO 3 195 SCIPerrorMessage(
"setting rounding mode not available - interval arithmetic is invalid!\n");
210 #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) 223 __asm
volatile (
"fldl %1; fchs; fstpl %0" :
"=m" (x) :
"m" (x));
230 #elif defined(_MSC_VER) && (defined(__INTEL_COMPILER) || !defined(_M_X64)) 252 #define nextafter(x,y) _nextafter(x,y) 258 #if defined(_MSC_VER) && defined(_M_X64) && !defined(NO_NEXTAFTER) 259 #define nextafter(x,y) _nextafter(x,y) 292 #define __HI(x) *(1+(int*)&x) 293 #define __LO(x) *(int*)&x 294 #define __HIp(x) *(1+(int*)x) 295 #define __LOp(x) *(int*)x 298 double nextafter(
double x,
double y)
315 if( ((ix>=0x7ff00000) && ((ix-0x7ff00000)|lx) != 0 ) ||
316 ( (iy>=0x7ff00000) && ((iy-0x7ff00000)|ly) != 0 ))
327 __HI(x) = hy&0x80000000;
339 if( hx > hy || ((hx == hy) && (lx > ly)) )
356 if( hy >= 0 || hx > hy || ((hx == hy) && (lx > ly)) )
373 if( hy >= 0x7ff00000 )
375 if( hy < 0x00100000 )
444 #undef SCIPintervalGetInf 445 #undef SCIPintervalGetSup 446 #undef SCIPintervalSet 447 #undef SCIPintervalSetBounds 448 #undef SCIPintervalSetEmpty 449 #undef SCIPintervalIsEmpty 450 #undef SCIPintervalSetEntire 451 #undef SCIPintervalIsEntire 452 #undef SCIPintervalIsPositiveInfinity 453 #undef SCIPintervalIsNegativeInfinity 477 assert(resultant !=
NULL);
479 resultant->
inf = value;
480 resultant->
sup = value;
490 assert(resultant !=
NULL);
493 resultant->
inf = inf;
494 resultant->
sup = sup;
502 assert(resultant !=
NULL);
504 resultant->
inf = 1.0;
505 resultant->
sup = -1.0;
514 if( operand.
sup >= infinity || operand.
inf <= -infinity )
517 return operand.
sup < operand.
inf;
526 assert(resultant !=
NULL);
547 return operand.
inf >= infinity && operand.
sup >= operand.
inf;
556 return operand.
sup <= -infinity && operand.
inf <= operand.
sup;
567 if( operand1.
inf > operand1.
sup )
571 if( operand2.
inf > operand2.
sup )
574 return (
MAX(-infinity, operand1.
inf) >= operand2.
inf) &&
575 (
MIN( infinity, operand1.
sup) <= operand2.
sup);
584 return (operand1.
sup < operand2.
inf) || (operand2.
sup < operand1.
inf);
594 assert(resultant !=
NULL);
607 assert(resultant !=
NULL);
609 if( operand1.
inf > operand1.
sup )
612 *resultant = operand2;
616 if( operand2.
inf > operand2.
sup )
619 *resultant = operand1;
636 assert(resultant !=
NULL);
639 if( operand1.
inf <= -infinity || operand2.
inf <= -infinity )
644 else if( operand1.
inf >= infinity || operand2.
inf >= infinity )
650 resultant->
inf = operand1.
inf + operand2.
inf;
663 assert(resultant !=
NULL);
666 if( operand1.
sup >= infinity || operand2.
sup >= infinity )
671 else if( operand1.
sup <= -infinity || operand2.
sup <= -infinity )
677 resultant->
sup = operand1.
sup + operand2.
sup;
691 assert(resultant !=
NULL);
718 assert(resultant !=
NULL);
724 if( operand1.
inf <= -infinity || operand2 <= -infinity )
728 else if( operand1.
inf >= infinity || operand2 >= infinity )
736 resultant->
inf = operand1.
inf + operand2;
740 if( operand1.
sup >= infinity || operand2 >= infinity )
744 else if( operand1.
sup <= -infinity || operand2 <= -infinity )
752 resultant->
sup = operand1.
sup + operand2;
774 for( i = 0; i < length; ++i )
780 for( i = 0; i < length; ++i )
798 assert(resultant !=
NULL);
804 if( operand1.
inf <= -infinity || operand2.
sup >= infinity )
807 else if( operand1.
inf >= infinity || operand2.
sup <= -infinity )
816 resultant->
inf = operand1.
inf - operand2.
sup;
819 if( operand1.
sup >= infinity || operand2.
inf <= -infinity )
822 else if( operand1.
sup <= -infinity || operand2.
inf >= infinity )
824 assert(resultant->
inf == -infinity);
830 resultant->
sup = operand1.
sup - operand2.
inf;
855 assert(resultant !=
NULL);
861 if( operand1.
inf >= infinity )
864 assert(operand1.
sup >= infinity);
867 else if( operand2.
inf >= infinity )
870 assert(operand2.
sup >= infinity);
873 else if( operand1.
sup <= -infinity )
876 assert(operand1.
inf <= -infinity);
879 else if( operand2.
sup <= -infinity )
882 assert(operand2.
inf <= -infinity);
885 else if( ( operand1.
inf <= -infinity && operand2.
sup > 0.0 )
886 || ( operand1.
sup > 0.0 && operand2.
inf <= -infinity )
887 || ( operand1.
inf < 0.0 && operand2.
sup >= infinity )
888 || ( operand1.
sup >= infinity && operand2.
inf < 0.0 ) )
899 cand1 = operand1.
inf * operand2.
inf;
900 cand2 = operand1.
inf * operand2.
sup;
901 cand3 = operand1.
sup * operand2.
inf;
902 cand4 = operand1.
sup * operand2.
sup;
903 resultant->
inf =
MIN(
MIN(cand1, cand2),
MIN(cand3, cand4));
915 assert(resultant !=
NULL);
921 if( operand1.
inf >= infinity )
924 assert(operand1.
sup >= infinity);
927 else if( operand2.
inf >= infinity )
930 assert(operand2.
sup >= infinity);
933 else if( operand1.
sup <= -infinity )
936 assert(operand1.
inf <= -infinity);
939 else if( operand2.
sup <= -infinity )
942 assert(operand2.
inf <= -infinity);
945 else if( ( operand1.
inf <= -infinity && operand2.
inf < 0.0 )
946 || ( operand1.
inf < 0.0 && operand2.
inf <= -infinity )
947 || ( operand1.
sup > 0.0 && operand2.
sup >= infinity )
948 || ( operand1.
sup >= infinity && operand2.
sup > 0.0 ) )
959 cand1 = operand1.
inf * operand2.
inf;
960 cand2 = operand1.
inf * operand2.
sup;
961 cand3 = operand1.
sup * operand2.
inf;
962 cand4 = operand1.
sup * operand2.
sup;
963 resultant->
sup =
MAX(
MAX(cand1, cand2),
MAX(cand3, cand4));
977 assert(resultant !=
NULL);
1003 assert(resultant !=
NULL);
1006 if( operand2 >= infinity )
1009 if( operand1.
inf > 0 )
1011 else if( operand1.
inf < 0 )
1014 resultant->
inf = 0.0;
1016 else if( operand2 <= -infinity )
1019 if( operand1.
sup > 0 )
1021 else if( operand1.
sup < 0 )
1024 resultant->
inf = 0.0;
1026 else if( operand2 == 0.0 )
1028 resultant->
inf = 0.0;
1030 else if( operand2 > 0.0 )
1032 if( operand1.
inf <= -infinity )
1034 else if( operand1.
inf >= infinity )
1037 resultant->
inf = operand1.
inf * operand2;
1041 if( operand1.
sup >= infinity )
1043 else if( operand1.
sup <= -infinity )
1046 resultant->
inf = operand1.
sup * operand2;
1059 assert(resultant !=
NULL);
1062 if( operand2 >= infinity )
1065 if( operand1.
sup > 0 )
1067 else if( operand1.
sup < 0 )
1070 resultant->
sup = 0.0;
1072 else if( operand2 <= -infinity )
1075 if( operand1.
inf > 0 )
1077 else if( operand1.
inf < 0 )
1080 resultant->
sup = 0.0;
1082 else if( operand2 == 0.0 )
1084 resultant->
sup = 0.0;
1086 else if( operand2 > 0.0 )
1088 if( operand1.
sup >= infinity )
1090 else if( operand1.
sup <= -infinity )
1093 resultant->
sup = operand1.
sup * operand2;
1097 if( operand1.
inf <= -infinity )
1099 else if( operand1.
inf >= infinity )
1102 resultant->
sup = operand1.
inf * operand2;
1116 assert(resultant !=
NULL);
1143 assert(resultant !=
NULL);
1147 if( operand2.
inf <= 0.0 && operand2.
sup >= 0.0 )
1154 if( operand1.
inf == 0.0 && operand1.
sup == 0.0 )
1163 if( operand2.
sup >= infinity || operand2.
sup <= -infinity )
1170 intmed.
inf = 1.0 / operand2.
sup;
1172 if( operand2.
inf <= -infinity || operand2.
inf >= infinity )
1179 intmed.
sup = 1.0 / operand2.
inf;
1196 assert(resultant !=
NULL);
1201 if( operand2 >= infinity || operand2 <= -infinity )
1204 resultant->
inf = 0.0;
1205 resultant->
sup = 0.0;
1207 else if( operand2 > 0.0 )
1209 if( operand1.
inf <= -infinity )
1211 else if( operand1.
inf >= infinity )
1219 resultant->
inf = operand1.
inf / operand2;
1222 if( operand1.
sup >= infinity )
1224 else if( operand1.
sup <= -infinity )
1232 resultant->
sup = operand1.
sup / operand2;
1235 else if( operand2 < 0.0 )
1237 if( operand1.
sup >= infinity )
1239 else if( operand1.
sup <= -infinity )
1247 resultant->
inf = operand1.
sup / operand2;
1250 if( operand1.
inf <= -infinity )
1252 else if( operand1.
inf >= infinity )
1260 resultant->
sup = operand1.
inf / operand2;
1265 if( operand1.
inf >= 0 )
1271 else if( operand1.
sup <= 0 )
1304 resultant->
inf = 0.0;
1305 resultant->
sup = 0.0;
1309 for( i = 0; i < length && resultant->
inf > -
infinity; ++i )
1315 assert(resultant->
sup == 0.0);
1319 for( i = 0; i < length && resultant->
sup <
infinity ; ++i )
1345 resultant->
inf = 0.0;
1349 for( i = 0; i < length && resultant->
inf > -
infinity; ++i )
1352 assert(prod.
sup >= infinity);
1373 resultant->
sup = 0.0;
1377 for( i = 0; i < length && resultant->
sup <
infinity; ++i )
1380 assert(prod.
inf <= -infinity);
1398 resultant->
inf = 0.0;
1399 resultant->
sup = 0.0;
1404 assert(resultant->
sup == 0.0);
1422 assert(resultant !=
NULL);
1427 if( operand.
sup <= 0.0 )
1429 if( operand.
sup <= -infinity )
1434 resultant->
inf = operand.
sup * operand.
sup;
1437 if( operand.
inf <= -infinity )
1442 resultant->
sup = operand.
inf * operand.
inf;
1445 else if( operand.
inf >= 0.0 )
1447 if( operand.
inf >= infinity )
1452 resultant->
inf = operand.
inf * operand.
inf;
1455 if( operand.
sup >= infinity )
1460 resultant->
sup = operand.
sup * operand.
sup;
1465 resultant->
inf = 0.0;
1466 if( operand.
inf <= -infinity || operand.
sup >= infinity )
1474 x = operand.
inf * operand.
inf;
1475 y = operand.
sup * operand.
sup;
1476 resultant->
sup =
MAX(x, y);
1492 assert(resultant !=
NULL);
1495 if( operand.
sup < 0.0 )
1501 if( operand.
inf == operand.
sup )
1503 if( operand.
inf >= infinity )
1521 if( operand.
inf <= 0.0 )
1522 resultant->
inf = 0.0;
1523 else if( operand.
inf >= infinity )
1534 if( operand.
sup >= infinity )
1554 assert(resultant !=
NULL);
1558 if( operand2.
inf == operand2.
sup )
1588 assert(operand1 >= 0.0);
1590 if( operand1 == 0.0 )
1592 assert(operand2 >= 0);
1600 if( operand1 == 1.0 || operand2 == 0 )
1607 assert(result != 0.0);
1611 result = 1.0 / result;
1622 n = (
unsigned int)operand2;
1641 result = result * z;
1670 assert(operand1 >= 0.0);
1672 if( operand1 == 0.0 )
1674 assert(operand2 >= 0);
1682 if( operand1 == 1.0 || operand2 == 0 )
1689 assert(result != 0.0);
1693 result = 1.0 / result;
1704 n = (
unsigned int)operand2;
1715 result = result * z;
1744 assert(operand1 >= 0.0);
1746 if( operand1 == 0.0 )
1748 assert(operand2 >= 0);
1762 if( operand1 == 1.0 || operand2 == 0 )
1772 assert(resultant->
inf > 0.0 || resultant->
sup < 0.0);
1789 n = (
unsigned int)operand2;
1802 result_sup = result_sup * z_sup;
1810 z_sup = z_sup * z_sup;
1816 resultant->
inf = result_inf;
1817 resultant->
sup = result_sup;
1818 assert(resultant->
inf <= resultant->
sup);
1835 assert(resultant !=
NULL);
1837 if( operand1 == 0.0 )
1839 assert(operand2 >= 0);
1853 if( operand1 == 1.0 || operand2 == 0 )
1860 result =
pow(operand1, operand2);
1879 assert(resultant !=
NULL);
1882 if( operand2 == infinity )
1888 if( operand1.
inf < 0.0 )
1891 resultant->
inf = 0.0;
1892 if( operand1.
sup > 0.0 )
1895 resultant->
sup = 0.0;
1899 if( operand2 == 0.0 )
1901 if( operand1.
inf == 0.0 && operand1.
sup == 0.0 )
1903 resultant->
inf = 0.0;
1904 resultant->
sup = 0.0;
1906 else if( operand1.
inf <= 0.0 || operand1.
sup >= 0.0 )
1908 resultant->
inf = 0.0;
1909 resultant->
sup = 1.0;
1913 resultant->
inf = 1.0;
1914 resultant->
sup = 1.0;
1919 if( operand2 == 1.0 )
1922 *resultant = operand1;
1926 op2isint = (ceil(operand2) == operand2);
1928 if( !op2isint && operand1.
inf < 0.0 )
1931 if( operand1.
sup < operand1.
inf )
1938 if( operand1.
inf >= 0.0 )
1940 if( operand2 >= 0.0 )
1943 if( operand1.
inf >= infinity )
1945 else if( operand1.
inf > 0.0 )
1951 resultant->
inf = 0.0;
1953 if( operand1.
sup >= infinity )
1955 else if( operand1.
sup > 0.0 )
1961 resultant->
sup = 0.0;
1965 if( operand1.
sup >= infinity )
1966 resultant->
inf = 0.0;
1967 else if( operand1.
sup == 0.0 )
1971 if( ceil(operand2/2) == operand2/2 )
1983 if( operand1.
inf == 0.0 )
1992 else if( operand1.
sup <= 0.0 )
1995 if( operand2 >= 0.0 && ceil(operand2/2) == operand2/2 )
1998 if( operand1.
sup == -infinity )
2004 if( operand1.
inf <= -infinity )
2009 else if( operand2 <= 0.0 && ceil(operand2/2) != operand2/2 )
2012 if( operand1.
sup == -infinity )
2014 resultant->
inf = 0.0;
2015 else if( operand1.
sup == 0.0 )
2021 if( operand1.
inf <= -infinity )
2023 resultant->
sup = 0.0;
2024 else if( operand1.
inf == 0.0 )
2030 else if( operand2 >= 0.0 )
2033 if( operand1.
inf <= -infinity )
2038 if( operand1.
sup <= -infinity )
2046 if( operand1.
inf <= -infinity )
2047 resultant->
inf = 0.0;
2048 else if( operand1.
inf == 0.0 )
2054 if( operand1.
sup <= -infinity )
2055 resultant->
sup = 0.0;
2056 else if( operand1.
sup == 0.0 )
2062 assert(resultant->
inf <= resultant->
sup || resultant->
inf >= infinity || resultant->
sup <= -infinity);
2067 if( operand2 >= 0.0 && operand2/2 == ceil(operand2/2) )
2070 resultant->
inf = 0.0;
2071 if( operand1.
inf == -infinity || operand1.
sup == infinity )
2076 else if( operand2 <= 0.0 && ceil(operand2/2) == operand2/2 )
2080 if( operand1.
inf == -infinity || operand1.
sup == infinity )
2081 resultant->
inf = 0.0;
2085 else if( operand2 >= 0.0 )
2088 if( operand1.
inf == -infinity )
2092 if( operand1.
sup == infinity )
2108 if( resultant->
inf > infinity )
2110 if( resultant->
sup < -infinity )
2129 assert(resultant !=
NULL);
2130 assert(image.
inf <= image.
sup);
2131 assert(basedomain.
inf <= basedomain.
sup);
2133 if( exponent == 0.0 )
2136 if( image.
inf <= 1.0 && image.
sup >= 1.0 )
2139 *resultant = basedomain;
2141 else if( image.
inf <= 0.0 && image.
sup >= 0.0 )
2165 if( image.
sup >= 0.0 )
2169 if( basedomain.
inf <= -resultant->
inf &&
EPSISINT(exponent, 0.0) && (
int)exponent % 2 == 0 )
2171 if( basedomain.
sup < resultant->
inf )
2183 if( image.
inf < 0.0 && basedomain.
inf < 0.0 &&
EPSISINT(exponent, 0.0) && ((
int)exponent % 2 != 0) )
2207 assert(resultant !=
NULL);
2210 assert(operand2 >= 0.0);
2212 if( operand2 == infinity )
2218 if( operand1.
inf < 0.0 )
2221 resultant->
inf = 0.0;
2222 if( operand1.
sup > 0.0 )
2225 resultant->
sup = 0.0;
2229 if( operand2 == 0.0 )
2232 if( operand1.
inf < 0.0 )
2233 resultant->
inf = -1.0;
2234 else if( operand1.
inf == 0.0 )
2235 resultant->
inf = 0.0;
2237 resultant->
inf = 1.0;
2239 if( operand1.
sup < 0.0 )
2240 resultant->
sup = -1.0;
2241 else if( operand1.
sup == 0.0 )
2242 resultant->
sup = 0.0;
2244 resultant->
sup = 1.0;
2249 if( operand2 == 1.0 )
2251 *resultant = operand1;
2257 if( operand2 == 2.0 )
2259 if( operand1.
inf <= -infinity )
2263 else if( operand1.
inf >= infinity )
2267 else if( operand1.
inf > 0.0 )
2270 resultant->
inf = operand1.
inf * operand1.
inf;
2279 if( operand1.
sup >= infinity )
2283 else if( operand1.
sup <= -infinity )
2287 else if( operand1.
sup > 0.0 )
2290 resultant->
sup = operand1.
sup * operand1.
sup;
2298 assert(resultant->
inf <= resultant->
sup);
2300 else if( operand2 == 0.5 )
2302 if( operand1.
inf <= -infinity )
2304 else if( operand1.
inf >= infinity )
2306 else if( operand1.
inf >= 0.0 )
2317 if( operand1.
sup >= infinity )
2319 else if( operand1.
sup <= -infinity )
2321 else if( operand1.
sup > 0.0 )
2331 assert(resultant->
inf <= resultant->
sup);
2335 if( operand1.
inf <= -infinity )
2337 else if( operand1.
inf >= infinity )
2339 else if( operand1.
inf > 0.0 )
2350 if( operand1.
sup >= infinity )
2352 else if( operand1.
sup <= -infinity )
2354 else if( operand1.
sup > 0.0 )
2379 assert(resultant !=
NULL);
2382 if( operand.
inf == 0.0 && operand.
sup == 0.0 )
2391 if( operand.
inf >= 0.0 )
2393 if( operand.
sup >= infinity )
2394 resultant->
inf = 0.0;
2398 resultant->
inf = 1.0 / operand.
sup;
2401 if( operand.
inf >= infinity )
2402 resultant->
sup = 0.0;
2403 else if( operand.
inf == 0.0 )
2408 resultant->
sup = 1.0 / operand.
inf;
2413 else if( operand.
sup <= 0.0 )
2415 if( operand.
sup <= -infinity )
2416 resultant->
inf = 0.0;
2417 else if( operand.
sup == 0.0 )
2422 resultant->
inf = 1.0 / operand.
sup;
2425 if( operand.
inf <= -infinity )
2430 resultant->
sup = 1.0 / operand.
inf;
2450 assert(resultant !=
NULL);
2453 if( operand.
sup <= -infinity )
2455 resultant->
inf = 0.0;
2456 resultant->
sup = 0.0;
2460 if( operand.
inf >= infinity )
2467 if( operand.
inf == operand.
sup )
2469 if( operand.
inf == 0.0 )
2471 resultant->
inf = 1.0;
2472 resultant->
sup = 1.0;
2487 if( operand.
inf <= -infinity )
2489 resultant->
inf = 0.0;
2491 else if( operand.
inf == 0.0 )
2493 resultant->
inf = 1.0;
2500 if( resultant->
inf >= infinity )
2504 if( operand.
sup >= infinity )
2508 else if( operand.
sup == 0.0 )
2510 resultant->
sup = 1.0;
2516 if( resultant->
sup < -infinity )
2530 assert(resultant !=
NULL);
2536 if( operand.
sup <= 0.0 )
2542 if( operand.
inf == operand.
sup )
2544 if( operand.
sup == 1.0 )
2546 resultant->
inf = 0.0;
2547 resultant->
sup = 0.0;
2562 if( operand.
inf <= 0.0 )
2566 else if( operand.
inf == 1.0 )
2568 resultant->
inf = 0.0;
2576 if( operand.
sup >= infinity )
2580 else if( operand.
sup == 1.0 )
2582 resultant->
sup = 0.0;
2599 assert(resultant !=
NULL);
2615 assert(resultant !=
NULL);
2630 assert(resultant !=
NULL);
2633 if( operand.
inf <= 0.0 && operand.
sup >= 0.0)
2635 resultant->
inf = 0.0;
2638 else if( operand.
inf > 0.0 )
2640 *resultant = operand;
2644 resultant->
inf = -operand.
sup;
2645 resultant->
sup = -operand.
inf;
2669 assert(resultant !=
NULL);
2672 intervallen = operand.
sup - operand.
inf;
2673 if( intervallen >= 2*
M_PI )
2679 modinf = fmod(operand.
inf, 2*
M_PI);
2682 modsup = modinf + intervallen;
2686 if( modinf <= extremepoints[b] )
2694 if( modsup <= extremepoints[b] )
2727 if( resultant->
inf > -1.0 )
2729 if( resultant->
sup < 1.0 )
2732 assert(resultant->
inf <= resultant->
sup);
2755 assert(resultant !=
NULL);
2758 intervallen = operand.
sup - operand.
inf;
2759 if( intervallen >= 2*M_PI )
2765 modinf = fmod(operand.
inf, 2*M_PI);
2768 modsup = modinf + intervallen;
2772 if( modinf <= extremepoints[b] )
2780 if( modsup <= extremepoints[b] )
2813 if( resultant->
inf > -1.0 )
2815 if( resultant->
sup < 1.0 )
2818 assert(resultant->
inf <= resultant->
sup);
2828 assert(resultant !=
NULL);
2831 if( operand.
sup < 0.0 )
2833 resultant->
inf = -1.0;
2834 resultant->
sup = -1.0;
2836 else if( operand.
inf >= 0.0 )
2838 resultant->
inf = 1.0;
2839 resultant->
sup = 1.0;
2843 resultant->
inf = -1.0;
2844 resultant->
sup = 1.0;
2862 assert(b_.
inf < infinity);
2863 assert(b_.
sup > -infinity);
2864 assert( x.
inf < infinity);
2865 assert( x.
sup > -infinity);
2870 if( (b_.
inf <= -infinity && x.
inf < 0.0 ) ||
2871 ( b_.
inf < 0.0 && x.
inf <= -infinity) ||
2872 ( b_.
sup > 0.0 && x.
sup >= infinity) ||
2873 ( b_.
sup >= infinity && x.
sup > 0.0 ) )
2888 u =
MAX(
MAX(cand1, cand2),
MAX(cand3, cand4));
2933 assert(x.
inf < 0.0 && x.
sup > 0);
2939 return MAX(cand1, cand2);
2961 if( sqrcoeff == 0.0 )
2970 lincoeff.
inf = -lincoeff.
sup;
2971 lincoeff.
sup = -tmp;
2974 assert(resultant->
sup >= resultant->
inf);
2989 assert(resultant !=
NULL);
2992 if( lincoeff.
inf <= -infinity || rhs.
sup >= infinity || sqrcoeff.
inf <= -infinity )
2994 resultant->
inf = 0.0;
3004 if( lincoeff.
sup < infinity && rhs.
inf > -infinity && sqrcoeff.
sup < infinity )
3016 if( resultant->
inf >= infinity || resultant->
sup <= -infinity )
3040 assert(resultant !=
NULL);
3041 assert(sqrcoeff < infinity);
3042 assert(sqrcoeff > -infinity);
3044 resultant->
inf = 0.0;
3052 if( lincoeff >= 0.0 )
3057 delta = b*b + sqrcoeff*rhs;
3058 if( delta < 0.0 || (sqrcoeff == 0.0 && lincoeff == 0.0) )
3069 if( sqrcoeff < 0.0 )
3075 if( sqrcoeff < 0.0 )
3077 delta = b*b + sqrcoeff*rhs;
3090 if( sqrcoeff > 0.0 )
3093 delta = b*b + sqrcoeff*rhs;
3098 resultant->
inf = z / sqrcoeff;
3108 delta = b*b + sqrcoeff * rhs;
3109 if( delta >= 0.0 && sqrcoeff <= 0.0 )
3140 assert(resultant !=
NULL);
3142 if( sqrcoeff.
inf == 0.0 && sqrcoeff.
sup == 0.0 )
3144 if( lincoeff.
inf == 0.0 && lincoeff.
sup == 0.0 )
3146 if( rhs.
inf <= 0.0 && rhs.
sup >= 0.0 )
3157 if( lincoeff.
inf == 0.0 && lincoeff.
sup == 0.0 )
3161 resultant->
inf = -resultant->
sup;
3167 SCIPdebugMessage(
" positive solutions of [%g,%g]*x^2 + [%g,%g]*x in [%g,%g] are [%g,%g]\n",
3171 lincoeff.
inf = -lincoeff.
sup;
3172 lincoeff.
sup = -tmp;
3179 SCIPdebugMessage(
" negative solutions of [%g,%g]*x^2 + [%g,%g]*x in [%g,%g] are [%g,%g]\n",
3210 assert(resultant !=
NULL);
3211 assert(xbnds.
inf <= xbnds.
sup);
3212 assert(ybnds.
inf <= ybnds.
sup);
3236 denom = 4.0 * ax * ay - axy * axy;
3239 x = (axy * by - 2.0 * ay * bx) / denom;
3240 y = (axy * bx - 2.0 * ax * by) / denom;
3241 if( xbnds.
inf <= x && x <= xbnds.
sup && ybnds.
inf <= y && y <= ybnds.
sup )
3243 val = (axy * bx * by - ay * bx * bx - ax * by * by) / denom;
3244 minval =
MIN(val, minval);
3245 maxval =
MAX(val, maxval);
3248 else if(
REALABS(2.0 * ay * bx - axy * by) <= 1e-9 )
3254 if( xbnds.
inf <= -infinity && xbnds.
sup >= infinity )
3256 val = -ay * bx * bx / (axy * axy);
3257 minval =
MIN(val, minval);
3258 maxval =
MAX(val, maxval);
3264 if( xbnds.
inf <= -infinity )
3271 else if( ax == 0.0 )
3275 if( ybnds.
inf <= -infinity )
3277 else if( bx + axy * ybnds.
inf < 0.0 )
3281 minval =
MIN(val, minval);
3282 maxval =
MAX(val, maxval);
3284 if( ybnds.
sup >= infinity )
3286 else if( bx + axy * ybnds.
sup < 0.0 )
3290 minval =
MIN(val, minval);
3291 maxval =
MAX(val, maxval);
3303 minval =
MIN(tmp.
inf, minval);
3304 maxval =
MAX(tmp.
sup, maxval);
3307 if( xbnds.
sup >= infinity )
3314 else if( ax == 0.0 )
3318 if( ybnds.
inf <= -infinity )
3320 else if( bx + axy * ybnds.
inf > 0.0 )
3324 minval =
MIN(val, minval);
3325 maxval =
MAX(val, maxval);
3327 if( ybnds.
sup >= infinity )
3329 else if( bx + axy * ybnds.
sup > 0.0 )
3333 minval =
MIN(val, minval);
3334 maxval =
MAX(val, maxval);
3346 minval =
MIN(tmp.
inf, minval);
3347 maxval =
MAX(tmp.
sup, maxval);
3350 if( ybnds.
inf <= -infinity )
3357 else if( ay == 0.0 )
3361 if( xbnds.
inf <= -infinity )
3363 else if( by + axy * xbnds.
inf < 0.0 )
3367 minval =
MIN(val, minval);
3368 maxval =
MAX(val, maxval);
3370 if( xbnds.
sup >= infinity )
3372 else if( by + axy * xbnds.
sup < 0.0 )
3376 minval =
MIN(val, minval);
3377 maxval =
MAX(val, maxval);
3389 minval =
MIN(tmp.
inf, minval);
3390 maxval =
MAX(tmp.
sup, maxval);
3393 if( ybnds.
sup >= infinity )
3400 else if( ay == 0.0 )
3404 if( xbnds.
inf <= -infinity )
3406 else if( by + axy * xbnds.
inf > 0.0 )
3410 minval =
MIN(val, minval);
3411 maxval =
MAX(val, maxval);
3413 if( xbnds.
sup >= infinity )
3415 else if( by + axy * xbnds.
sup > 0.0 )
3419 minval =
MIN(val, minval);
3420 maxval =
MAX(val, maxval);
3432 minval =
MIN(tmp.
inf, minval);
3433 maxval =
MAX(tmp.
sup, maxval);
3436 minval -= 1e-10 *
REALABS(minval);
3437 maxval += 1e-10 *
REALABS(maxval);
3440 SCIPdebugMessage(
"range for %gx^2 + %gy^2 + %gxy + %gx + %gy = [%g, %g] for x = [%g, %g], y=[%g, %g]\n",
3441 ax, ay, axy, bx, by, minval, maxval, xbnds.
inf, xbnds.
sup, ybnds.
inf, ybnds.
sup);
3465 assert(resultant !=
NULL);
3483 if( xbnds.
sup >= 0.0 )
3493 if( xbnds.
inf < 0.0 )
3544 rcoef_y = axy * bx / (2.0*ax) - by;
3545 rcoef_yy = axy * axy / (4.0*ax) - ay;
3546 rcoef_const = bx * bx / (4.0*ax);
3548 #define CALCB(y) ((bx + axy * (y)) / (2.0 * sqrtax)) 3549 #define CALCR(c,y) (rcoef_const + (c) + (rcoef_y + rcoef_yy * (y)) * (y)) 3552 if( rhs.
sup < infinity )
3560 if(
EPSN(ub, 1e-9) )
3579 if( rhs.
sup >= infinity )
3589 if( ybnds.
inf <= -infinity )
3592 if( !
EPSZ(ay, 1e-9) && axy * axy >= 4.0 * ax * ay )
3613 else if( !
EPSZ(ay, 1e-9) )
3620 minvalleft = -by / 2.0;
3621 maxvalleft = -by / 2.0;
3633 if( rhs.
sup < infinity )
3642 minvalleft =
MIN(-sqrtc - b, minvalleft);
3643 maxvalright =
MAX( sqrtc - b, maxvalright);
3647 if( rhs.
inf > -infinity )
3656 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3657 minvalright =
MIN( sqrtc - b, minvalright);
3663 if( ybnds.
sup >= infinity )
3666 if( !
EPSZ(ay, 1e-9) && axy * axy >= 4.0 * ax * ay )
3687 else if( !
EPSZ(ay, 1e-9) )
3696 minvalright =
MIN(minvalright, -by / 2.0);
3697 maxvalright =
MAX(maxvalright, -by / 2.0);
3707 if( rhs.
sup < infinity )
3716 minvalleft =
MIN(-sqrtc - b, minvalleft);
3717 maxvalright =
MAX( sqrtc - b, maxvalright);
3721 if( rhs.
inf > -infinity )
3730 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3731 minvalright =
MIN( sqrtc - b, minvalright);
3738 if( !
EPSZ(ay, 1e-9) )
3740 if(
REALABS(axy*axy - 4.0*ax*ay) > 1e-9 )
3744 if( rhs.
sup < infinity )
3746 sqrtterm = axy * axy * ay * (ay * bx * bx - axy * bx * by + ax * by * by - axy * axy * rhs.
sup + 4.0 * ax * ay * rhs.
sup);
3747 if( !
EPSN(sqrtterm, 1e-9) )
3749 sqrtterm =
sqrt(
MAX(sqrtterm, 0.0));
3751 ymin = axy * ay * bx - 2.0 * ax * ay * by - sqrtterm;
3753 ymin /= 4.0 * ax * ay - axy * axy;
3755 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3768 minvalleft =
MIN(-sqrtc - b, minvalleft);
3769 maxvalright =
MAX( sqrtc - b, maxvalright);
3774 ymin = axy * ay * bx - 2.0 * ax * ay * by + sqrtterm;
3776 ymin /= 4.0 * ax * ay - axy * axy;
3778 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3791 minvalleft =
MIN(-sqrtc - b, minvalleft);
3792 maxvalright =
MAX( sqrtc - b, maxvalright);
3798 if( rhs.
inf > -infinity )
3800 sqrtterm = axy * axy * ay * (ay * bx * bx - axy * bx * by + ax * by * by - axy * axy * rhs.
inf + 4.0 * ax * ay * rhs.
inf);
3801 if( !
EPSN(sqrtterm, 1e-9) )
3803 sqrtterm =
sqrt(
MAX(sqrtterm, 0.0));
3805 ymin = axy * ay * bx - 2.0 * ax * ay * by - sqrtterm;
3807 ymin /= 4.0 * ax * ay - axy * axy;
3809 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3822 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3823 minvalright =
MIN( sqrtc - b, minvalright);
3828 ymin = axy * ay * bx - 2.0 * ax * ay * by + sqrtterm;
3830 ymin /= 4.0 * ax * ay - axy * axy;
3832 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3845 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3846 minvalright =
MIN( sqrtc - b, minvalright);
3853 else if(
REALABS(2.0 * ay * bx - axy * by) > 1e-9 )
3855 if( rhs.
sup < infinity )
3857 ymin = - (4.0 * ay * bx * by - axy * by * by + 4.0 * axy * ay * rhs.
sup);
3859 ymin /= 2.0 * ay * bx - axy * by;
3861 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3874 minvalleft =
MIN(-sqrtc - b, minvalleft);
3875 maxvalright =
MAX( sqrtc - b, maxvalright);
3880 if( rhs.
inf > -infinity )
3882 ymin = - (4.0 * ay * bx * by - axy * by * by + 4.0 * axy * ay * rhs.
inf);
3884 ymin /= 2.0 * ay * bx - axy * by;
3886 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3899 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3900 minvalright =
MIN( sqrtc - b, minvalright);
3931 if( ybnds.
sup >= 0.0 )
3939 assert(ypos.
inf >= 0.0);
3941 minvalleft =
MIN(minvalleft, -b);
3942 maxvalleft =
MAX(maxvalleft, -b);
3943 minvalright =
MIN(minvalright, -b);
3944 maxvalright =
MAX(maxvalright, -b);
3946 if( ypos.
sup < infinity )
3949 minvalleft =
MIN(minvalleft, -b);
3950 maxvalleft =
MAX(maxvalleft, -b);
3951 minvalright =
MIN(minvalright, -b);
3952 maxvalright =
MAX(maxvalright, -b);
3975 if( ybnds.
inf < 0.0 )
3989 if( yneg.
inf > -infinity )
3992 minvalleft =
MIN(minvalleft, -b);
3993 maxvalleft =
MAX(maxvalleft, -b);
3994 minvalright =
MIN(minvalright, -b);
3995 maxvalright =
MAX(maxvalright, -b);
4012 assert(yneg.
sup <= 0.0);
4014 minvalleft =
MIN(minvalleft, -b);
4015 maxvalleft =
MAX(maxvalleft, -b);
4016 minvalright =
MIN(minvalright, -b);
4017 maxvalright =
MAX(maxvalright, -b);
4022 if( rhs.
inf > -infinity && xbnds.
inf > -infinity &&
EPSGT(xbnds.
inf, maxvalleft / sqrtax, 1e-9) )
4026 assert(
EPSGE(minvalright, minvalleft, 1e-9));
4027 if( minvalright > -infinity )
4029 assert(minvalright < infinity);
4036 if( minvalleft > -infinity )
4038 assert(minvalleft < infinity);
4043 if( rhs.
inf > -infinity && xbnds.
sup < infinity &&
EPSLT(xbnds.
sup, minvalright / sqrtax, 1e-9) )
4047 assert(
EPSLE(maxvalleft, maxvalright, 1e-9));
4048 if( maxvalleft < infinity )
4050 assert(maxvalleft > -infinity);
4057 if( maxvalright < infinity )
4059 assert(maxvalright > -infinity);
4081 if(
EPSGE(-bx / axy, ybnds.
inf, 1e-9) &&
EPSLE(-bx / axy, ybnds.
sup, 1e-9) )
4091 if( xbnds.
inf < 0.0 && xbnds.
sup > 0.0 )
4109 if( lincoef.
inf == 0.0 && lincoef.
sup == 0.0 )
4112 if( myrhs.
inf <= 0.0 && myrhs.
sup >= 0.0 )
4117 else if( xbnds.
inf >= 0.0 )
4129 assert(xbnds.
sup <= 0.0);
4148 if( bx + axy * (axy > 0.0 ? ybnds.
inf : ybnds.
sup) > 0.0 )
4153 if( c > -infinity && c < infinity )
4155 if( ybnds.
inf <= -infinity )
4158 if(
EPSZ(ay, 1e-9) )
4160 else if( ay * axy < 0.0 )
4165 val = (c - ay * ybnds.
inf * ybnds.
inf - by * ybnds.
inf) / (bx + axy * ybnds.
inf);
4166 minval =
MIN(val, minval);
4169 if( ybnds.
sup >= infinity )
4172 if(
EPSZ(ay, 1e-9) )
4173 minval =
MIN(minval, -by / axy);
4174 else if( ay * axy > 0.0 )
4179 val = (c - ay * ybnds.
sup * ybnds.
sup - by * ybnds.
sup) / (bx + axy * ybnds.
sup);
4180 minval =
MIN(val, minval);
4183 if( !
EPSZ(ay, 1e-9) )
4185 d = ay * (ay * bx * bx - axy * (bx * by + axy * c));
4186 if( !
EPSN(d, 1e-9) )
4188 ymin = -ay * bx +
sqrt(
MAX(d, 0.0));
4191 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
4193 assert(bx + axy * ymin != 0.0);
4195 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4196 minval =
MIN(val, minval);
4199 ymin = -ay * bx -
sqrt(
MAX(d, 0.0));
4202 if(ymin > ybnds.
inf && ymin < ybnds.
sup )
4204 assert(bx + axy * ymin != 0.0);
4206 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4207 minval =
MIN(val, minval);
4218 if( bx + axy * (axy > 0.0 ? ybnds.
inf : ybnds.
sup) > 0.0 )
4223 if( c > -infinity && c < infinity )
4225 if( ybnds.
inf <= -infinity )
4228 if(
EPSZ(ay, 1e-9) )
4230 else if( ay * axy > 0.0 )
4235 val = (c - ay * ybnds.
inf * ybnds.
inf - by * ybnds.
inf) / (bx + axy * ybnds.
inf);
4236 maxval =
MAX(val, maxval);
4239 if( ybnds.
sup >= infinity )
4242 if(
EPSZ(ay, 1e-9) )
4243 maxval =
MAX(maxval, -by / axy);
4244 else if( ay * axy < 0.0 )
4249 val = (c - ay * ybnds.
sup * ybnds.
sup - by * ybnds.
sup) / (bx + axy * ybnds.
sup);
4250 maxval =
MAX(val, maxval);
4253 if( !
EPSZ(ay, 1e-9) )
4255 d = ay * (ay * bx * bx - axy * (bx * by + axy * c));
4256 if( !
EPSN(d, 1e-9) )
4258 ymin = ay * bx +
sqrt(
MAX(d, 0.0));
4261 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4262 maxval =
MAX(val, maxval);
4264 ymin = ay * bx -
sqrt(
MAX(d, 0.0));
4267 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4268 maxval =
MAX(val, maxval);
4277 if( minval > -infinity )
4278 resultant->
inf = minval - 1e-10 *
REALABS(minval);
4281 if( maxval < infinity )
4282 resultant->
sup = maxval + 1e-10 *
REALABS(maxval);
void SCIPintervalSignPowerScalar(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)
void SCIPintervalMulSup(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 SCIPintervalMax(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
SCIP_Bool SCIPintervalIsEmpty(SCIP_Real infinity, SCIP_INTERVAL operand)
void SCIPintervalSign(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
void SCIPintervalAddSup(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
#define SCIP_ROUND_NEAREST
SCIP_Real SCIPintervalNegateReal(SCIP_Real x)
SCIPInterval pow(const SCIPInterval &x, const SCIPInterval &y)
SCIPInterval cos(const SCIPInterval &x)
void SCIPintervalSetRoundingMode(SCIP_ROUNDMODE roundmode)
void SCIPintervalMul(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
SCIP_Real SCIPintervalPowerScalarIntegerInf(SCIP_Real operand1, int operand2)
void SCIPintervalMin(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
SCIPInterval exp(const SCIPInterval &x)
void SCIPintervalSetBounds(SCIP_INTERVAL *resultant, SCIP_Real inf, SCIP_Real sup)
void SCIPintervalPowerScalar(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
static SCIP_Real negate(SCIP_Real x)
SCIP_Bool SCIPintervalIsNegativeInfinity(SCIP_Real infinity, SCIP_INTERVAL operand)
SCIP_Real SCIPnegateReal(SCIP_Real x)
void SCIPintervalDiv(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)
void SCIPintervalSolveUnivariateQuadExpression(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL sqrcoeff, SCIP_INTERVAL lincoeff, SCIP_INTERVAL rhs)
SCIP_Bool SCIPintervalIsPositiveInfinity(SCIP_Real infinity, SCIP_INTERVAL operand)
void SCIPintervalSin(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
void SCIPintervalPowerScalarScalar(SCIP_INTERVAL *resultant, SCIP_Real operand1, SCIP_Real operand2)
SCIP_Bool SCIPintervalIsEntire(SCIP_Real infinity, SCIP_INTERVAL operand)
void SCIPintervalScalprod(SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_INTERVAL *operand2)
interval arithmetics for provable bounds
void SCIPintervalSetEmpty(SCIP_INTERVAL *resultant)
SCIP_Real SCIPintervalGetInf(SCIP_INTERVAL interval)
void SCIPintervalLog(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
SCIPInterval sqrt(const SCIPInterval &x)
void SCIPintervalScalprodScalarsInf(SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_Real *operand2)
internal miscellaneous methods
#define SCIP_ROUND_UPWARDS
void SCIPintervalSet(SCIP_INTERVAL *resultant, SCIP_Real value)
void SCIPintervalPowerScalarInteger(SCIP_INTERVAL *resultant, SCIP_Real operand1, int operand2)
void SCIPintervalSolveUnivariateQuadExpressionPositiveAllScalar(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_Real sqrcoeff, SCIP_Real lincoeff, SCIP_Real rhs)
void SCIPintervalCos(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
SCIPInterval sin(const SCIPInterval &x)
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 SCIPintervalSquareRoot(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
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 SCIPintervalSquare(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
void SCIPintervalScalprodScalars(SCIP_Real infinity, SCIP_INTERVAL *resultant, int length, SCIP_INTERVAL *operand1, SCIP_Real *operand2)
SCIP_Bool SCIPintervalHasRoundingControl(void)
void SCIPintervalSetRoundingModeTowardsZero(void)
void SCIPintervalAdd(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
SCIP_Real SCIPintervalGetSup(SCIP_INTERVAL interval)
SCIP_Bool SCIPintervalAreDisjoint(SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
SCIPInterval log(const SCIPInterval &x)
void SCIPintervalMulScalarSup(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
#define SCIP_ROUND_DOWNWARDS
void SCIPintervalAbs(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
void SCIPintervalMulScalarInf(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
void SCIPintervalSetEntire(SCIP_Real infinity, SCIP_INTERVAL *resultant)
SCIP_Real SCIPintervalQuadUpperBound(SCIP_Real infinity, SCIP_Real a, SCIP_INTERVAL b_, SCIP_INTERVAL x)
void SCIPintervalSetRoundingModeUpwards(void)
void SCIPintervalExp(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
public methods for message output
SCIP_Real SCIPintervalPowerScalarIntegerSup(SCIP_Real operand1, int operand2)
void SCIPintervalIntersect(SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalMulScalar(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
void SCIPintervalSetRoundingModeToNearest(void)
void SCIPintervalMulInf(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalSub(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
common defines and data types used in all packages of SCIP
void SCIPintervalAddScalar(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_Real operand2)
SCIP_ROUNDMODE SCIPintervalGetRoundingMode(void)
void SCIPintervalPower(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalSetRoundingModeDownwards(void)
void SCIPintervalReciprocal(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand)
void SCIPintervalPowerScalarInverse(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL basedomain, SCIP_Real exponent, SCIP_INTERVAL image)
SCIP_Bool SCIPintervalIsSubsetEQ(SCIP_Real infinity, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalAddInf(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL operand1, SCIP_INTERVAL operand2)
void SCIPintervalSolveUnivariateQuadExpressionPositive(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_INTERVAL sqrcoeff, SCIP_INTERVAL lincoeff, SCIP_INTERVAL rhs)
void SCIPintervalScalprodScalarsSup(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 SCIPintervalQuad(SCIP_Real infinity, SCIP_INTERVAL *resultant, SCIP_Real sqrcoeff, SCIP_INTERVAL lincoeff, SCIP_INTERVAL xrng)