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;
2356 assert(resultant->
inf >= 0.0);
2363 if( operand.
inf <= -infinity )
2365 resultant->
inf = 0.0;
2367 else if( operand.
inf == 0.0 )
2369 resultant->
inf = 1.0;
2379 if( resultant->
inf >= infinity )
2383 if( operand.
sup >= infinity )
2387 else if( operand.
sup == 0.0 )
2389 resultant->
sup = 1.0;
2395 if( resultant->
sup < -infinity )
2409 assert(resultant != NULL);
2415 if( operand.
sup <= 0.0 )
2421 if( operand.
inf == operand.
sup )
2423 if( operand.
sup == 1.0 )
2425 resultant->
inf = 0.0;
2426 resultant->
sup = 0.0;
2441 if( operand.
inf <= 0.0 )
2445 else if( operand.
inf == 1.0 )
2447 resultant->
inf = 0.0;
2455 if( operand.
sup >= infinity )
2459 else if( operand.
sup == 1.0 )
2461 resultant->
sup = 0.0;
2478 assert(resultant != NULL);
2482 resultant->
inf = MIN(operand1.
inf, operand2.
inf);
2483 resultant->
sup = MIN(operand1.
sup, operand2.
sup);
2494 assert(resultant != NULL);
2509 assert(resultant != NULL);
2512 if( operand.
inf <= 0.0 && operand.
sup >= 0.0)
2514 resultant->
inf = 0.0;
2517 else if( operand.
inf > 0.0 )
2519 *resultant = operand;
2523 resultant->
inf = -operand.
sup;
2524 resultant->
sup = -operand.
inf;
2548 assert(resultant != NULL);
2551 intervallen = operand.
sup - operand.
inf;
2552 if( intervallen >= 2*
M_PI )
2558 modinf = fmod(operand.
inf, 2*
M_PI);
2561 modsup = modinf + intervallen;
2565 if( modinf <= extremepoints[b] )
2573 if( modsup <= extremepoints[b] )
2606 if( resultant->
inf > -1.0 )
2608 if( resultant->
sup < 1.0 )
2609 resultant->
sup = MIN( 1.0, resultant->
sup + 1e-10 *
REALABS(resultant->
sup));
2611 assert(resultant->
inf <= resultant->
sup);
2634 assert(resultant != NULL);
2637 intervallen = operand.
sup - operand.
inf;
2638 if( intervallen >= 2*M_PI )
2644 modinf = fmod(operand.
inf, 2*M_PI);
2647 modsup = modinf + intervallen;
2651 if( modinf <= extremepoints[b] )
2659 if( modsup <= extremepoints[b] )
2692 if( resultant->
inf > -1.0 )
2694 if( resultant->
sup < 1.0 )
2695 resultant->
sup = MIN( 1.0, resultant->
sup + 1e-10 *
REALABS(resultant->
sup));
2697 assert(resultant->
inf <= resultant->
sup);
2707 assert(resultant != NULL);
2710 if( operand.
sup < 0.0 )
2712 resultant->
inf = -1.0;
2713 resultant->
sup = -1.0;
2715 else if( operand.
inf >= 0.0 )
2717 resultant->
inf = 1.0;
2718 resultant->
sup = 1.0;
2722 resultant->
inf = -1.0;
2723 resultant->
sup = 1.0;
2741 assert(b_.
inf < infinity);
2742 assert(b_.
sup > -infinity);
2743 assert( x.
inf < infinity);
2744 assert( x.
sup > -infinity);
2749 if( (b_.
inf <= -infinity && x.
inf < 0.0 ) ||
2750 ( b_.
inf < 0.0 && x.
inf <= -infinity) ||
2751 ( b_.
sup > 0.0 && x.
sup >= infinity) ||
2752 ( b_.
sup >= infinity && x.
sup > 0.0 ) )
2767 u =
MAX(
MAX(cand1, cand2),
MAX(cand3, cand4));
2812 assert(x.
inf < 0.0 && x.
sup > 0);
2818 return MAX(cand1, cand2);
2840 if( sqrcoeff == 0.0 )
2849 lincoeff.
inf = -lincoeff.
sup;
2850 lincoeff.
sup = -tmp;
2853 assert(resultant->
sup >= resultant->
inf);
2868 assert(resultant != NULL);
2871 if( lincoeff.
inf <= -infinity || rhs.
sup >= infinity || sqrcoeff.
inf <= -infinity )
2873 resultant->
inf = 0.0;
2883 if( lincoeff.
sup < infinity && rhs.
inf > -infinity && sqrcoeff.
sup < infinity )
2895 if( resultant->
inf >= infinity || resultant->
sup <= -infinity )
2919 assert(resultant != NULL);
2920 assert(sqrcoeff < infinity);
2921 assert(sqrcoeff > -infinity);
2923 resultant->
inf = 0.0;
2931 if( lincoeff >= 0.0 )
2936 delta = b*b + sqrcoeff*rhs;
2937 if( delta < 0.0 || (sqrcoeff == 0.0 && lincoeff == 0.0) )
2948 if( sqrcoeff < 0.0 )
2954 if( sqrcoeff < 0.0 )
2956 delta = b*b + sqrcoeff*rhs;
2969 if( sqrcoeff > 0.0 )
2972 delta = b*b + sqrcoeff*rhs;
2977 resultant->
inf = z / sqrcoeff;
2987 delta = b*b + sqrcoeff * rhs;
2988 if( delta >= 0.0 && sqrcoeff <= 0.0 )
3019 assert(resultant != NULL);
3021 if( sqrcoeff.
inf == 0.0 && sqrcoeff.
sup == 0.0 )
3023 if( lincoeff.
inf == 0.0 && lincoeff.
sup == 0.0 )
3025 if( rhs.
inf <= 0.0 && rhs.
sup >= 0.0 )
3036 if( lincoeff.
inf == 0.0 && lincoeff.
sup == 0.0 )
3040 resultant->
inf = -resultant->
sup;
3046 SCIPdebugMessage(
" positive solutions of [%g,%g]*x^2 + [%g,%g]*x in [%g,%g] are [%g,%g]\n",
3050 lincoeff.
inf = -lincoeff.
sup;
3051 lincoeff.
sup = -tmp;
3058 SCIPdebugMessage(
" negative solutions of [%g,%g]*x^2 + [%g,%g]*x in [%g,%g] are [%g,%g]\n",
3089 assert(resultant != NULL);
3090 assert(xbnds.
inf <= xbnds.
sup);
3091 assert(ybnds.
inf <= ybnds.
sup);
3115 denom = 4.0 * ax * ay - axy * axy;
3118 x = (axy * by - 2.0 * ay * bx) / denom;
3119 y = (axy * bx - 2.0 * ax * by) / denom;
3120 if( xbnds.
inf <= x && x <= xbnds.
sup && ybnds.
inf <= y && y <= ybnds.
sup )
3122 val = (axy * bx * by - ay * bx * bx - ax * by * by) / denom;
3123 minval = MIN(val, minval);
3124 maxval =
MAX(val, maxval);
3127 else if(
REALABS(2.0 * ay * bx - axy * by) <= 1e-9 )
3133 if( xbnds.
inf <= -infinity && xbnds.
sup >= infinity )
3135 val = -ay * bx * bx / (axy * axy);
3136 minval = MIN(val, minval);
3137 maxval =
MAX(val, maxval);
3143 if( xbnds.
inf <= -infinity )
3150 else if( ax == 0.0 )
3154 if( ybnds.
inf <= -infinity )
3156 else if( bx + axy * ybnds.
inf < 0.0 )
3160 minval = MIN(val, minval);
3161 maxval =
MAX(val, maxval);
3163 if( ybnds.
sup >= infinity )
3165 else if( bx + axy * ybnds.
sup < 0.0 )
3169 minval = MIN(val, minval);
3170 maxval =
MAX(val, maxval);
3182 minval = MIN(tmp.
inf, minval);
3183 maxval =
MAX(tmp.
sup, maxval);
3186 if( xbnds.
sup >= infinity )
3193 else if( ax == 0.0 )
3197 if( ybnds.
inf <= -infinity )
3199 else if( bx + axy * ybnds.
inf > 0.0 )
3203 minval = MIN(val, minval);
3204 maxval =
MAX(val, maxval);
3206 if( ybnds.
sup >= infinity )
3208 else if( bx + axy * ybnds.
sup > 0.0 )
3212 minval = MIN(val, minval);
3213 maxval =
MAX(val, maxval);
3225 minval = MIN(tmp.
inf, minval);
3226 maxval =
MAX(tmp.
sup, maxval);
3229 if( ybnds.
inf <= -infinity )
3236 else if( ay == 0.0 )
3240 if( xbnds.
inf <= -infinity )
3242 else if( by + axy * xbnds.
inf < 0.0 )
3246 minval = MIN(val, minval);
3247 maxval =
MAX(val, maxval);
3249 if( xbnds.
sup >= infinity )
3251 else if( by + axy * xbnds.
sup < 0.0 )
3255 minval = MIN(val, minval);
3256 maxval =
MAX(val, maxval);
3268 minval = MIN(tmp.
inf, minval);
3269 maxval =
MAX(tmp.
sup, maxval);
3272 if( ybnds.
sup >= infinity )
3279 else if( ay == 0.0 )
3283 if( xbnds.
inf <= -infinity )
3285 else if( by + axy * xbnds.
inf > 0.0 )
3289 minval = MIN(val, minval);
3290 maxval =
MAX(val, maxval);
3292 if( xbnds.
sup >= infinity )
3294 else if( by + axy * xbnds.
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 minval -= 1e-10 *
REALABS(minval);
3316 maxval += 1e-10 *
REALABS(maxval);
3319 SCIPdebugMessage(
"range for %gx^2 + %gy^2 + %gxy + %gx + %gy = [%g, %g] for x = [%g, %g], y=[%g, %g]\n",
3320 ax, ay, axy, bx, by, minval, maxval, xbnds.
inf, xbnds.
sup, ybnds.
inf, ybnds.
sup);
3344 assert(resultant != NULL);
3362 if( xbnds.
sup >= 0.0 )
3372 if( xbnds.
inf < 0.0 )
3423 rcoef_y = axy * bx / (2.0*ax) - by;
3424 rcoef_yy = axy * axy / (4.0*ax) - ay;
3425 rcoef_const = bx * bx / (4.0*ax);
3427 #define CALCB(y) ((bx + axy * (y)) / (2.0 * sqrtax)) 3428 #define CALCR(c,y) (rcoef_const + (c) + (rcoef_y + rcoef_yy * (y)) * (y)) 3431 if( rhs.
sup < infinity )
3439 if(
EPSN(ub, 1e-9) )
3466 if( rhs.
sup >= infinity )
3476 if( ybnds.
inf <= -infinity )
3479 if( !
EPSZ(ay, 1e-9) && axy * axy >= 4.0 * ax * ay )
3500 else if( !
EPSZ(ay, 1e-9) )
3507 minvalleft = -by / 2.0;
3508 maxvalleft = -by / 2.0;
3520 if( rhs.
sup < infinity )
3529 minvalleft = MIN(-sqrtc - b, minvalleft);
3530 maxvalright =
MAX( sqrtc - b, maxvalright);
3534 if( rhs.
inf > -infinity )
3543 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3544 minvalright = MIN( sqrtc - b, minvalright);
3550 if( ybnds.
sup >= infinity )
3553 if( !
EPSZ(ay, 1e-9) && axy * axy >= 4.0 * ax * ay )
3574 else if( !
EPSZ(ay, 1e-9) )
3583 minvalright = MIN(minvalright, -by / 2.0);
3584 maxvalright =
MAX(maxvalright, -by / 2.0);
3594 if( rhs.
sup < infinity )
3603 minvalleft = MIN(-sqrtc - b, minvalleft);
3604 maxvalright =
MAX( sqrtc - b, maxvalright);
3608 if( rhs.
inf > -infinity )
3617 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3618 minvalright = MIN( sqrtc - b, minvalright);
3625 if( !
EPSZ(ay, 1e-9) )
3627 if(
REALABS(axy*axy - 4.0*ax*ay) > 1e-9 )
3631 if( rhs.
sup < infinity )
3633 sqrtterm = axy * axy * ay * (ay * bx * bx - axy * bx * by + ax * by * by - axy * axy * rhs.
sup + 4.0 * ax * ay * rhs.
sup);
3634 if( !
EPSN(sqrtterm, 1e-9) )
3636 sqrtterm =
sqrt(
MAX(sqrtterm, 0.0));
3638 ymin = axy * ay * bx - 2.0 * ax * ay * by - sqrtterm;
3640 ymin /= 4.0 * ax * ay - axy * axy;
3642 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3655 minvalleft = MIN(-sqrtc - b, minvalleft);
3656 maxvalright =
MAX( sqrtc - b, maxvalright);
3661 ymin = axy * ay * bx - 2.0 * ax * ay * by + sqrtterm;
3663 ymin /= 4.0 * ax * ay - axy * axy;
3665 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3678 minvalleft = MIN(-sqrtc - b, minvalleft);
3679 maxvalright =
MAX( sqrtc - b, maxvalright);
3685 if( rhs.
inf > -infinity )
3687 sqrtterm = axy * axy * ay * (ay * bx * bx - axy * bx * by + ax * by * by - axy * axy * rhs.
inf + 4.0 * ax * ay * rhs.
inf);
3688 if( !
EPSN(sqrtterm, 1e-9) )
3690 sqrtterm =
sqrt(
MAX(sqrtterm, 0.0));
3692 ymin = axy * ay * bx - 2.0 * ax * ay * by - sqrtterm;
3694 ymin /= 4.0 * ax * ay - axy * axy;
3696 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3709 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3710 minvalright = MIN( sqrtc - b, minvalright);
3715 ymin = axy * ay * bx - 2.0 * ax * ay * by + sqrtterm;
3717 ymin /= 4.0 * ax * ay - axy * axy;
3719 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3732 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3733 minvalright = MIN( sqrtc - b, minvalright);
3740 else if(
REALABS(2.0 * ay * bx - axy * by) > 1e-9 )
3742 if( rhs.
sup < infinity )
3744 ymin = - (4.0 * ay * bx * by - axy * by * by + 4.0 * axy * ay * rhs.
sup);
3746 ymin /= 2.0 * ay * bx - axy * by;
3748 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3761 minvalleft = MIN(-sqrtc - b, minvalleft);
3762 maxvalright =
MAX( sqrtc - b, maxvalright);
3767 if( rhs.
inf > -infinity )
3769 ymin = - (4.0 * ay * bx * by - axy * by * by + 4.0 * axy * ay * rhs.
inf);
3771 ymin /= 2.0 * ay * bx - axy * by;
3773 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
3786 maxvalleft =
MAX(-sqrtc - b, maxvalleft);
3787 minvalright = MIN( sqrtc - b, minvalright);
3818 if( ybnds.
sup >= 0.0 )
3826 assert(ypos.
inf >= 0.0);
3828 minvalleft = MIN(minvalleft, -b);
3829 maxvalleft =
MAX(maxvalleft, -b);
3830 minvalright = MIN(minvalright, -b);
3831 maxvalright =
MAX(maxvalright, -b);
3833 if( ypos.
sup < infinity )
3836 minvalleft = MIN(minvalleft, -b);
3837 maxvalleft =
MAX(maxvalleft, -b);
3838 minvalright = MIN(minvalright, -b);
3839 maxvalright =
MAX(maxvalright, -b);
3862 if( ybnds.
inf < 0.0 )
3876 if( yneg.
inf > -infinity )
3879 minvalleft = MIN(minvalleft, -b);
3880 maxvalleft =
MAX(maxvalleft, -b);
3881 minvalright = MIN(minvalright, -b);
3882 maxvalright =
MAX(maxvalright, -b);
3899 assert(yneg.
sup <= 0.0);
3901 minvalleft = MIN(minvalleft, -b);
3902 maxvalleft =
MAX(maxvalleft, -b);
3903 minvalright = MIN(minvalright, -b);
3904 maxvalright =
MAX(maxvalright, -b);
3909 if( rhs.
inf > -infinity && xbnds.
inf > -infinity &&
EPSGT(xbnds.
inf, maxvalleft / sqrtax, 1e-9) )
3913 assert(
EPSGE(minvalright, minvalleft, 1e-9));
3914 if( minvalright > -infinity )
3916 assert(minvalright < infinity);
3923 if( minvalleft > -infinity )
3925 assert(minvalleft < infinity);
3930 if( rhs.
inf > -infinity && xbnds.
sup < infinity &&
EPSLT(xbnds.
sup, minvalright / sqrtax, 1e-9) )
3934 assert(
EPSLE(maxvalleft, maxvalright, 1e-9));
3935 if( maxvalleft < infinity )
3937 assert(maxvalleft > -infinity);
3944 if( maxvalright < infinity )
3946 assert(maxvalright > -infinity);
3968 if(
EPSGE(-bx / axy, ybnds.
inf, 1e-9) &&
EPSLE(-bx / axy, ybnds.
sup, 1e-9) )
3978 if( xbnds.
inf < 0.0 && xbnds.
sup > 0.0 )
3996 if( lincoef.
inf == 0.0 && lincoef.
sup == 0.0 )
3999 if( myrhs.
inf <= 0.0 && myrhs.
sup >= 0.0 )
4004 else if( xbnds.
inf >= 0.0 )
4016 assert(xbnds.
sup <= 0.0);
4035 if( bx + axy * (axy > 0.0 ? ybnds.
inf : ybnds.
sup) > 0.0 )
4040 if( c > -infinity && c < infinity )
4042 if( ybnds.
inf <= -infinity )
4045 if(
EPSZ(ay, 1e-9) )
4047 else if( ay * axy < 0.0 )
4052 val = (c - ay * ybnds.
inf * ybnds.
inf - by * ybnds.
inf) / (bx + axy * ybnds.
inf);
4053 minval = MIN(val, minval);
4056 if( ybnds.
sup >= infinity )
4059 if(
EPSZ(ay, 1e-9) )
4060 minval = MIN(minval, -by / axy);
4061 else if( ay * axy > 0.0 )
4066 val = (c - ay * ybnds.
sup * ybnds.
sup - by * ybnds.
sup) / (bx + axy * ybnds.
sup);
4067 minval = MIN(val, minval);
4070 if( !
EPSZ(ay, 1e-9) )
4072 d = ay * (ay * bx * bx - axy * (bx * by + axy * c));
4073 if( !
EPSN(d, 1e-9) )
4075 ymin = -ay * bx +
sqrt(
MAX(d, 0.0));
4078 if( ymin > ybnds.
inf && ymin < ybnds.
sup )
4080 assert(bx + axy * ymin != 0.0);
4082 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4083 minval = MIN(val, minval);
4086 ymin = -ay * bx -
sqrt(
MAX(d, 0.0));
4089 if(ymin > ybnds.
inf && ymin < ybnds.
sup )
4091 assert(bx + axy * ymin != 0.0);
4093 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4094 minval = MIN(val, minval);
4105 if( bx + axy * (axy > 0.0 ? ybnds.
inf : ybnds.
sup) > 0.0 )
4110 if( c > -infinity && c < infinity )
4112 if( ybnds.
inf <= -infinity )
4115 if(
EPSZ(ay, 1e-9) )
4117 else if( ay * axy > 0.0 )
4122 val = (c - ay * ybnds.
inf * ybnds.
inf - by * ybnds.
inf) / (bx + axy * ybnds.
inf);
4123 maxval =
MAX(val, maxval);
4126 if( ybnds.
sup >= infinity )
4129 if(
EPSZ(ay, 1e-9) )
4130 maxval =
MAX(maxval, -by / axy);
4131 else if( ay * axy < 0.0 )
4136 val = (c - ay * ybnds.
sup * ybnds.
sup - by * ybnds.
sup) / (bx + axy * ybnds.
sup);
4137 maxval =
MAX(val, maxval);
4140 if( !
EPSZ(ay, 1e-9) )
4142 d = ay * (ay * bx * bx - axy * (bx * by + axy * c));
4143 if( !
EPSN(d, 1e-9) )
4145 ymin = ay * bx +
sqrt(
MAX(d, 0.0));
4148 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4149 maxval =
MAX(val, maxval);
4151 ymin = ay * bx -
sqrt(
MAX(d, 0.0));
4154 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin);
4155 maxval =
MAX(val, maxval);
4164 if( minval > -infinity )
4165 resultant->
inf = minval - 1e-10 *
REALABS(minval);
4168 if( maxval < infinity )
4169 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)