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)) 319 #undef SCIPintervalGetInf 320 #undef SCIPintervalGetSup 321 #undef SCIPintervalSet 322 #undef SCIPintervalSetBounds 323 #undef SCIPintervalSetEmpty 324 #undef SCIPintervalIsEmpty 325 #undef SCIPintervalSetEntire 326 #undef SCIPintervalIsEntire 327 #undef SCIPintervalIsPositiveInfinity 328 #undef SCIPintervalIsNegativeInfinity 352 assert(resultant != NULL);
354 resultant->
inf = value;
355 resultant->
sup = value;
365 assert(resultant != NULL);
368 resultant->
inf = inf;
369 resultant->
sup = sup;
377 assert(resultant != NULL);
379 resultant->
inf = 1.0;
380 resultant->
sup = -1.0;
389 if( operand.
sup >= infinity || operand.
inf <= -infinity )
392 return operand.
sup < operand.
inf;
401 assert(resultant != NULL);
422 return operand.
inf >= infinity && operand.
sup >= operand.
inf;
431 return operand.
sup <= -infinity && operand.
inf <= operand.
sup;
442 if( operand1.
inf > operand1.
sup )
446 if( operand2.
inf > operand2.
sup )
449 return (
MAX(-infinity, operand1.
inf) >= operand2.
inf) &&
450 ( MIN( infinity, operand1.
sup) <= operand2.
sup);
459 return (operand1.
sup < operand2.
inf) || (operand2.
sup < operand1.
inf);
469 assert(resultant != NULL);
472 resultant->
sup = MIN(operand1.
sup, operand2.
sup);
482 assert(resultant != NULL);
484 if( operand1.
inf > operand1.
sup )
487 *resultant = operand2;
491 if( operand2.
inf > operand2.
sup )
494 *resultant = operand1;
498 resultant->
inf = MIN(operand1.
inf, operand2.
inf);
511 assert(resultant != NULL);
514 if( operand1.
inf <= -infinity || operand2.
inf <= -infinity )
519 else if( operand1.
inf >= infinity || operand2.
inf >= infinity )
525 resultant->
inf = operand1.
inf + operand2.
inf;
538 assert(resultant != NULL);
541 if( operand1.
sup >= infinity || operand2.
sup >= infinity )
546 else if( operand1.
sup <= -infinity || operand2.
sup <= -infinity )
552 resultant->
sup = operand1.
sup + operand2.
sup;
566 assert(resultant != NULL);
593 assert(resultant != NULL);
599 if( operand1.
inf <= -infinity || operand2 <= -infinity )
603 else if( operand1.
inf >= infinity || operand2 >= infinity )
611 resultant->
inf = operand1.
inf + operand2;
615 if( operand1.
sup >= infinity || operand2 >= infinity )
619 else if( operand1.
sup <= -infinity || operand2 <= -infinity )
627 resultant->
sup = operand1.
sup + operand2;
649 for( i = 0; i < length; ++i )
655 for( i = 0; i < length; ++i )
673 assert(resultant != NULL);
679 if( operand1.
inf <= -infinity || operand2.
sup >= infinity )
682 else if( operand1.
inf >= infinity || operand2.
sup <= -infinity )
691 resultant->
inf = operand1.
inf - operand2.
sup;
694 if( operand1.
sup >= infinity || operand2.
inf <= -infinity )
697 else if( operand1.
sup <= -infinity || operand2.
inf >= infinity )
699 assert(resultant->
inf == -infinity);
705 resultant->
sup = operand1.
sup - operand2.
inf;
730 assert(resultant != NULL);
736 if( operand1.
inf >= infinity )
739 assert(operand1.
sup >= infinity);
742 else if( operand2.
inf >= infinity )
745 assert(operand2.
sup >= infinity);
748 else if( operand1.
sup <= -infinity )
751 assert(operand1.
inf <= -infinity);
754 else if( operand2.
sup <= -infinity )
757 assert(operand2.
inf <= -infinity);
760 else if( ( operand1.
inf <= -infinity && operand2.
sup > 0.0 )
761 || ( operand1.
sup > 0.0 && operand2.
inf <= -infinity )
762 || ( operand1.
inf < 0.0 && operand2.
sup >= infinity )
763 || ( operand1.
sup >= infinity && operand2.
inf < 0.0 ) )
774 cand1 = operand1.
inf * operand2.
inf;
775 cand2 = operand1.
inf * operand2.
sup;
776 cand3 = operand1.
sup * operand2.
inf;
777 cand4 = operand1.
sup * operand2.
sup;
778 resultant->
inf = MIN(MIN(cand1, cand2), MIN(cand3, cand4));
790 assert(resultant != NULL);
796 if( operand1.
inf >= infinity )
799 assert(operand1.
sup >= infinity);
802 else if( operand2.
inf >= infinity )
805 assert(operand2.
sup >= infinity);
808 else if( operand1.
sup <= -infinity )
811 assert(operand1.
inf <= -infinity);
814 else if( operand2.
sup <= -infinity )
817 assert(operand2.
inf <= -infinity);
820 else if( ( operand1.
inf <= -infinity && operand2.
inf < 0.0 )
821 || ( operand1.
inf < 0.0 && operand2.
inf <= -infinity )
822 || ( operand1.
sup > 0.0 && operand2.
sup >= infinity )
823 || ( operand1.
sup >= infinity && operand2.
sup > 0.0 ) )
834 cand1 = operand1.
inf * operand2.
inf;
835 cand2 = operand1.
inf * operand2.
sup;
836 cand3 = operand1.
sup * operand2.
inf;
837 cand4 = operand1.
sup * operand2.
sup;
838 resultant->
sup =
MAX(
MAX(cand1, cand2),
MAX(cand3, cand4));
852 assert(resultant != NULL);
878 assert(resultant != NULL);
881 if( operand2 >= infinity )
884 if( operand1.
inf > 0 )
886 else if( operand1.
inf < 0 )
889 resultant->
inf = 0.0;
891 else if( operand2 <= -infinity )
894 if( operand1.
sup > 0 )
896 else if( operand1.
sup < 0 )
899 resultant->
inf = 0.0;
901 else if( operand2 == 0.0 )
903 resultant->
inf = 0.0;
905 else if( operand2 > 0.0 )
907 if( operand1.
inf <= -infinity )
909 else if( operand1.
inf >= infinity )
912 resultant->
inf = operand1.
inf * operand2;
916 if( operand1.
sup >= infinity )
918 else if( operand1.
sup <= -infinity )
921 resultant->
inf = operand1.
sup * operand2;
934 assert(resultant != NULL);
937 if( operand2 >= infinity )
940 if( operand1.
sup > 0 )
942 else if( operand1.
sup < 0 )
945 resultant->
sup = 0.0;
947 else if( operand2 <= -infinity )
950 if( operand1.
inf > 0 )
952 else if( operand1.
inf < 0 )
955 resultant->
sup = 0.0;
957 else if( operand2 == 0.0 )
959 resultant->
sup = 0.0;
961 else if( operand2 > 0.0 )
963 if( operand1.
sup >= infinity )
965 else if( operand1.
sup <= -infinity )
968 resultant->
sup = operand1.
sup * operand2;
972 if( operand1.
inf <= -infinity )
974 else if( operand1.
inf >= infinity )
977 resultant->
sup = operand1.
inf * operand2;
991 assert(resultant != NULL);
1018 assert(resultant != NULL);
1022 if( operand2.
inf <= 0.0 && operand2.
sup >= 0.0 )
1029 if( operand1.
inf == 0.0 && operand1.
sup == 0.0 )
1038 if( operand2.
sup >= infinity || operand2.
sup <= -infinity )
1045 intmed.
inf = 1.0 / operand2.
sup;
1047 if( operand2.
inf <= -infinity || operand2.
inf >= infinity )
1054 intmed.
sup = 1.0 / operand2.
inf;
1071 assert(resultant != NULL);
1076 if( operand2 >= infinity || operand2 <= -infinity )
1079 resultant->
inf = 0.0;
1080 resultant->
sup = 0.0;
1082 else if( operand2 > 0.0 )
1084 if( operand1.
inf <= -infinity )
1086 else if( operand1.
inf >= infinity )
1094 resultant->
inf = operand1.
inf / operand2;
1097 if( operand1.
sup >= infinity )
1099 else if( operand1.
sup <= -infinity )
1107 resultant->
sup = operand1.
sup / operand2;
1110 else if( operand2 < 0.0 )
1112 if( operand1.
sup >= infinity )
1114 else if( operand1.
sup <= -infinity )
1122 resultant->
inf = operand1.
sup / operand2;
1125 if( operand1.
inf <= -infinity )
1127 else if( operand1.
inf >= infinity )
1135 resultant->
sup = operand1.
inf / operand2;
1140 if( operand1.
inf >= 0 )
1146 else if( operand1.
sup <= 0 )
1179 resultant->
inf = 0.0;
1180 resultant->
sup = 0.0;
1184 for( i = 0; i < length && resultant->
inf > -
infinity; ++i )
1190 assert(resultant->
sup == 0.0);
1194 for( i = 0; i < length && resultant->
sup <
infinity ; ++i )
1220 resultant->
inf = 0.0;
1224 for( i = 0; i < length && resultant->
inf > -
infinity; ++i )
1227 assert(prod.
sup >= infinity);
1248 resultant->
sup = 0.0;
1252 for( i = 0; i < length && resultant->
sup <
infinity; ++i )
1255 assert(prod.
inf <= -infinity);
1273 resultant->
inf = 0.0;
1274 resultant->
sup = 0.0;
1279 assert(resultant->
sup == 0.0);
1297 assert(resultant != NULL);
1302 if( operand.
sup <= 0.0 )
1304 if( operand.
sup <= -infinity )
1309 resultant->
inf = operand.
sup * operand.
sup;
1312 if( operand.
inf <= -infinity )
1317 resultant->
sup = operand.
inf * operand.
inf;
1320 else if( operand.
inf >= 0.0 )
1322 if( operand.
inf >= infinity )
1327 resultant->
inf = operand.
inf * operand.
inf;
1330 if( operand.
sup >= infinity )
1335 resultant->
sup = operand.
sup * operand.
sup;
1340 resultant->
inf = 0.0;
1341 if( operand.
inf <= -infinity || operand.
sup >= infinity )
1349 x = operand.
inf * operand.
inf;
1350 y = operand.
sup * operand.
sup;
1351 resultant->
sup =
MAX(x, y);
1367 assert(resultant != NULL);
1370 if( operand.
sup < 0.0 )
1376 if( operand.
inf == operand.
sup )
1378 if( operand.
inf >= infinity )
1396 if( operand.
inf <= 0.0 )
1397 resultant->
inf = 0.0;
1398 else if( operand.
inf >= infinity )
1409 if( operand.
sup >= infinity )
1429 assert(resultant != NULL);
1433 if( operand2.
inf == operand2.
sup )
1463 assert(operand1 >= 0.0);
1465 if( operand1 == 0.0 )
1467 assert(operand2 >= 0);
1475 if( operand1 == 1.0 || operand2 == 0 )
1482 assert(result != 0.0);
1486 result = 1.0 / result;
1497 n = (
unsigned int)operand2;
1516 result = result * z;
1545 assert(operand1 >= 0.0);
1547 if( operand1 == 0.0 )
1549 assert(operand2 >= 0);
1557 if( operand1 == 1.0 || operand2 == 0 )
1564 assert(result != 0.0);
1568 result = 1.0 / result;
1579 n = (
unsigned int)operand2;
1590 result = result * z;
1619 assert(operand1 >= 0.0);
1621 if( operand1 == 0.0 )
1623 assert(operand2 >= 0);
1637 if( operand1 == 1.0 || operand2 == 0 )
1647 assert(resultant->
inf > 0.0 || resultant->
sup < 0.0);
1664 n = (
unsigned int)operand2;
1677 result_sup = result_sup * z_sup;
1685 z_sup = z_sup * z_sup;
1691 resultant->
inf = result_inf;
1692 resultant->
sup = result_sup;
1693 assert(resultant->
inf <= resultant->
sup);
1710 assert(resultant != NULL);
1712 if( operand1 == 0.0 )
1714 assert(operand2 >= 0);
1728 if( operand1 == 1.0 || operand2 == 0 )
1735 result =
pow(operand1, operand2);
1754 assert(resultant != NULL);
1757 if( operand2 == infinity )
1763 if( operand1.
inf < 0.0 )
1766 resultant->
inf = 0.0;
1767 if( operand1.
sup > 0.0 )
1770 resultant->
sup = 0.0;
1774 if( operand2 == 0.0 )
1776 if( operand1.
inf == 0.0 && operand1.
sup == 0.0 )
1778 resultant->
inf = 0.0;
1779 resultant->
sup = 0.0;
1781 else if( operand1.
inf <= 0.0 || operand1.
sup >= 0.0 )
1783 resultant->
inf = 0.0;
1784 resultant->
sup = 1.0;
1788 resultant->
inf = 1.0;
1789 resultant->
sup = 1.0;
1794 if( operand2 == 1.0 )
1797 *resultant = operand1;
1801 op2isint = (ceil(operand2) == operand2);
1803 if( !op2isint && operand1.
inf < 0.0 )
1806 if( operand1.
sup < operand1.
inf )
1813 if( operand1.
inf >= 0.0 )
1815 if( operand2 >= 0.0 )
1818 if( operand1.
inf >= infinity )
1820 else if( operand1.
inf > 0.0 )
1826 resultant->
inf = 0.0;
1828 if( operand1.
sup >= infinity )
1830 else if( operand1.
sup > 0.0 )
1836 resultant->
sup = 0.0;
1840 if( operand1.
sup >= infinity )
1841 resultant->
inf = 0.0;
1842 else if( operand1.
sup == 0.0 )
1846 if( ceil(operand2/2) == operand2/2 )
1858 if( operand1.
inf == 0.0 )
1867 else if( operand1.
sup <= 0.0 )
1870 if( operand2 >= 0.0 && ceil(operand2/2) == operand2/2 )
1873 if( operand1.
sup == -infinity )
1879 if( operand1.
inf <= -infinity )
1884 else if( operand2 <= 0.0 && ceil(operand2/2) != operand2/2 )
1887 if( operand1.
sup == -infinity )
1889 resultant->
inf = 0.0;
1890 else if( operand1.
sup == 0.0 )
1896 if( operand1.
inf <= -infinity )
1898 resultant->
sup = 0.0;
1899 else if( operand1.
inf == 0.0 )
1905 else if( operand2 >= 0.0 )
1908 if( operand1.
inf <= -infinity )
1913 if( operand1.
sup <= -infinity )
1921 if( operand1.
inf <= -infinity )
1922 resultant->
inf = 0.0;
1923 else if( operand1.
inf == 0.0 )
1929 if( operand1.
sup <= -infinity )
1930 resultant->
sup = 0.0;
1931 else if( operand1.
sup == 0.0 )
1937 assert(resultant->
inf <= resultant->
sup || resultant->
inf >= infinity || resultant->
sup <= -infinity);
1942 if( operand2 >= 0.0 && operand2/2 == ceil(operand2/2) )
1945 resultant->
inf = 0.0;
1946 if( operand1.
inf == -infinity || operand1.
sup == infinity )
1951 else if( operand2 <= 0.0 && ceil(operand2/2) == operand2/2 )
1955 if( operand1.
inf == -infinity || operand1.
sup == infinity )
1956 resultant->
inf = 0.0;
1960 else if( operand2 >= 0.0 )
1963 if( operand1.
inf == -infinity )
1967 if( operand1.
sup == infinity )
1983 if( resultant->
inf > infinity )
1985 if( resultant->
sup < -infinity )
2004 assert(resultant != NULL);
2005 assert(image.
inf <= image.
sup);
2006 assert(basedomain.
inf <= basedomain.
sup);
2008 if( exponent == 0.0 )
2011 if( image.
inf <= 1.0 && image.
sup >= 1.0 )
2014 *resultant = basedomain;
2016 else if( image.
inf <= 0.0 && image.
sup >= 0.0 )
2040 if( image.
sup >= 0.0 )
2044 if( basedomain.
inf <= -resultant->
inf &&
EPSISINT(exponent, 0.0) && (
int)exponent % 2 == 0 )
2046 if( basedomain.
sup < resultant->
inf )
2058 if( image.
inf < 0.0 && basedomain.
inf < 0.0 &&
EPSISINT(exponent, 0.0) && ((
int)exponent % 2 != 0) )
2082 assert(resultant != NULL);
2085 assert(operand2 >= 0.0);
2087 if( operand2 == infinity )
2093 if( operand1.
inf < 0.0 )
2096 resultant->
inf = 0.0;
2097 if( operand1.
sup > 0.0 )
2100 resultant->
sup = 0.0;
2104 if( operand2 == 0.0 )
2107 if( operand1.
inf < 0.0 )
2108 resultant->
inf = -1.0;
2109 else if( operand1.
inf == 0.0 )
2110 resultant->
inf = 0.0;
2112 resultant->
inf = 1.0;
2114 if( operand1.
sup < 0.0 )
2115 resultant->
sup = -1.0;
2116 else if( operand1.
sup == 0.0 )
2117 resultant->
sup = 0.0;
2119 resultant->
sup = 1.0;
2124 if( operand2 == 1.0 )
2126 *resultant = operand1;
2132 if( operand2 == 2.0 )
2134 if( operand1.
inf <= -infinity )
2138 else if( operand1.
inf >= infinity )
2142 else if( operand1.
inf > 0.0 )
2145 resultant->
inf = operand1.
inf * operand1.
inf;
2154 if( operand1.
sup >= infinity )
2158 else if( operand1.
sup <= -infinity )
2162 else if( operand1.
sup > 0.0 )
2165 resultant->
sup = operand1.
sup * operand1.
sup;
2173 assert(resultant->
inf <= resultant->
sup);
2175 else if( operand2 == 0.5 )
2177 if( operand1.
inf <= -infinity )
2179 else if( operand1.
inf >= infinity )
2181 else if( operand1.
inf >= 0.0 )
2192 if( operand1.
sup >= infinity )
2194 else if( operand1.
sup <= -infinity )
2196 else if( operand1.
sup > 0.0 )
2206 assert(resultant->
inf <= resultant->
sup);
2210 if( operand1.
inf <= -infinity )
2212 else if( operand1.
inf >= infinity )
2214 else if( operand1.
inf > 0.0 )
2225 if( operand1.
sup >= infinity )
2227 else if( operand1.
sup <= -infinity )
2229 else if( operand1.
sup > 0.0 )
2254 assert(resultant != NULL);
2257 if( operand.
inf == 0.0 && operand.
sup == 0.0 )
2266 if( operand.
inf >= 0.0 )
2268 if( operand.
sup >= infinity )
2269 resultant->
inf = 0.0;
2273 resultant->
inf = 1.0 / operand.
sup;
2276 if( operand.
inf >= infinity )
2277 resultant->
sup = 0.0;
2278 else if( operand.
inf == 0.0 )
2283 resultant->
sup = 1.0 / operand.
inf;
2288 else if( operand.
sup <= 0.0 )
2290 if( operand.
sup <= -infinity )
2291 resultant->
inf = 0.0;
2292 else if( operand.
sup == 0.0 )
2297 resultant->
inf = 1.0 / operand.
sup;
2300 if( operand.
inf <= -infinity )
2305 resultant->
sup = 1.0 / operand.
inf;
2325 assert(resultant != NULL);
2328 if( operand.
sup <= -infinity )
2330 resultant->
inf = 0.0;
2331 resultant->
sup = 0.0;
2335 if( operand.
inf >= infinity )
2342 if( operand.
inf == operand.
sup )
2344 if( operand.
inf == 0.0 )
2346 resultant->
inf = 1.0;
2347 resultant->
sup = 1.0;
2362 if( operand.
inf <= -infinity )
2364 resultant->
inf = 0.0;
2366 else if( operand.
inf == 0.0 )
2368 resultant->
inf = 1.0;
2375 if( resultant->
inf >= infinity )
2379 if( operand.
sup >= infinity )
2383 else if( operand.
sup == 0.0 )
2385 resultant->
sup = 1.0;
2391 if( resultant->
sup < -infinity )
2405 assert(resultant != NULL);
2411 if( operand.
sup <= 0.0 )
2417 if( operand.
inf == operand.
sup )
2419 if( operand.
sup == 1.0 )
2421 resultant->
inf = 0.0;
2422 resultant->
sup = 0.0;
2437 if( operand.
inf <= 0.0 )
2441 else if( operand.
inf == 1.0 )
2443 resultant->
inf = 0.0;
2451 if( operand.
sup >= infinity )
2455 else if( operand.
sup == 1.0 )
2457 resultant->
sup = 0.0;
2474 assert(resultant != NULL);
2478 resultant->
inf = MIN(operand1.
inf, operand2.
inf);
2479 resultant->
sup = MIN(operand1.
sup, operand2.
sup);
2490 assert(resultant != NULL);
2505 assert(resultant != NULL);
2508 if( operand.
inf <= 0.0 && operand.
sup >= 0.0)
2510 resultant->
inf = 0.0;
2513 else if( operand.
inf > 0.0 )
2515 *resultant = operand;
2519 resultant->
inf = -operand.
sup;
2520 resultant->
sup = -operand.
inf;
2544 assert(resultant != NULL);
2547 intervallen = operand.
sup - operand.
inf;
2548 if( intervallen >= 2*
M_PI )
2554 modinf = fmod(operand.
inf, 2*
M_PI);
2557 modsup = modinf + intervallen;
2561 if( modinf <= extremepoints[b] )
2569 if( modsup <= extremepoints[b] )
2602 if( resultant->
inf > -1.0 )
2604 if( resultant->
sup < 1.0 )
2605 resultant->
sup = MIN( 1.0, resultant->
sup + 1e-10 *
REALABS(resultant->
sup));
2607 assert(resultant->
inf <= resultant->
sup);
2630 assert(resultant != NULL);
2633 intervallen = operand.
sup - operand.
inf;
2634 if( intervallen >= 2*M_PI )
2640 modinf = fmod(operand.
inf, 2*M_PI);
2643 modsup = modinf + intervallen;
2647 if( modinf <= extremepoints[b] )
2655 if( modsup <= extremepoints[b] )
2688 if( resultant->
inf > -1.0 )
2690 if( resultant->
sup < 1.0 )
2691 resultant->
sup = MIN( 1.0, resultant->
sup + 1e-10 *
REALABS(resultant->
sup));
2693 assert(resultant->
inf <= resultant->
sup);
2703 assert(resultant != NULL);
2706 if( operand.
sup < 0.0 )
2708 resultant->
inf = -1.0;
2709 resultant->
sup = -1.0;
2711 else if( operand.
inf >= 0.0 )
2713 resultant->
inf = 1.0;
2714 resultant->
sup = 1.0;
2718 resultant->
inf = -1.0;
2719 resultant->
sup = 1.0;
2737 assert(b_.
inf < infinity);
2738 assert(b_.
sup > -infinity);
2739 assert( x.
inf < infinity);
2740 assert( x.
sup > -infinity);
2745 if( (b_.
inf <= -infinity && x.
inf < 0.0 ) ||
2746 ( b_.
inf < 0.0 && x.
inf <= -infinity) ||
2747 ( b_.
sup > 0.0 && x.
sup >= infinity) ||
2748 ( b_.
sup >= infinity && x.
sup > 0.0 ) )
2763 u =
MAX(
MAX(cand1, cand2),
MAX(cand3, cand4));
2808 assert(x.
inf < 0.0 && x.
sup > 0);
2814 return MAX(cand1, cand2);
2836 if( sqrcoeff == 0.0 )
2845 lincoeff.
inf = -lincoeff.
sup;
2846 lincoeff.
sup = -tmp;
2849 assert(resultant->
sup >= resultant->
inf);
2864 assert(resultant != NULL);
2867 if( lincoeff.
inf <= -infinity || rhs.
sup >= infinity || sqrcoeff.
inf <= -infinity )
2869 resultant->
inf = 0.0;
2879 if( lincoeff.
sup < infinity && rhs.
inf > -infinity && sqrcoeff.
sup < infinity )
2891 if( resultant->
inf >= infinity || resultant->
sup <= -infinity )
2915 assert(resultant != NULL);
2916 assert(sqrcoeff < infinity);
2917 assert(sqrcoeff > -infinity);
2919 resultant->
inf = 0.0;
2927 if( lincoeff >= 0.0 )
2932 delta = b*b + sqrcoeff*rhs;
2933 if( delta < 0.0 || (sqrcoeff == 0.0 && lincoeff == 0.0) )
2944 if( sqrcoeff < 0.0 )
2950 if( sqrcoeff < 0.0 )
2952 delta = b*b + sqrcoeff*rhs;
2965 if( sqrcoeff > 0.0 )
2968 delta = b*b + sqrcoeff*rhs;
2973 resultant->
inf = z / sqrcoeff;
2983 delta = b*b + sqrcoeff * rhs;
2984 if( delta >= 0.0 && sqrcoeff <= 0.0 )
3015 assert(resultant != NULL);
3017 if( sqrcoeff.
inf == 0.0 && sqrcoeff.
sup == 0.0 )
3019 if( lincoeff.
inf == 0.0 && lincoeff.
sup == 0.0 )
3021 if( rhs.
inf <= 0.0 && rhs.
sup >= 0.0 )
3032 if( lincoeff.
inf == 0.0 && lincoeff.
sup == 0.0 )
3036 resultant->
inf = -resultant->
sup;
3042 SCIPdebugMessage(
" positive solutions of [%g,%g]*x^2 + [%g,%g]*x in [%g,%g] are [%g,%g]\n",
3046 lincoeff.
inf = -lincoeff.
sup;
3047 lincoeff.
sup = -tmp;
3054 SCIPdebugMessage(
" negative solutions of [%g,%g]*x^2 + [%g,%g]*x in [%g,%g] are [%g,%g]\n",
3085 assert(resultant != NULL);
3086 assert(xbnds.
inf <= xbnds.
sup);
3087 assert(ybnds.
inf <= ybnds.
sup);
3111 denom = 4.0 * ax * ay - axy * axy;
3114 x = (axy * by - 2.0 * ay * bx) / denom;
3115 y = (axy * bx - 2.0 * ax * by) / denom;
3116 if( xbnds.
inf <= x && x <= xbnds.
sup && ybnds.
inf <= y && y <= ybnds.
sup )
3118 val = (axy * bx * by - ay * bx * bx - ax * by * by) / denom;
3119 minval = MIN(val, minval);
3120 maxval =
MAX(val, maxval);
3123 else if(
REALABS(2.0 * ay * bx - axy * by) <= 1e-9 )
3129 if( xbnds.
inf <= -infinity && xbnds.
sup >= infinity )
3131 val = -ay * bx * bx / (axy * axy);
3132 minval = MIN(val, minval);
3133 maxval =
MAX(val, maxval);
3139 if( xbnds.
inf <= -infinity )
3146 else if( ax == 0.0 )
3150 if( ybnds.
inf <= -infinity )
3152 else if( bx + axy * ybnds.
inf < 0.0 )
3156 minval = MIN(val, minval);
3157 maxval =
MAX(val, maxval);
3159 if( ybnds.
sup >= infinity )
3161 else if( bx + axy * ybnds.
sup < 0.0 )
3165 minval = MIN(val, minval);
3166 maxval =
MAX(val, maxval);
3178 minval = MIN(tmp.
inf, minval);
3179 maxval =
MAX(tmp.
sup, maxval);
3182 if( xbnds.
sup >= infinity )
3189 else if( ax == 0.0 )
3193 if( ybnds.
inf <= -infinity )
3195 else if( bx + axy * ybnds.
inf > 0.0 )
3199 minval = MIN(val, minval);
3200 maxval =
MAX(val, maxval);
3202 if( ybnds.
sup >= infinity )
3204 else if( bx + axy * ybnds.
sup > 0.0 )
3208 minval = MIN(val, minval);
3209 maxval =
MAX(val, maxval);
3221 minval = MIN(tmp.
inf, minval);
3222 maxval =
MAX(tmp.
sup, maxval);
3225 if( ybnds.
inf <= -infinity )
3232 else if( ay == 0.0 )
3236 if( xbnds.
inf <= -infinity )
3238 else if( by + axy * xbnds.
inf < 0.0 )
3242 minval = MIN(val, minval);
3243 maxval =
MAX(val, maxval);
3245 if( xbnds.
sup >= infinity )
3247 else if( by + axy * xbnds.
sup < 0.0 )
3251 minval = MIN(val, minval);
3252 maxval =
MAX(val, maxval);
3264 minval = MIN(tmp.
inf, minval);
3265 maxval =
MAX(tmp.
sup, maxval);
3268 if( ybnds.
sup >= infinity )
3275 else if( ay == 0.0 )
3279 if( xbnds.
inf <= -infinity )
3281 else if( by + axy * xbnds.
inf > 0.0 )
3285 minval = MIN(val, minval);
3286 maxval =
MAX(val, maxval);
3288 if( xbnds.
sup >= infinity )
3290 else if( by + axy * xbnds.
sup > 0.0 )
3294 minval = MIN(val, minval);
3295 maxval =
MAX(val, maxval);
3307 minval = MIN(tmp.
inf, minval);
3308 maxval =
MAX(tmp.
sup, maxval);
3311 minval -= 1e-10 *
REALABS(minval);
3312 maxval += 1e-10 *
REALABS(maxval);
3315 SCIPdebugMessage(
"range for %gx^2 + %gy^2 + %gxy + %gx + %gy = [%g, %g] for x = [%g, %g], y=[%g, %g]\n",
3316 ax, ay, axy, bx, by, minval, maxval, xbnds.
inf, xbnds.
sup, ybnds.
inf, ybnds.
sup);
3340 assert(resultant != NULL);
3358 if( xbnds.
sup >= 0.0 )
3368 if( xbnds.
inf < 0.0 )
3419 rcoef_y = axy * bx / (2.0*ax) - by;
3420 rcoef_yy = axy * axy / (4.0*ax) - ay;
3421 rcoef_const = bx * bx / (4.0*ax);
3423 #define CALCB(y) ((bx + axy * (y)) / (2.0 * sqrtax)) 3424 #define CALCR(c,y) (rcoef_const + (c) + (rcoef_y + rcoef_yy * (y)) * (y)) 3427 if( rhs.
sup < infinity )
3435 if(
EPSN(ub, 1e-9) )
3462 if( rhs.
sup >= infinity )
3472 if( ybnds.
inf <= -infinity )
3475 if( !
EPSZ(ay, 1e-9) && axy * axy >= 4.0 * ax * ay )
3496 else if( !
EPSZ(ay, 1e-9) )
3503 minvalleft = -by / 2.0;
3504 maxvalleft = -by / 2.0;
3516 if( rhs.
sup < infinity )
3525 minvalleft = MIN(-sqrtc - b, minvalleft);
3526 maxvalright =
MAX( sqrtc - b, maxvalright);
3530 if( rhs.
inf > -infinity )
3539 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3540 minvalright = MIN( sqrtc - b, minvalright);
3546 if( ybnds.
sup >= infinity )
3549 if( !
EPSZ(ay, 1e-9) && axy * axy >= 4.0 * ax * ay )
3570 else if( !
EPSZ(ay, 1e-9) )
3579 minvalright = MIN(minvalright, -by / 2.0);
3580 maxvalright =
MAX(maxvalright, -by / 2.0);
3590 if( rhs.
sup < infinity )
3599 minvalleft = MIN(-sqrtc - b, minvalleft);
3600 maxvalright =
MAX( sqrtc - b, maxvalright);
3604 if( rhs.
inf > -infinity )
3613 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3614 minvalright = MIN( sqrtc - b, minvalright);
3621 if( !
EPSZ(ay, 1e-9) )
3623 if(
REALABS(axy*axy - 4.0*ax*ay) > 1e-9 )
3627 if( rhs.
sup < infinity )
3629 sqrtterm = axy * axy * ay * (ay * bx * bx - axy * bx * by + ax * by * by - axy * axy * rhs.
sup + 4.0 * ax * ay * rhs.
sup);
3630 if( !
EPSN(sqrtterm, 1e-9) )
3632 sqrtterm =
sqrt(
MAX(sqrtterm, 0.0));
3634 ymin = axy * ay * bx - 2.0 * ax * ay * by - sqrtterm;
3636 ymin /= 4.0 * ax * ay - axy * axy;
3638 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3651 minvalleft = MIN(-sqrtc - b, minvalleft);
3652 maxvalright =
MAX( sqrtc - b, maxvalright);
3657 ymin = axy * ay * bx - 2.0 * ax * ay * by + sqrtterm;
3659 ymin /= 4.0 * ax * ay - axy * axy;
3661 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3674 minvalleft = MIN(-sqrtc - b, minvalleft);
3675 maxvalright =
MAX( sqrtc - b, maxvalright);
3681 if( rhs.
inf > -infinity )
3683 sqrtterm = axy * axy * ay * (ay * bx * bx - axy * bx * by + ax * by * by - axy * axy * rhs.
inf + 4.0 * ax * ay * rhs.
inf);
3684 if( !
EPSN(sqrtterm, 1e-9) )
3686 sqrtterm =
sqrt(
MAX(sqrtterm, 0.0));
3688 ymin = axy * ay * bx - 2.0 * ax * ay * by - sqrtterm;
3690 ymin /= 4.0 * ax * ay - axy * axy;
3692 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3705 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3706 minvalright = MIN( sqrtc - b, minvalright);
3711 ymin = axy * ay * bx - 2.0 * ax * ay * by + sqrtterm;
3713 ymin /= 4.0 * ax * ay - axy * axy;
3715 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3728 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3729 minvalright = MIN( sqrtc - b, minvalright);
3736 else if(
REALABS(2.0 * ay * bx - axy * by) > 1e-9 )
3738 if( rhs.
sup < infinity )
3740 ymin = - (4.0 * ay * bx * by - axy * by * by + 4.0 * axy * ay * rhs.
sup);
3742 ymin /= 2.0 * ay * bx - axy * by;
3744 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3757 minvalleft = MIN(-sqrtc - b, minvalleft);
3758 maxvalright =
MAX( sqrtc - b, maxvalright);
3763 if( rhs.
inf > -infinity )
3765 ymin = - (4.0 * ay * bx * by - axy * by * by + 4.0 * axy * ay * rhs.
inf);
3767 ymin /= 2.0 * ay * bx - axy * by;
3769 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3782 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3783 minvalright = MIN( sqrtc - b, minvalright);
3814 if( ybnds.
sup >= 0.0 )
3822 assert(ypos.
inf >= 0.0);
3824 minvalleft = MIN(minvalleft, -b);
3825 maxvalleft =
MAX(maxvalleft, -b);
3826 minvalright = MIN(minvalright, -b);
3827 maxvalright =
MAX(maxvalright, -b);
3829 if( ypos.
sup < infinity )
3832 minvalleft = MIN(minvalleft, -b);
3833 maxvalleft =
MAX(maxvalleft, -b);
3834 minvalright = MIN(minvalright, -b);
3835 maxvalright =
MAX(maxvalright, -b);
3858 if( ybnds.
inf < 0.0 )
3872 if( yneg.
inf > -infinity )
3875 minvalleft = MIN(minvalleft, -b);
3876 maxvalleft =
MAX(maxvalleft, -b);
3877 minvalright = MIN(minvalright, -b);
3878 maxvalright =
MAX(maxvalright, -b);
3895 assert(yneg.
sup <= 0.0);
3897 minvalleft = MIN(minvalleft, -b);
3898 maxvalleft =
MAX(maxvalleft, -b);
3899 minvalright = MIN(minvalright, -b);
3900 maxvalright =
MAX(maxvalright, -b);
3905 if( rhs.
inf > -infinity && xbnds.
inf > -infinity &&
EPSGT(xbnds.
inf, maxvalleft / sqrtax, 1e-9) )
3909 assert(
EPSGE(minvalright, minvalleft, 1e-9));
3910 if( minvalright > -infinity )
3912 assert(minvalright < infinity);
3919 if( minvalleft > -infinity )
3921 assert(minvalleft < infinity);
3926 if( rhs.
inf > -infinity && xbnds.
sup < infinity &&
EPSLT(xbnds.
sup, minvalright / sqrtax, 1e-9) )
3930 assert(
EPSLE(maxvalleft, maxvalright, 1e-9));
3931 if( maxvalleft < infinity )
3933 assert(maxvalleft > -infinity);
3940 if( maxvalright < infinity )
3942 assert(maxvalright > -infinity);
3964 if(
EPSGE(-bx / axy, ybnds.
inf, 1e-9) &&
EPSLE(-bx / axy, ybnds.
sup, 1e-9) )
3974 if( xbnds.
inf < 0.0 && xbnds.
sup > 0.0 )
3992 if( lincoef.
inf == 0.0 && lincoef.
sup == 0.0 )
3995 if( myrhs.
inf <= 0.0 && myrhs.
sup >= 0.0 )
4000 else if( xbnds.
inf >= 0.0 )
4012 assert(xbnds.
sup <= 0.0);
4031 if( bx + axy * (axy > 0.0 ? ybnds.
inf : ybnds.
sup) > 0.0 )
4036 if( c > -infinity && c < infinity )
4038 if( ybnds.
inf <= -infinity )
4041 if(
EPSZ(ay, 1e-9) )
4043 else if( ay * axy < 0.0 )
4048 val = (c - ay * ybnds.
inf * ybnds.
inf - by * ybnds.
inf) / (bx + axy * ybnds.
inf);
4049 minval = MIN(val, minval);
4052 if( ybnds.
sup >= infinity )
4055 if(
EPSZ(ay, 1e-9) )
4056 minval = MIN(minval, -by / axy);
4057 else if( ay * axy > 0.0 )
4062 val = (c - ay * ybnds.
sup * ybnds.
sup - by * ybnds.
sup) / (bx + axy * ybnds.
sup);
4063 minval = MIN(val, minval);
4066 if( !
EPSZ(ay, 1e-9) )
4068 d = ay * (ay * bx * bx - axy * (bx * by + axy * c));
4069 if( !
EPSN(d, 1e-9) )
4071 ymin = -ay * bx +
sqrt(
MAX(d, 0.0));
4074 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
4076 assert(bx + axy * ymin != 0.0);
4078 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4079 minval = MIN(val, minval);
4082 ymin = -ay * bx -
sqrt(
MAX(d, 0.0));
4085 if(ymin > ybnds.
inf && ymin < ybnds.
sup )
4087 assert(bx + axy * ymin != 0.0);
4089 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4090 minval = MIN(val, minval);
4101 if( bx + axy * (axy > 0.0 ? ybnds.
inf : ybnds.
sup) > 0.0 )
4106 if( c > -infinity && c < infinity )
4108 if( ybnds.
inf <= -infinity )
4111 if(
EPSZ(ay, 1e-9) )
4113 else if( ay * axy > 0.0 )
4118 val = (c - ay * ybnds.
inf * ybnds.
inf - by * ybnds.
inf) / (bx + axy * ybnds.
inf);
4119 maxval =
MAX(val, maxval);
4122 if( ybnds.
sup >= infinity )
4125 if(
EPSZ(ay, 1e-9) )
4126 maxval =
MAX(maxval, -by / axy);
4127 else if( ay * axy < 0.0 )
4132 val = (c - ay * ybnds.
sup * ybnds.
sup - by * ybnds.
sup) / (bx + axy * ybnds.
sup);
4133 maxval =
MAX(val, maxval);
4136 if( !
EPSZ(ay, 1e-9) )
4138 d = ay * (ay * bx * bx - axy * (bx * by + axy * c));
4139 if( !
EPSN(d, 1e-9) )
4141 ymin = ay * bx +
sqrt(
MAX(d, 0.0));
4144 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4145 maxval =
MAX(val, maxval);
4147 ymin = ay * bx -
sqrt(
MAX(d, 0.0));
4150 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4151 maxval =
MAX(val, maxval);
4160 if( minval > -infinity )
4161 resultant->
inf = minval - 1e-10 *
REALABS(minval);
4164 if( maxval < infinity )
4165 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)
SCIP_Real SCIPnextafter(SCIP_Real from, SCIP_Real to)
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)