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)
318 if( ((ix>=0x7ff00000) && ((ix-0x7ff00000)|lx) != 0 ) ||
319 ( (iy>=0x7ff00000) && ((iy-0x7ff00000)|ly) != 0 ))
331 __HI(x) = hy&0x80000000;
344 if( hx > hy || ((hx == hy) && (lx > ly)) )
361 if( hy >= 0 || hx > hy || ((hx == hy) && (lx > ly)) )
378 if( hy >= 0x7ff00000 )
380 if( hy < 0x00100000 )
452 #undef SCIPintervalGetInf 453 #undef SCIPintervalGetSup 454 #undef SCIPintervalSet 455 #undef SCIPintervalSetBounds 456 #undef SCIPintervalSetEmpty 457 #undef SCIPintervalIsEmpty 458 #undef SCIPintervalSetEntire 459 #undef SCIPintervalIsEntire 460 #undef SCIPintervalIsPositiveInfinity 461 #undef SCIPintervalIsNegativeInfinity 485 assert(resultant !=
NULL);
487 resultant->
inf = value;
488 resultant->
sup = value;
498 assert(resultant !=
NULL);
501 resultant->
inf = inf;
502 resultant->
sup = sup;
510 assert(resultant !=
NULL);
512 resultant->
inf = 1.0;
513 resultant->
sup = -1.0;
522 if( operand.
sup >= infinity || operand.
inf <= -infinity )
525 return operand.
sup < operand.
inf;
534 assert(resultant !=
NULL);
555 return operand.
inf >= infinity && operand.
sup >= operand.
inf;
564 return operand.
sup <= -infinity && operand.
inf <= operand.
sup;
575 if( operand1.
inf > operand1.
sup )
579 if( operand2.
inf > operand2.
sup )
582 return (
MAX(-infinity, operand1.
inf) >= operand2.
inf) &&
583 (
MIN( infinity, operand1.
sup) <= operand2.
sup);
592 return (operand1.
sup < operand2.
inf) || (operand2.
sup < operand1.
inf);
602 assert(resultant !=
NULL);
615 assert(resultant !=
NULL);
617 if( operand1.
inf > operand1.
sup )
620 *resultant = operand2;
624 if( operand2.
inf > operand2.
sup )
627 *resultant = operand1;
644 assert(resultant !=
NULL);
647 if( operand1.
inf <= -infinity || operand2.
inf <= -infinity )
652 else if( operand1.
inf >= infinity || operand2.
inf >= infinity )
658 resultant->
inf = operand1.
inf + operand2.
inf;
671 assert(resultant !=
NULL);
674 if( operand1.
sup >= infinity || operand2.
sup >= infinity )
679 else if( operand1.
sup <= -infinity || operand2.
sup <= -infinity )
685 resultant->
sup = operand1.
sup + operand2.
sup;
699 assert(resultant !=
NULL);
726 assert(resultant !=
NULL);
732 if( operand1.
inf <= -infinity || operand2 <= -infinity )
736 else if( operand1.
inf >= infinity || operand2 >= infinity )
744 resultant->
inf = operand1.
inf + operand2;
748 if( operand1.
sup >= infinity || operand2 >= infinity )
752 else if( operand1.
sup <= -infinity || operand2 <= -infinity )
760 resultant->
sup = operand1.
sup + operand2;
782 for( i = 0; i < length; ++i )
788 for( i = 0; i < length; ++i )
806 assert(resultant !=
NULL);
812 if( operand1.
inf <= -infinity || operand2.
sup >= infinity )
815 else if( operand1.
inf >= infinity || operand2.
sup <= -infinity )
824 resultant->
inf = operand1.
inf - operand2.
sup;
827 if( operand1.
sup >= infinity || operand2.
inf <= -infinity )
830 else if( operand1.
sup <= -infinity || operand2.
inf >= infinity )
832 assert(resultant->
inf == -infinity);
838 resultant->
sup = operand1.
sup - operand2.
inf;
863 assert(resultant !=
NULL);
869 if( operand1.
inf >= infinity )
872 assert(operand1.
sup >= infinity);
875 else if( operand2.
inf >= infinity )
878 assert(operand2.
sup >= infinity);
881 else if( operand1.
sup <= -infinity )
884 assert(operand1.
inf <= -infinity);
887 else if( operand2.
sup <= -infinity )
890 assert(operand2.
inf <= -infinity);
893 else if( ( operand1.
inf <= -infinity && operand2.
sup > 0.0 )
894 || ( operand1.
sup > 0.0 && operand2.
inf <= -infinity )
895 || ( operand1.
inf < 0.0 && operand2.
sup >= infinity )
896 || ( operand1.
sup >= infinity && operand2.
inf < 0.0 ) )
907 cand1 = operand1.
inf * operand2.
inf;
908 cand2 = operand1.
inf * operand2.
sup;
909 cand3 = operand1.
sup * operand2.
inf;
910 cand4 = operand1.
sup * operand2.
sup;
911 resultant->
inf =
MIN(
MIN(cand1, cand2),
MIN(cand3, cand4));
923 assert(resultant !=
NULL);
929 if( operand1.
inf >= infinity )
932 assert(operand1.
sup >= infinity);
935 else if( operand2.
inf >= infinity )
938 assert(operand2.
sup >= infinity);
941 else if( operand1.
sup <= -infinity )
944 assert(operand1.
inf <= -infinity);
947 else if( operand2.
sup <= -infinity )
950 assert(operand2.
inf <= -infinity);
953 else if( ( operand1.
inf <= -infinity && operand2.
inf < 0.0 )
954 || ( operand1.
inf < 0.0 && operand2.
inf <= -infinity )
955 || ( operand1.
sup > 0.0 && operand2.
sup >= infinity )
956 || ( operand1.
sup >= infinity && operand2.
sup > 0.0 ) )
967 cand1 = operand1.
inf * operand2.
inf;
968 cand2 = operand1.
inf * operand2.
sup;
969 cand3 = operand1.
sup * operand2.
inf;
970 cand4 = operand1.
sup * operand2.
sup;
971 resultant->
sup =
MAX(
MAX(cand1, cand2),
MAX(cand3, cand4));
985 assert(resultant !=
NULL);
1011 assert(resultant !=
NULL);
1014 if( operand2 >= infinity )
1017 if( operand1.
inf > 0 )
1019 else if( operand1.
inf < 0 )
1022 resultant->
inf = 0.0;
1024 else if( operand2 <= -infinity )
1027 if( operand1.
sup > 0 )
1029 else if( operand1.
sup < 0 )
1032 resultant->
inf = 0.0;
1034 else if( operand2 == 0.0 )
1036 resultant->
inf = 0.0;
1038 else if( operand2 > 0.0 )
1040 if( operand1.
inf <= -infinity )
1042 else if( operand1.
inf >= infinity )
1045 resultant->
inf = operand1.
inf * operand2;
1049 if( operand1.
sup >= infinity )
1051 else if( operand1.
sup <= -infinity )
1054 resultant->
inf = operand1.
sup * operand2;
1067 assert(resultant !=
NULL);
1070 if( operand2 >= infinity )
1073 if( operand1.
sup > 0 )
1075 else if( operand1.
sup < 0 )
1078 resultant->
sup = 0.0;
1080 else if( operand2 <= -infinity )
1083 if( operand1.
inf > 0 )
1085 else if( operand1.
inf < 0 )
1088 resultant->
sup = 0.0;
1090 else if( operand2 == 0.0 )
1092 resultant->
sup = 0.0;
1094 else if( operand2 > 0.0 )
1096 if( operand1.
sup >= infinity )
1098 else if( operand1.
sup <= -infinity )
1101 resultant->
sup = operand1.
sup * operand2;
1105 if( operand1.
inf <= -infinity )
1107 else if( operand1.
inf >= infinity )
1110 resultant->
sup = operand1.
inf * operand2;
1124 assert(resultant !=
NULL);
1151 assert(resultant !=
NULL);
1155 if( operand2.
inf <= 0.0 && operand2.
sup >= 0.0 )
1162 if( operand1.
inf == 0.0 && operand1.
sup == 0.0 )
1171 if( operand2.
sup >= infinity || operand2.
sup <= -infinity )
1178 intmed.
inf = 1.0 / operand2.
sup;
1180 if( operand2.
inf <= -infinity || operand2.
inf >= infinity )
1187 intmed.
sup = 1.0 / operand2.
inf;
1204 assert(resultant !=
NULL);
1209 if( operand2 >= infinity || operand2 <= -infinity )
1212 resultant->
inf = 0.0;
1213 resultant->
sup = 0.0;
1215 else if( operand2 > 0.0 )
1217 if( operand1.
inf <= -infinity )
1219 else if( operand1.
inf >= infinity )
1227 resultant->
inf = operand1.
inf / operand2;
1230 if( operand1.
sup >= infinity )
1232 else if( operand1.
sup <= -infinity )
1240 resultant->
sup = operand1.
sup / operand2;
1243 else if( operand2 < 0.0 )
1245 if( operand1.
sup >= infinity )
1247 else if( operand1.
sup <= -infinity )
1255 resultant->
inf = operand1.
sup / operand2;
1258 if( operand1.
inf <= -infinity )
1260 else if( operand1.
inf >= infinity )
1268 resultant->
sup = operand1.
inf / operand2;
1273 if( operand1.
inf >= 0 )
1279 else if( operand1.
sup <= 0 )
1312 resultant->
inf = 0.0;
1313 resultant->
sup = 0.0;
1317 for( i = 0; i < length && resultant->
inf > -
infinity; ++i )
1323 assert(resultant->
sup == 0.0);
1327 for( i = 0; i < length && resultant->
sup <
infinity ; ++i )
1353 resultant->
inf = 0.0;
1357 for( i = 0; i < length && resultant->
inf > -
infinity; ++i )
1360 assert(prod.
sup >= infinity);
1381 resultant->
sup = 0.0;
1385 for( i = 0; i < length && resultant->
sup <
infinity; ++i )
1388 assert(prod.
inf <= -infinity);
1406 resultant->
inf = 0.0;
1407 resultant->
sup = 0.0;
1412 assert(resultant->
sup == 0.0);
1430 assert(resultant !=
NULL);
1435 if( operand.
sup <= 0.0 )
1437 if( operand.
sup <= -infinity )
1442 resultant->
inf = operand.
sup * operand.
sup;
1445 if( operand.
inf <= -infinity )
1450 resultant->
sup = operand.
inf * operand.
inf;
1453 else if( operand.
inf >= 0.0 )
1455 if( operand.
inf >= infinity )
1460 resultant->
inf = operand.
inf * operand.
inf;
1463 if( operand.
sup >= infinity )
1468 resultant->
sup = operand.
sup * operand.
sup;
1473 resultant->
inf = 0.0;
1474 if( operand.
inf <= -infinity || operand.
sup >= infinity )
1482 x = operand.
inf * operand.
inf;
1483 y = operand.
sup * operand.
sup;
1484 resultant->
sup =
MAX(x, y);
1500 assert(resultant !=
NULL);
1503 if( operand.
sup < 0.0 )
1509 if( operand.
inf == operand.
sup )
1511 if( operand.
inf >= infinity )
1529 if( operand.
inf <= 0.0 )
1530 resultant->
inf = 0.0;
1531 else if( operand.
inf >= infinity )
1542 if( operand.
sup >= infinity )
1562 assert(resultant !=
NULL);
1566 if( operand2.
inf == operand2.
sup )
1596 assert(operand1 >= 0.0);
1598 if( operand1 == 0.0 )
1600 assert(operand2 >= 0);
1608 if( operand1 == 1.0 || operand2 == 0 )
1615 assert(result != 0.0);
1619 result = 1.0 / result;
1630 n = (
unsigned int)operand2;
1649 result = result * z;
1678 assert(operand1 >= 0.0);
1680 if( operand1 == 0.0 )
1682 assert(operand2 >= 0);
1690 if( operand1 == 1.0 || operand2 == 0 )
1697 assert(result != 0.0);
1701 result = 1.0 / result;
1712 n = (
unsigned int)operand2;
1723 result = result * z;
1752 assert(operand1 >= 0.0);
1754 if( operand1 == 0.0 )
1756 assert(operand2 >= 0);
1770 if( operand1 == 1.0 || operand2 == 0 )
1780 assert(resultant->
inf > 0.0 || resultant->
sup < 0.0);
1797 n = (
unsigned int)operand2;
1810 result_sup = result_sup * z_sup;
1818 z_sup = z_sup * z_sup;
1824 resultant->
inf = result_inf;
1825 resultant->
sup = result_sup;
1826 assert(resultant->
inf <= resultant->
sup);
1843 assert(resultant !=
NULL);
1845 if( operand1 == 0.0 )
1847 assert(operand2 >= 0);
1861 if( operand1 == 1.0 || operand2 == 0 )
1868 result =
pow(operand1, operand2);
1887 assert(resultant !=
NULL);
1890 if( operand2 == infinity )
1896 if( operand1.
inf < 0.0 )
1899 resultant->
inf = 0.0;
1900 if( operand1.
sup > 0.0 )
1903 resultant->
sup = 0.0;
1907 if( operand2 == 0.0 )
1909 if( operand1.
inf == 0.0 && operand1.
sup == 0.0 )
1911 resultant->
inf = 0.0;
1912 resultant->
sup = 0.0;
1914 else if( operand1.
inf <= 0.0 || operand1.
sup >= 0.0 )
1916 resultant->
inf = 0.0;
1917 resultant->
sup = 1.0;
1921 resultant->
inf = 1.0;
1922 resultant->
sup = 1.0;
1927 if( operand2 == 1.0 )
1930 *resultant = operand1;
1934 op2isint = (ceil(operand2) == operand2);
1936 if( !op2isint && operand1.
inf < 0.0 )
1939 if( operand1.
sup < operand1.
inf )
1946 if( operand1.
inf >= 0.0 )
1948 if( operand2 >= 0.0 )
1951 if( operand1.
inf >= infinity )
1953 else if( operand1.
inf > 0.0 )
1959 resultant->
inf = 0.0;
1961 if( operand1.
sup >= infinity )
1963 else if( operand1.
sup > 0.0 )
1969 resultant->
sup = 0.0;
1973 if( operand1.
sup >= infinity )
1974 resultant->
inf = 0.0;
1975 else if( operand1.
sup == 0.0 )
1979 if( ceil(operand2/2) == operand2/2 )
1991 if( operand1.
inf == 0.0 )
2000 else if( operand1.
sup <= 0.0 )
2003 if( operand2 >= 0.0 && ceil(operand2/2) == operand2/2 )
2006 if( operand1.
sup == -infinity )
2012 if( operand1.
inf <= -infinity )
2017 else if( operand2 <= 0.0 && ceil(operand2/2) != operand2/2 )
2020 if( operand1.
sup == -infinity )
2022 resultant->
inf = 0.0;
2023 else if( operand1.
sup == 0.0 )
2029 if( operand1.
inf <= -infinity )
2031 resultant->
sup = 0.0;
2032 else if( operand1.
inf == 0.0 )
2038 else if( operand2 >= 0.0 )
2041 if( operand1.
inf <= -infinity )
2046 if( operand1.
sup <= -infinity )
2054 if( operand1.
inf <= -infinity )
2055 resultant->
inf = 0.0;
2056 else if( operand1.
inf == 0.0 )
2062 if( operand1.
sup <= -infinity )
2063 resultant->
sup = 0.0;
2064 else if( operand1.
sup == 0.0 )
2070 assert(resultant->
inf <= resultant->
sup || resultant->
inf >= infinity || resultant->
sup <= -infinity);
2075 if( operand2 >= 0.0 && operand2/2 == ceil(operand2/2) )
2078 resultant->
inf = 0.0;
2079 if( operand1.
inf == -infinity || operand1.
sup == infinity )
2084 else if( operand2 <= 0.0 && ceil(operand2/2) == operand2/2 )
2088 if( operand1.
inf == -infinity || operand1.
sup == infinity )
2089 resultant->
inf = 0.0;
2093 else if( operand2 >= 0.0 )
2096 if( operand1.
inf == -infinity )
2100 if( operand1.
sup == infinity )
2116 if( resultant->
inf > infinity )
2118 if( resultant->
sup < -infinity )
2137 assert(resultant !=
NULL);
2138 assert(image.
inf <= image.
sup);
2139 assert(basedomain.
inf <= basedomain.
sup);
2141 if( exponent == 0.0 )
2144 if( image.
inf <= 1.0 && image.
sup >= 1.0 )
2147 *resultant = basedomain;
2149 else if( image.
inf <= 0.0 && image.
sup >= 0.0 )
2173 if( image.
sup >= 0.0 )
2177 if( basedomain.
inf <= -resultant->
inf &&
EPSISINT(exponent, 0.0) && (
int)exponent % 2 == 0 )
2179 if( basedomain.
sup < resultant->
inf )
2191 if( image.
inf < 0.0 && basedomain.
inf < 0.0 &&
EPSISINT(exponent, 0.0) && ((
int)exponent % 2 != 0) )
2215 assert(resultant !=
NULL);
2218 assert(operand2 >= 0.0);
2220 if( operand2 == infinity )
2226 if( operand1.
inf < 0.0 )
2229 resultant->
inf = 0.0;
2230 if( operand1.
sup > 0.0 )
2233 resultant->
sup = 0.0;
2237 if( operand2 == 0.0 )
2240 if( operand1.
inf < 0.0 )
2241 resultant->
inf = -1.0;
2242 else if( operand1.
inf == 0.0 )
2243 resultant->
inf = 0.0;
2245 resultant->
inf = 1.0;
2247 if( operand1.
sup < 0.0 )
2248 resultant->
sup = -1.0;
2249 else if( operand1.
sup == 0.0 )
2250 resultant->
sup = 0.0;
2252 resultant->
sup = 1.0;
2257 if( operand2 == 1.0 )
2259 *resultant = operand1;
2265 if( operand2 == 2.0 )
2267 if( operand1.
inf <= -infinity )
2271 else if( operand1.
inf >= infinity )
2275 else if( operand1.
inf > 0.0 )
2278 resultant->
inf = operand1.
inf * operand1.
inf;
2287 if( operand1.
sup >= infinity )
2291 else if( operand1.
sup <= -infinity )
2295 else if( operand1.
sup > 0.0 )
2298 resultant->
sup = operand1.
sup * operand1.
sup;
2306 assert(resultant->
inf <= resultant->
sup);
2308 else if( operand2 == 0.5 )
2310 if( operand1.
inf <= -infinity )
2312 else if( operand1.
inf >= infinity )
2314 else if( operand1.
inf >= 0.0 )
2325 if( operand1.
sup >= infinity )
2327 else if( operand1.
sup <= -infinity )
2329 else if( operand1.
sup > 0.0 )
2339 assert(resultant->
inf <= resultant->
sup);
2343 if( operand1.
inf <= -infinity )
2345 else if( operand1.
inf >= infinity )
2347 else if( operand1.
inf > 0.0 )
2358 if( operand1.
sup >= infinity )
2360 else if( operand1.
sup <= -infinity )
2362 else if( operand1.
sup > 0.0 )
2387 assert(resultant !=
NULL);
2390 if( operand.
inf == 0.0 && operand.
sup == 0.0 )
2399 if( operand.
inf >= 0.0 )
2401 if( operand.
sup >= infinity )
2402 resultant->
inf = 0.0;
2406 resultant->
inf = 1.0 / operand.
sup;
2409 if( operand.
inf >= infinity )
2410 resultant->
sup = 0.0;
2411 else if( operand.
inf == 0.0 )
2416 resultant->
sup = 1.0 / operand.
inf;
2421 else if( operand.
sup <= 0.0 )
2423 if( operand.
sup <= -infinity )
2424 resultant->
inf = 0.0;
2425 else if( operand.
sup == 0.0 )
2430 resultant->
inf = 1.0 / operand.
sup;
2433 if( operand.
inf <= -infinity )
2438 resultant->
sup = 1.0 / operand.
inf;
2458 assert(resultant !=
NULL);
2461 if( operand.
sup <= -infinity )
2463 resultant->
inf = 0.0;
2464 resultant->
sup = 0.0;
2468 if( operand.
inf >= infinity )
2475 if( operand.
inf == operand.
sup )
2477 if( operand.
inf == 0.0 )
2479 resultant->
inf = 1.0;
2480 resultant->
sup = 1.0;
2495 if( operand.
inf <= -infinity )
2497 resultant->
inf = 0.0;
2499 else if( operand.
inf == 0.0 )
2501 resultant->
inf = 1.0;
2508 if( resultant->
inf >= infinity )
2512 if( operand.
sup >= infinity )
2516 else if( operand.
sup == 0.0 )
2518 resultant->
sup = 1.0;
2524 if( resultant->
sup < -infinity )
2538 assert(resultant !=
NULL);
2544 if( operand.
sup <= 0.0 )
2550 if( operand.
inf == operand.
sup )
2552 if( operand.
sup == 1.0 )
2554 resultant->
inf = 0.0;
2555 resultant->
sup = 0.0;
2570 if( operand.
inf <= 0.0 )
2574 else if( operand.
inf == 1.0 )
2576 resultant->
inf = 0.0;
2584 if( operand.
sup >= infinity )
2588 else if( operand.
sup == 1.0 )
2590 resultant->
sup = 0.0;
2607 assert(resultant !=
NULL);
2623 assert(resultant !=
NULL);
2638 assert(resultant !=
NULL);
2641 if( operand.
inf <= 0.0 && operand.
sup >= 0.0)
2643 resultant->
inf = 0.0;
2646 else if( operand.
inf > 0.0 )
2648 *resultant = operand;
2652 resultant->
inf = -operand.
sup;
2653 resultant->
sup = -operand.
inf;
2677 assert(resultant !=
NULL);
2680 intervallen = operand.
sup - operand.
inf;
2681 if( intervallen >= 2*
M_PI )
2687 modinf = fmod(operand.
inf, 2*
M_PI);
2690 modsup = modinf + intervallen;
2694 if( modinf <= extremepoints[b] )
2702 if( modsup <= extremepoints[b] )
2735 if( resultant->
inf > -1.0 )
2737 if( resultant->
sup < 1.0 )
2740 assert(resultant->
inf <= resultant->
sup);
2763 assert(resultant !=
NULL);
2766 intervallen = operand.
sup - operand.
inf;
2767 if( intervallen >= 2*M_PI )
2773 modinf = fmod(operand.
inf, 2*M_PI);
2776 modsup = modinf + intervallen;
2780 if( modinf <= extremepoints[b] )
2788 if( modsup <= extremepoints[b] )
2821 if( resultant->
inf > -1.0 )
2823 if( resultant->
sup < 1.0 )
2826 assert(resultant->
inf <= resultant->
sup);
2836 assert(resultant !=
NULL);
2839 if( operand.
sup < 0.0 )
2841 resultant->
inf = -1.0;
2842 resultant->
sup = -1.0;
2844 else if( operand.
inf >= 0.0 )
2846 resultant->
inf = 1.0;
2847 resultant->
sup = 1.0;
2851 resultant->
inf = -1.0;
2852 resultant->
sup = 1.0;
2870 assert(b_.
inf < infinity);
2871 assert(b_.
sup > -infinity);
2872 assert( x.
inf < infinity);
2873 assert( x.
sup > -infinity);
2878 if( (b_.
inf <= -infinity && x.
inf < 0.0 ) ||
2879 ( b_.
inf < 0.0 && x.
inf <= -infinity) ||
2880 ( b_.
sup > 0.0 && x.
sup >= infinity) ||
2881 ( b_.
sup >= infinity && x.
sup > 0.0 ) )
2896 u =
MAX(
MAX(cand1, cand2),
MAX(cand3, cand4));
2941 assert(x.
inf < 0.0 && x.
sup > 0);
2947 return MAX(cand1, cand2);
2969 if( sqrcoeff == 0.0 )
2978 lincoeff.
inf = -lincoeff.
sup;
2979 lincoeff.
sup = -tmp;
2982 assert(resultant->
sup >= resultant->
inf);
2997 assert(resultant !=
NULL);
3000 if( lincoeff.
inf <= -infinity || rhs.
sup >= infinity || sqrcoeff.
inf <= -infinity )
3002 resultant->
inf = 0.0;
3012 if( lincoeff.
sup < infinity && rhs.
inf > -infinity && sqrcoeff.
sup < infinity )
3024 if( resultant->
inf >= infinity || resultant->
sup <= -infinity )
3048 assert(resultant !=
NULL);
3049 assert(sqrcoeff < infinity);
3050 assert(sqrcoeff > -infinity);
3052 resultant->
inf = 0.0;
3060 if( lincoeff >= 0.0 )
3065 delta = b*b + sqrcoeff*rhs;
3066 if( delta < 0.0 || (sqrcoeff == 0.0 && lincoeff == 0.0) )
3077 if( sqrcoeff < 0.0 )
3083 if( sqrcoeff < 0.0 )
3085 delta = b*b + sqrcoeff*rhs;
3098 if( sqrcoeff > 0.0 )
3101 delta = b*b + sqrcoeff*rhs;
3106 resultant->
inf = z / sqrcoeff;
3116 delta = b*b + sqrcoeff * rhs;
3117 if( delta >= 0.0 && sqrcoeff <= 0.0 )
3148 assert(resultant !=
NULL);
3150 if( sqrcoeff.
inf == 0.0 && sqrcoeff.
sup == 0.0 )
3152 if( lincoeff.
inf == 0.0 && lincoeff.
sup == 0.0 )
3154 if( rhs.
inf <= 0.0 && rhs.
sup >= 0.0 )
3165 if( lincoeff.
inf == 0.0 && lincoeff.
sup == 0.0 )
3169 resultant->
inf = -resultant->
sup;
3175 SCIPdebugMessage(
" positive solutions of [%g,%g]*x^2 + [%g,%g]*x in [%g,%g] are [%g,%g]\n",
3179 lincoeff.
inf = -lincoeff.
sup;
3180 lincoeff.
sup = -tmp;
3187 SCIPdebugMessage(
" negative solutions of [%g,%g]*x^2 + [%g,%g]*x in [%g,%g] are [%g,%g]\n",
3218 assert(resultant !=
NULL);
3219 assert(xbnds.
inf <= xbnds.
sup);
3220 assert(ybnds.
inf <= ybnds.
sup);
3244 denom = 4.0 * ax * ay - axy * axy;
3247 x = (axy * by - 2.0 * ay * bx) / denom;
3248 y = (axy * bx - 2.0 * ax * by) / denom;
3249 if( xbnds.
inf <= x && x <= xbnds.
sup && ybnds.
inf <= y && y <= ybnds.
sup )
3251 val = (axy * bx * by - ay * bx * bx - ax * by * by) / denom;
3252 minval =
MIN(val, minval);
3253 maxval =
MAX(val, maxval);
3256 else if(
REALABS(2.0 * ay * bx - axy * by) <= 1e-9 )
3262 if( xbnds.
inf <= -infinity && xbnds.
sup >= infinity )
3264 val = -ay * bx * bx / (axy * axy);
3265 minval =
MIN(val, minval);
3266 maxval =
MAX(val, maxval);
3272 if( xbnds.
inf <= -infinity )
3279 else if( ax == 0.0 )
3283 if( ybnds.
inf <= -infinity )
3285 else if( bx + axy * ybnds.
inf < 0.0 )
3289 minval =
MIN(val, minval);
3290 maxval =
MAX(val, maxval);
3292 if( ybnds.
sup >= infinity )
3294 else if( bx + axy * ybnds.
sup < 0.0 )
3298 minval =
MIN(val, minval);
3299 maxval =
MAX(val, maxval);
3311 minval =
MIN(tmp.
inf, minval);
3312 maxval =
MAX(tmp.
sup, maxval);
3315 if( xbnds.
sup >= infinity )
3322 else if( ax == 0.0 )
3326 if( ybnds.
inf <= -infinity )
3328 else if( bx + axy * ybnds.
inf > 0.0 )
3332 minval =
MIN(val, minval);
3333 maxval =
MAX(val, maxval);
3335 if( ybnds.
sup >= infinity )
3337 else if( bx + axy * ybnds.
sup > 0.0 )
3341 minval =
MIN(val, minval);
3342 maxval =
MAX(val, maxval);
3354 minval =
MIN(tmp.
inf, minval);
3355 maxval =
MAX(tmp.
sup, maxval);
3358 if( ybnds.
inf <= -infinity )
3365 else if( ay == 0.0 )
3369 if( xbnds.
inf <= -infinity )
3371 else if( by + axy * xbnds.
inf < 0.0 )
3375 minval =
MIN(val, minval);
3376 maxval =
MAX(val, maxval);
3378 if( xbnds.
sup >= infinity )
3380 else if( by + axy * xbnds.
sup < 0.0 )
3384 minval =
MIN(val, minval);
3385 maxval =
MAX(val, maxval);
3397 minval =
MIN(tmp.
inf, minval);
3398 maxval =
MAX(tmp.
sup, maxval);
3401 if( ybnds.
sup >= infinity )
3408 else if( ay == 0.0 )
3412 if( xbnds.
inf <= -infinity )
3414 else if( by + axy * xbnds.
inf > 0.0 )
3418 minval =
MIN(val, minval);
3419 maxval =
MAX(val, maxval);
3421 if( xbnds.
sup >= infinity )
3423 else if( by + axy * xbnds.
sup > 0.0 )
3427 minval =
MIN(val, minval);
3428 maxval =
MAX(val, maxval);
3440 minval =
MIN(tmp.
inf, minval);
3441 maxval =
MAX(tmp.
sup, maxval);
3444 minval -= 1e-10 *
REALABS(minval);
3445 maxval += 1e-10 *
REALABS(maxval);
3448 SCIPdebugMessage(
"range for %gx^2 + %gy^2 + %gxy + %gx + %gy = [%g, %g] for x = [%g, %g], y=[%g, %g]\n",
3449 ax, ay, axy, bx, by, minval, maxval, xbnds.
inf, xbnds.
sup, ybnds.
inf, ybnds.
sup);
3473 assert(resultant !=
NULL);
3491 if( xbnds.
sup >= 0.0 )
3501 if( xbnds.
inf < 0.0 )
3552 rcoef_y = axy * bx / (2.0*ax) - by;
3553 rcoef_yy = axy * axy / (4.0*ax) - ay;
3554 rcoef_const = bx * bx / (4.0*ax);
3556 #define CALCB(y) ((bx + axy * (y)) / (2.0 * sqrtax)) 3557 #define CALCR(c,y) (rcoef_const + (c) + (rcoef_y + rcoef_yy * (y)) * (y)) 3560 if( rhs.
sup < infinity )
3568 if(
EPSN(ub, 1e-9) )
3587 if( rhs.
sup >= infinity )
3597 if( ybnds.
inf <= -infinity )
3600 if( !
EPSZ(ay, 1e-9) && axy * axy >= 4.0 * ax * ay )
3621 else if( !
EPSZ(ay, 1e-9) )
3628 minvalleft = -by / 2.0;
3629 maxvalleft = -by / 2.0;
3641 if( rhs.
sup < infinity )
3650 minvalleft =
MIN(-sqrtc - b, minvalleft);
3651 maxvalright =
MAX( sqrtc - b, maxvalright);
3655 if( rhs.
inf > -infinity )
3664 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3665 minvalright =
MIN( sqrtc - b, minvalright);
3671 if( ybnds.
sup >= infinity )
3674 if( !
EPSZ(ay, 1e-9) && axy * axy >= 4.0 * ax * ay )
3695 else if( !
EPSZ(ay, 1e-9) )
3704 minvalright =
MIN(minvalright, -by / 2.0);
3705 maxvalright =
MAX(maxvalright, -by / 2.0);
3715 if( rhs.
sup < infinity )
3724 minvalleft =
MIN(-sqrtc - b, minvalleft);
3725 maxvalright =
MAX( sqrtc - b, maxvalright);
3729 if( rhs.
inf > -infinity )
3738 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3739 minvalright =
MIN( sqrtc - b, minvalright);
3746 if( !
EPSZ(ay, 1e-9) )
3748 if(
REALABS(axy*axy - 4.0*ax*ay) > 1e-9 )
3752 if( rhs.
sup < infinity )
3754 sqrtterm = axy * axy * ay * (ay * bx * bx - axy * bx * by + ax * by * by - axy * axy * rhs.
sup + 4.0 * ax * ay * rhs.
sup);
3755 if( !
EPSN(sqrtterm, 1e-9) )
3757 sqrtterm =
sqrt(
MAX(sqrtterm, 0.0));
3759 ymin = axy * ay * bx - 2.0 * ax * ay * by - sqrtterm;
3761 ymin /= 4.0 * ax * ay - axy * axy;
3763 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3776 minvalleft =
MIN(-sqrtc - b, minvalleft);
3777 maxvalright =
MAX( sqrtc - b, maxvalright);
3782 ymin = axy * ay * bx - 2.0 * ax * ay * by + sqrtterm;
3784 ymin /= 4.0 * ax * ay - axy * axy;
3786 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3799 minvalleft =
MIN(-sqrtc - b, minvalleft);
3800 maxvalright =
MAX( sqrtc - b, maxvalright);
3806 if( rhs.
inf > -infinity )
3808 sqrtterm = axy * axy * ay * (ay * bx * bx - axy * bx * by + ax * by * by - axy * axy * rhs.
inf + 4.0 * ax * ay * rhs.
inf);
3809 if( !
EPSN(sqrtterm, 1e-9) )
3811 sqrtterm =
sqrt(
MAX(sqrtterm, 0.0));
3813 ymin = axy * ay * bx - 2.0 * ax * ay * by - sqrtterm;
3815 ymin /= 4.0 * ax * ay - axy * axy;
3817 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3830 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3831 minvalright =
MIN( sqrtc - b, minvalright);
3836 ymin = axy * ay * bx - 2.0 * ax * ay * by + sqrtterm;
3838 ymin /= 4.0 * ax * ay - axy * axy;
3840 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3853 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3854 minvalright =
MIN( sqrtc - b, minvalright);
3861 else if(
REALABS(2.0 * ay * bx - axy * by) > 1e-9 )
3863 if( rhs.
sup < infinity )
3865 ymin = - (4.0 * ay * bx * by - axy * by * by + 4.0 * axy * ay * rhs.
sup);
3867 ymin /= 2.0 * ay * bx - axy * by;
3869 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3882 minvalleft =
MIN(-sqrtc - b, minvalleft);
3883 maxvalright =
MAX( sqrtc - b, maxvalright);
3888 if( rhs.
inf > -infinity )
3890 ymin = - (4.0 * ay * bx * by - axy * by * by + 4.0 * axy * ay * rhs.
inf);
3892 ymin /= 2.0 * ay * bx - axy * by;
3894 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3907 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3908 minvalright =
MIN( sqrtc - b, minvalright);
3939 if( ybnds.
sup >= 0.0 )
3947 assert(ypos.
inf >= 0.0);
3949 minvalleft =
MIN(minvalleft, -b);
3950 maxvalleft =
MAX(maxvalleft, -b);
3951 minvalright =
MIN(minvalright, -b);
3952 maxvalright =
MAX(maxvalright, -b);
3954 if( ypos.
sup < infinity )
3957 minvalleft =
MIN(minvalleft, -b);
3958 maxvalleft =
MAX(maxvalleft, -b);
3959 minvalright =
MIN(minvalright, -b);
3960 maxvalright =
MAX(maxvalright, -b);
3983 if( ybnds.
inf < 0.0 )
3997 if( yneg.
inf > -infinity )
4000 minvalleft =
MIN(minvalleft, -b);
4001 maxvalleft =
MAX(maxvalleft, -b);
4002 minvalright =
MIN(minvalright, -b);
4003 maxvalright =
MAX(maxvalright, -b);
4020 assert(yneg.
sup <= 0.0);
4022 minvalleft =
MIN(minvalleft, -b);
4023 maxvalleft =
MAX(maxvalleft, -b);
4024 minvalright =
MIN(minvalright, -b);
4025 maxvalright =
MAX(maxvalright, -b);
4030 if( rhs.
inf > -infinity && xbnds.
inf > -infinity &&
EPSGT(xbnds.
inf, maxvalleft / sqrtax, 1e-9) )
4034 assert(
EPSGE(minvalright, minvalleft, 1e-9));
4035 if( minvalright > -infinity )
4037 assert(minvalright < infinity);
4044 if( minvalleft > -infinity )
4046 assert(minvalleft < infinity);
4051 if( rhs.
inf > -infinity && xbnds.
sup < infinity &&
EPSLT(xbnds.
sup, minvalright / sqrtax, 1e-9) )
4055 assert(
EPSLE(maxvalleft, maxvalright, 1e-9));
4056 if( maxvalleft < infinity )
4058 assert(maxvalleft > -infinity);
4065 if( maxvalright < infinity )
4067 assert(maxvalright > -infinity);
4089 if(
EPSGE(-bx / axy, ybnds.
inf, 1e-9) &&
EPSLE(-bx / axy, ybnds.
sup, 1e-9) )
4099 if( xbnds.
inf < 0.0 && xbnds.
sup > 0.0 )
4117 if( lincoef.
inf == 0.0 && lincoef.
sup == 0.0 )
4120 if( myrhs.
inf <= 0.0 && myrhs.
sup >= 0.0 )
4125 else if( xbnds.
inf >= 0.0 )
4137 assert(xbnds.
sup <= 0.0);
4156 if( bx + axy * (axy > 0.0 ? ybnds.
inf : ybnds.
sup) > 0.0 )
4161 if( c > -infinity && c < infinity )
4163 if( ybnds.
inf <= -infinity )
4166 if(
EPSZ(ay, 1e-9) )
4168 else if( ay * axy < 0.0 )
4173 val = (c - ay * ybnds.
inf * ybnds.
inf - by * ybnds.
inf) / (bx + axy * ybnds.
inf);
4174 minval =
MIN(val, minval);
4177 if( ybnds.
sup >= infinity )
4180 if(
EPSZ(ay, 1e-9) )
4181 minval =
MIN(minval, -by / axy);
4182 else if( ay * axy > 0.0 )
4187 val = (c - ay * ybnds.
sup * ybnds.
sup - by * ybnds.
sup) / (bx + axy * ybnds.
sup);
4188 minval =
MIN(val, minval);
4191 if( !
EPSZ(ay, 1e-9) )
4193 d = ay * (ay * bx * bx - axy * (bx * by + axy * c));
4194 if( !
EPSN(d, 1e-9) )
4196 ymin = -ay * bx +
sqrt(
MAX(d, 0.0));
4199 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
4201 assert(bx + axy * ymin != 0.0);
4203 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4204 minval =
MIN(val, minval);
4207 ymin = -ay * bx -
sqrt(
MAX(d, 0.0));
4210 if(ymin > ybnds.
inf && ymin < ybnds.
sup )
4212 assert(bx + axy * ymin != 0.0);
4214 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4215 minval =
MIN(val, minval);
4226 if( bx + axy * (axy > 0.0 ? ybnds.
inf : ybnds.
sup) > 0.0 )
4231 if( c > -infinity && c < infinity )
4233 if( ybnds.
inf <= -infinity )
4236 if(
EPSZ(ay, 1e-9) )
4238 else if( ay * axy > 0.0 )
4243 val = (c - ay * ybnds.
inf * ybnds.
inf - by * ybnds.
inf) / (bx + axy * ybnds.
inf);
4244 maxval =
MAX(val, maxval);
4247 if( ybnds.
sup >= infinity )
4250 if(
EPSZ(ay, 1e-9) )
4251 maxval =
MAX(maxval, -by / axy);
4252 else if( ay * axy < 0.0 )
4257 val = (c - ay * ybnds.
sup * ybnds.
sup - by * ybnds.
sup) / (bx + axy * ybnds.
sup);
4258 maxval =
MAX(val, maxval);
4261 if( !
EPSZ(ay, 1e-9) )
4263 d = ay * (ay * bx * bx - axy * (bx * by + axy * c));
4264 if( !
EPSN(d, 1e-9) )
4266 ymin = ay * bx +
sqrt(
MAX(d, 0.0));
4269 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4270 maxval =
MAX(val, maxval);
4272 ymin = ay * bx -
sqrt(
MAX(d, 0.0));
4275 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4276 maxval =
MAX(val, maxval);
4285 if( minval > -infinity )
4286 resultant->
inf = minval - 1e-10 *
REALABS(minval);
4289 if( maxval < infinity )
4290 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)