|
Go to the documentation of this file. 42 #define SCIP_ROUND_DOWNWARDS FE_DOWNWARD 43 #define SCIP_ROUND_UPWARDS FE_UPWARD 44 #define SCIP_ROUND_NEAREST FE_TONEAREST 45 #define SCIP_ROUND_ZERO FE_TOWARDZERO 60 if( fesetround(roundmode) != 0 ) 88 #define SCIP_ROUND_DOWNWARDS FP_RND_RM 89 #define SCIP_ROUND_UPWARDS FP_RND_RP 90 #define SCIP_ROUND_NEAREST FP_RND_RN 91 #define SCIP_ROUND_ZERO FP_RND_RZ 106 if( write_rnd(roundmode) != 0 ) 134 #define SCIP_ROUND_DOWNWARDS RC_DOWN 135 #define SCIP_ROUND_UPWARDS RC_UP 136 #define SCIP_ROUND_NEAREST RC_NEAR 137 #define SCIP_ROUND_ZERO RC_CHOP 152 if( (_controlfp(roundmode, _MCW_RC) & _MCW_RC) != roundmode ) 164 return _controlfp(0, 0) & _MCW_RC; 174 #define SCIP_ROUND_DOWNWARDS 0 175 #define SCIP_ROUND_UPWARDS 1 176 #define SCIP_ROUND_NEAREST 2 177 #define SCIP_ROUND_ZERO 3 192 SCIPerrorMessage( "setting rounding mode not available - interval arithmetic is invalid!\n"); 207 #if defined(__GNUC__) && (defined(__i386__) || defined(__x86_64__)) 220 __asm volatile ( "fldl %1; fchs; fstpl %0" : "=m" (x) : "m" (x)); 227 #elif defined(_MSC_VER) && (defined(__INTEL_COMPILER) || !defined(_M_X64)) 249 #define nextafter(x,y) _nextafter(x,y) 255 #if defined(_MSC_VER) && defined(_M_X64) && !defined(NO_NEXTAFTER) 256 #define nextafter(x,y) _nextafter(x,y) 289 #define __HI(x) *(1+(int*)&x) 290 #define __LO(x) *(int*)&x 291 #define __HIp(x) *(1+(int*)x) 292 #define __LOp(x) *(int*)x 295 double nextafter( double x, double y) 311 if( ((ix>=0x7ff00000) && ((ix-0x7ff00000)|lx) != 0 ) || 312 ( (iy>=0x7ff00000) && ((iy-0x7ff00000)|ly) != 0 )) 323 __HI(x) = hy&0x80000000; 335 if( hx > hy || ((hx == hy) && (lx > ly)) ) 352 if( hy >= 0 || hx > hy || ((hx == hy) && (lx > ly)) ) 369 if( hy >= 0x7ff00000 ) 371 if( hy < 0x00100000 ) 439 #undef SCIPintervalGetInf 440 #undef SCIPintervalGetSup 441 #undef SCIPintervalSet 442 #undef SCIPintervalSetBounds 443 #undef SCIPintervalSetEmpty 444 #undef SCIPintervalIsEmpty 445 #undef SCIPintervalSetEntire 446 #undef SCIPintervalIsEntire 447 #undef SCIPintervalIsPositiveInfinity 448 #undef SCIPintervalIsNegativeInfinity 472 assert(resultant != NULL); 474 resultant-> inf = value; 475 resultant-> sup = value; 485 assert(resultant != NULL); 488 resultant-> inf = inf; 489 resultant-> sup = sup; 497 assert(resultant != NULL); 499 resultant-> inf = 1.0; 500 resultant-> sup = -1.0; 509 if( operand. sup >= infinity || operand. inf <= -infinity ) 512 return operand. sup < operand. inf; 521 assert(resultant != NULL); 523 resultant-> inf = -infinity; 524 resultant-> sup = infinity; 533 return operand. inf <= -infinity && operand. sup >= infinity; 542 return operand. inf >= infinity && operand. sup >= operand. inf; 551 return operand. sup <= -infinity && operand. inf <= operand. sup; 562 if( operand1. inf > operand1. sup ) 566 if( operand2. inf > operand2. sup ) 569 return ( MAX(-infinity, operand1. inf) >= operand2. inf) && 570 ( MIN( infinity, operand1. sup) <= operand2. sup); 579 return (operand1. sup < operand2. inf) || (operand2. sup < operand1. inf); 589 assert(resultant != NULL); 602 assert(resultant != NULL); 604 if( operand1. inf > operand1. sup ) 607 *resultant = operand2; 611 if( operand2. inf > operand2. sup ) 614 *resultant = operand1; 631 assert(resultant != NULL); 634 if( operand1. inf <= -infinity || operand2. inf <= -infinity ) 636 resultant-> inf = -infinity; 639 else if( operand1. inf >= infinity || operand2. inf >= infinity ) 641 resultant-> inf = infinity; 645 resultant-> inf = operand1. inf + operand2. inf; 658 assert(resultant != NULL); 661 if( operand1. sup >= infinity || operand2. sup >= infinity ) 663 resultant-> sup = infinity; 666 else if( operand1. sup <= -infinity || operand2. sup <= -infinity ) 668 resultant-> sup = -infinity; 672 resultant-> sup = operand1. sup + operand2. sup; 686 assert(resultant != NULL); 713 assert(resultant != NULL); 719 if( operand1. inf <= -infinity || operand2 <= -infinity ) 721 resultant-> inf = -infinity; 723 else if( operand1. inf >= infinity || operand2 >= infinity ) 726 resultant-> inf = infinity; 731 resultant-> inf = operand1. inf + operand2; 735 if( operand1. sup >= infinity || operand2 >= infinity ) 737 resultant-> sup = infinity; 739 else if( operand1. sup <= -infinity || operand2 <= -infinity ) 742 resultant-> sup = -infinity; 747 resultant-> sup = operand1. sup + operand2; 769 for( i = 0; i < length; ++i ) 775 for( i = 0; i < length; ++i ) 793 assert(resultant != NULL); 799 if( operand1. inf <= -infinity || operand2. sup >= infinity ) 800 resultant-> inf = -infinity; 802 else if( operand1. inf >= infinity || operand2. sup <= -infinity ) 804 resultant-> inf = infinity; 805 resultant-> sup = infinity; 811 resultant-> inf = operand1. inf - operand2. sup; 814 if( operand1. sup >= infinity || operand2. inf <= -infinity ) 815 resultant-> sup = infinity; 817 else if( operand1. sup <= -infinity || operand2. inf >= infinity ) 819 assert(resultant-> inf == -infinity); 820 resultant-> sup = -infinity; 825 resultant-> sup = operand1. sup - operand2. inf; 850 assert(resultant != NULL); 856 if( operand1. inf >= infinity ) 859 assert(operand1. sup >= infinity); 862 else if( operand2. inf >= infinity ) 865 assert(operand2. sup >= infinity); 868 else if( operand1. sup <= -infinity ) 871 assert(operand1. inf <= -infinity); 874 else if( operand2. sup <= -infinity ) 877 assert(operand2. inf <= -infinity); 880 else if( ( operand1. inf <= -infinity && operand2. sup > 0.0 ) 881 || ( operand1. sup > 0.0 && operand2. inf <= -infinity ) 882 || ( operand1. inf < 0.0 && operand2. sup >= infinity ) 883 || ( operand1. sup >= infinity && operand2. inf < 0.0 ) ) 885 resultant-> inf = -infinity; 894 cand1 = operand1. inf * operand2. inf; 895 cand2 = operand1. inf * operand2. sup; 896 cand3 = operand1. sup * operand2. inf; 897 cand4 = operand1. sup * operand2. sup; 898 resultant-> inf = MIN( MIN(cand1, cand2), MIN(cand3, cand4)); 910 assert(resultant != NULL); 916 if( operand1. inf >= infinity ) 919 assert(operand1. sup >= infinity); 922 else if( operand2. inf >= infinity ) 925 assert(operand2. sup >= infinity); 928 else if( operand1. sup <= -infinity ) 931 assert(operand1. inf <= -infinity); 934 else if( operand2. sup <= -infinity ) 937 assert(operand2. inf <= -infinity); 940 else if( ( operand1. inf <= -infinity && operand2. inf < 0.0 ) 941 || ( operand1. inf < 0.0 && operand2. inf <= -infinity ) 942 || ( operand1. sup > 0.0 && operand2. sup >= infinity ) 943 || ( operand1. sup >= infinity && operand2. sup > 0.0 ) ) 945 resultant-> sup = infinity; 954 cand1 = operand1. inf * operand2. inf; 955 cand2 = operand1. inf * operand2. sup; 956 cand3 = operand1. sup * operand2. inf; 957 cand4 = operand1. sup * operand2. sup; 958 resultant-> sup = MAX( MAX(cand1, cand2), MAX(cand3, cand4)); 972 assert(resultant != NULL); 998 assert(resultant != NULL); 1001 if( operand2 >= infinity ) 1004 if( operand1. inf > 0 ) 1005 resultant-> inf = infinity; 1006 else if( operand1. inf < 0 ) 1007 resultant-> inf = -infinity; 1009 resultant-> inf = 0.0; 1011 else if( operand2 <= -infinity ) 1014 if( operand1. sup > 0 ) 1015 resultant-> inf = -infinity; 1016 else if( operand1. sup < 0 ) 1017 resultant-> inf = infinity; 1019 resultant-> inf = 0.0; 1021 else if( operand2 == 0.0 ) 1023 resultant-> inf = 0.0; 1025 else if( operand2 > 0.0 ) 1027 if( operand1. inf <= -infinity ) 1028 resultant-> inf = -infinity; 1029 else if( operand1. inf >= infinity ) 1030 resultant-> inf = infinity; 1032 resultant-> inf = operand1. inf * operand2; 1036 if( operand1. sup >= infinity ) 1037 resultant-> inf = -infinity; 1038 else if( operand1. sup <= -infinity ) 1039 resultant-> inf = infinity; 1041 resultant-> inf = operand1. sup * operand2; 1054 assert(resultant != NULL); 1057 if( operand2 >= infinity ) 1060 if( operand1. sup > 0 ) 1061 resultant-> sup = infinity; 1062 else if( operand1. sup < 0 ) 1063 resultant-> sup = -infinity; 1065 resultant-> sup = 0.0; 1067 else if( operand2 <= -infinity ) 1070 if( operand1. inf > 0 ) 1071 resultant-> sup = -infinity; 1072 else if( operand1. inf < 0 ) 1073 resultant-> sup = infinity; 1075 resultant-> sup = 0.0; 1077 else if( operand2 == 0.0 ) 1079 resultant-> sup = 0.0; 1081 else if( operand2 > 0.0 ) 1083 if( operand1. sup >= infinity ) 1084 resultant-> sup = infinity; 1085 else if( operand1. sup <= -infinity ) 1086 resultant-> sup = -infinity; 1088 resultant-> sup = operand1. sup * operand2; 1092 if( operand1. inf <= -infinity ) 1093 resultant-> sup = infinity; 1094 else if( operand1. inf >= infinity ) 1095 resultant-> sup = -infinity; 1097 resultant-> sup = operand1. inf * operand2; 1111 assert(resultant != NULL); 1138 assert(resultant != NULL); 1142 if( operand2. inf <= 0.0 && operand2. sup >= 0.0 ) 1144 resultant-> inf = -infinity; 1145 resultant-> sup = infinity; 1149 if( operand1. inf == 0.0 && operand1. sup == 0.0 ) 1158 if( operand2. sup >= infinity || operand2. sup <= -infinity ) 1165 intmed. inf = 1.0 / operand2. sup; 1167 if( operand2. inf <= -infinity || operand2. inf >= infinity ) 1174 intmed. sup = 1.0 / operand2. inf; 1191 assert(resultant != NULL); 1196 if( operand2 >= infinity || operand2 <= -infinity ) 1199 resultant-> inf = 0.0; 1200 resultant-> sup = 0.0; 1202 else if( operand2 > 0.0 ) 1204 if( operand1. inf <= -infinity ) 1205 resultant-> inf = -infinity; 1206 else if( operand1. inf >= infinity ) 1209 resultant-> inf = infinity; 1214 resultant-> inf = operand1. inf / operand2; 1217 if( operand1. sup >= infinity ) 1218 resultant-> sup = infinity; 1219 else if( operand1. sup <= -infinity ) 1222 resultant-> sup = -infinity; 1227 resultant-> sup = operand1. sup / operand2; 1230 else if( operand2 < 0.0 ) 1232 if( operand1. sup >= infinity ) 1233 resultant-> inf = -infinity; 1234 else if( operand1. sup <= -infinity ) 1237 resultant-> inf = infinity; 1242 resultant-> inf = operand1. sup / operand2; 1245 if( operand1. inf <= -infinity ) 1246 resultant-> sup = infinity; 1247 else if( operand1. inf >= infinity ) 1250 resultant-> sup = -infinity; 1255 resultant-> sup = operand1. inf / operand2; 1260 if( operand1. inf >= 0 ) 1263 resultant-> inf = infinity; 1264 resultant-> sup = infinity; 1266 else if( operand1. sup <= 0 ) 1269 resultant-> inf = -infinity; 1270 resultant-> sup = -infinity; 1275 resultant-> inf = -infinity; 1276 resultant-> sup = infinity; 1299 resultant-> inf = 0.0; 1300 resultant-> sup = 0.0; 1304 for( i = 0; i < length && resultant-> inf > -infinity; ++i ) 1310 assert(resultant-> sup == 0.0); 1314 for( i = 0; i < length && resultant-> sup < infinity ; ++i ) 1340 resultant-> inf = 0.0; 1344 for( i = 0; i < length && resultant-> inf > -infinity; ++i ) 1347 assert(prod. sup >= infinity); 1368 resultant-> sup = 0.0; 1372 for( i = 0; i < length && resultant-> sup < infinity; ++i ) 1375 assert(prod. inf <= -infinity); 1393 resultant-> inf = 0.0; 1394 resultant-> sup = 0.0; 1399 assert(resultant-> sup == 0.0); 1417 assert(resultant != NULL); 1422 if( operand. sup <= 0.0 ) 1424 if( operand. sup <= -infinity ) 1425 resultant-> inf = infinity; 1429 resultant-> inf = operand. sup * operand. sup; 1432 if( operand. inf <= -infinity ) 1433 resultant-> sup = infinity; 1437 resultant-> sup = operand. inf * operand. inf; 1440 else if( operand. inf >= 0.0 ) 1442 if( operand. inf >= infinity ) 1443 resultant-> inf = infinity; 1447 resultant-> inf = operand. inf * operand. inf; 1450 if( operand. sup >= infinity ) 1451 resultant-> sup = infinity; 1455 resultant-> sup = operand. sup * operand. sup; 1460 resultant-> inf = 0.0; 1461 if( operand. inf <= -infinity || operand. sup >= infinity ) 1462 resultant-> sup = infinity; 1469 x = operand. inf * operand. inf; 1470 y = operand. sup * operand. sup; 1471 resultant-> sup = MAX(x, y); 1487 assert(resultant != NULL); 1490 if( operand. sup < 0.0 ) 1496 if( operand. inf == operand. sup ) 1498 if( operand. inf >= infinity ) 1500 resultant-> inf = infinity; 1501 resultant-> sup = infinity; 1516 if( operand. inf <= 0.0 ) 1517 resultant-> inf = 0.0; 1518 else if( operand. inf >= infinity ) 1520 resultant-> inf = infinity; 1521 resultant-> sup = infinity; 1529 if( operand. sup >= infinity ) 1530 resultant-> sup = infinity; 1549 assert(resultant != NULL); 1553 if( operand2. inf == operand2. sup ) 1583 assert(operand1 >= 0.0); 1585 if( operand1 == 0.0 ) 1587 assert(operand2 >= 0); 1595 if( operand1 == 1.0 || operand2 == 0 ) 1602 assert(result != 0.0); 1606 result = 1.0 / result; 1617 n = ( unsigned int)operand2; 1636 result = result * z; 1665 assert(operand1 >= 0.0); 1667 if( operand1 == 0.0 ) 1669 assert(operand2 >= 0); 1677 if( operand1 == 1.0 || operand2 == 0 ) 1684 assert(result != 0.0); 1688 result = 1.0 / result; 1699 n = ( unsigned int)operand2; 1710 result = result * z; 1739 assert(operand1 >= 0.0); 1741 if( operand1 == 0.0 ) 1743 assert(operand2 >= 0); 1757 if( operand1 == 1.0 || operand2 == 0 ) 1767 assert(resultant-> inf > 0.0 || resultant-> sup < 0.0); 1784 n = ( unsigned int)operand2; 1797 result_sup = result_sup * z_sup; 1805 z_sup = z_sup * z_sup; 1811 resultant-> inf = result_inf; 1812 resultant-> sup = result_sup; 1813 assert(resultant-> inf <= resultant-> sup); 1830 assert(resultant != NULL); 1832 if( operand1 == 0.0 ) 1834 assert(operand2 >= 0); 1848 if( operand1 == 1.0 || operand2 == 0 ) 1855 result = pow(operand1, operand2); 1874 assert(resultant != NULL); 1877 if( operand2 == infinity ) 1883 if( operand1. inf < 0.0 ) 1884 resultant-> inf = -infinity; 1886 resultant-> inf = 0.0; 1887 if( operand1. sup > 0.0 ) 1888 resultant-> sup = infinity; 1890 resultant-> sup = 0.0; 1894 if( operand2 == 0.0 ) 1896 if( operand1. inf == 0.0 && operand1. sup == 0.0 ) 1898 resultant-> inf = 0.0; 1899 resultant-> sup = 0.0; 1901 else if( operand1. inf <= 0.0 || operand1. sup >= 0.0 ) 1903 resultant-> inf = 0.0; 1904 resultant-> sup = 1.0; 1908 resultant-> inf = 1.0; 1909 resultant-> sup = 1.0; 1914 if( operand2 == 1.0 ) 1917 *resultant = operand1; 1921 op2isint = (ceil(operand2) == operand2); 1923 if( !op2isint && operand1. inf < 0.0 ) 1926 if( operand1. sup < operand1. inf ) 1933 if( operand1. inf >= 0.0 ) 1935 if( operand2 >= 0.0 ) 1938 if( operand1. inf >= infinity ) 1939 resultant-> inf = infinity; 1940 else if( operand1. inf > 0.0 ) 1946 resultant-> inf = 0.0; 1948 if( operand1. sup >= infinity ) 1949 resultant-> sup = infinity; 1950 else if( operand1. sup > 0.0 ) 1956 resultant-> sup = 0.0; 1960 if( operand1. sup >= infinity ) 1961 resultant-> inf = 0.0; 1962 else if( operand1. sup == 0.0 ) 1966 if( ceil(operand2/2) == operand2/2 ) 1967 resultant-> inf = infinity; 1969 resultant-> inf = -infinity; 1978 if( operand1. inf == 0.0 ) 1979 resultant-> sup = infinity; 1987 else if( operand1. sup <= 0.0 ) 1990 if( operand2 >= 0.0 && ceil(operand2/2) == operand2/2 ) 1993 if( operand1. sup == -infinity ) 1995 resultant-> inf = infinity; 1999 if( operand1. inf <= -infinity ) 2000 resultant-> sup = infinity; 2004 else if( operand2 <= 0.0 && ceil(operand2/2) != operand2/2 ) 2007 if( operand1. sup == -infinity ) 2009 resultant-> inf = 0.0; 2010 else if( operand1. sup == 0.0 ) 2012 resultant-> inf = -infinity; 2016 if( operand1. inf <= -infinity ) 2018 resultant-> sup = 0.0; 2019 else if( operand1. inf == 0.0 ) 2021 resultant-> sup = infinity; 2025 else if( operand2 >= 0.0 ) 2028 if( operand1. inf <= -infinity ) 2029 resultant-> inf = -infinity; 2033 if( operand1. sup <= -infinity ) 2034 resultant-> sup = -infinity; 2041 if( operand1. inf <= -infinity ) 2042 resultant-> inf = 0.0; 2043 else if( operand1. inf == 0.0 ) 2045 resultant-> inf = infinity; 2049 if( operand1. sup <= -infinity ) 2050 resultant-> sup = 0.0; 2051 else if( operand1. sup == 0.0 ) 2053 resultant-> sup = infinity; 2057 assert(resultant-> inf <= resultant-> sup || resultant-> inf >= infinity || resultant-> sup <= -infinity); 2062 if( operand2 >= 0.0 && operand2/2 == ceil(operand2/2) ) 2065 resultant-> inf = 0.0; 2066 if( operand1. inf == -infinity || operand1. sup == infinity ) 2067 resultant-> sup = infinity; 2071 else if( operand2 <= 0.0 && ceil(operand2/2) != operand2/2 ) 2074 resultant-> sup = infinity; 2075 if( operand1. inf == -infinity || operand1. sup == infinity ) 2076 resultant-> inf = 0.0; 2080 else if( operand2 >= 0.0 ) 2083 if( operand1. inf == -infinity ) 2084 resultant-> inf = -infinity; 2087 if( operand1. sup == infinity ) 2088 resultant-> sup = infinity; 2097 resultant-> inf = -infinity; 2098 resultant-> sup = infinity; 2103 if( resultant-> inf > infinity ) 2104 resultant-> inf = infinity; 2105 if( resultant-> sup < -infinity ) 2106 resultant-> sup = -infinity; 2124 assert(resultant != NULL); 2125 assert(image. inf <= image. sup); 2126 assert(basedomain. inf <= basedomain. sup); 2128 if( exponent == 0.0 ) 2131 if( image. inf <= 1.0 && image. sup >= 1.0 ) 2134 *resultant = basedomain; 2136 else if( image. inf <= 0.0 && image. sup >= 0.0 ) 2160 if( image. sup >= 0.0 ) 2164 if( basedomain. inf <= -resultant-> inf && EPSISINT(exponent, 0.0) && ( int)exponent % 2 == 0 ) 2166 if( basedomain. sup < resultant-> inf ) 2178 if( image. inf < 0.0 && basedomain. inf < 0.0 && EPSISINT(exponent, 0.0) && (( int)exponent % 2 != 0) ) 2202 assert(resultant != NULL); 2205 assert(operand2 >= 0.0); 2207 if( operand2 == infinity ) 2213 if( operand1. inf < 0.0 ) 2214 resultant-> inf = -infinity; 2216 resultant-> inf = 0.0; 2217 if( operand1. sup > 0.0 ) 2218 resultant-> sup = infinity; 2220 resultant-> sup = 0.0; 2224 if( operand2 == 0.0 ) 2227 if( operand1. inf < 0.0 ) 2228 resultant-> inf = -1.0; 2229 else if( operand1. inf == 0.0 ) 2230 resultant-> inf = 0.0; 2232 resultant-> inf = 1.0; 2234 if( operand1. sup < 0.0 ) 2235 resultant-> sup = -1.0; 2236 else if( operand1. sup == 0.0 ) 2237 resultant-> sup = 0.0; 2239 resultant-> sup = 1.0; 2244 if( operand2 == 1.0 ) 2246 *resultant = operand1; 2252 if( operand2 == 2.0 ) 2254 if( operand1. inf <= -infinity ) 2256 resultant-> inf = -infinity; 2258 else if( operand1. inf >= infinity ) 2260 resultant-> inf = infinity; 2262 else if( operand1. inf > 0.0 ) 2265 resultant-> inf = operand1. inf * operand1. inf; 2274 if( operand1. sup >= infinity ) 2276 resultant-> sup = infinity; 2278 else if( operand1. sup <= -infinity ) 2280 resultant-> sup = -infinity; 2282 else if( operand1. sup > 0.0 ) 2285 resultant-> sup = operand1. sup * operand1. sup; 2293 assert(resultant-> inf <= resultant-> sup); 2295 else if( operand2 == 0.5 ) 2297 if( operand1. inf <= -infinity ) 2298 resultant-> inf = -infinity; 2299 else if( operand1. inf >= infinity ) 2300 resultant-> inf = infinity; 2301 else if( operand1. inf >= 0.0 ) 2312 if( operand1. sup >= infinity ) 2313 resultant-> sup = infinity; 2314 else if( operand1. sup <= -infinity ) 2315 resultant-> sup = -infinity; 2316 else if( operand1. sup > 0.0 ) 2326 assert(resultant-> inf <= resultant-> sup); 2330 if( operand1. inf <= -infinity ) 2331 resultant-> inf = -infinity; 2332 else if( operand1. inf >= infinity ) 2333 resultant-> inf = infinity; 2334 else if( operand1. inf > 0.0 ) 2345 if( operand1. sup >= infinity ) 2346 resultant-> sup = infinity; 2347 else if( operand1. sup <= -infinity ) 2348 resultant-> sup = -infinity; 2349 else if( operand1. sup > 0.0 ) 2374 assert(resultant != NULL); 2377 if( operand. inf == 0.0 && operand. sup == 0.0 ) 2379 resultant-> inf = infinity; 2380 resultant-> sup = -infinity; 2386 if( operand. inf >= 0.0 ) 2388 if( operand. sup >= infinity ) 2389 resultant-> inf = 0.0; 2393 resultant-> inf = 1.0 / operand. sup; 2396 if( operand. inf >= infinity ) 2397 resultant-> sup = 0.0; 2398 else if( operand. inf == 0.0 ) 2399 resultant-> sup = infinity; 2403 resultant-> sup = 1.0 / operand. inf; 2408 else if( operand. sup <= 0.0 ) 2410 if( operand. sup <= -infinity ) 2411 resultant-> inf = 0.0; 2412 else if( operand. sup == 0.0 ) 2413 resultant-> inf = -infinity; 2417 resultant-> inf = 1.0 / operand. sup; 2420 if( operand. inf <= -infinity ) 2421 resultant-> sup = infinity; 2425 resultant-> sup = 1.0 / operand. inf; 2431 resultant-> inf = -infinity; 2432 resultant-> sup = infinity; 2445 assert(resultant != NULL); 2448 if( operand. sup <= -infinity ) 2450 resultant-> inf = 0.0; 2451 resultant-> sup = 0.0; 2455 if( operand. inf >= infinity ) 2457 resultant-> inf = infinity; 2458 resultant-> sup = infinity; 2462 if( operand. inf == operand. sup ) 2464 if( operand. inf == 0.0 ) 2466 resultant-> inf = 1.0; 2467 resultant-> sup = 1.0; 2482 if( operand. inf <= -infinity ) 2484 resultant-> inf = 0.0; 2486 else if( operand. inf == 0.0 ) 2488 resultant-> inf = 1.0; 2495 if( resultant-> inf >= infinity ) 2496 resultant-> inf = infinity; 2499 if( operand. sup >= infinity ) 2501 resultant-> sup = infinity; 2503 else if( operand. sup == 0.0 ) 2505 resultant-> sup = 1.0; 2511 if( resultant-> sup < -infinity ) 2512 resultant-> sup = -infinity; 2525 assert(resultant != NULL); 2528 if( operand. sup < 0.0 ) 2534 if( operand. inf == operand. sup ) 2536 if( operand. sup <= 0.0 ) 2538 resultant-> inf = -infinity; 2539 resultant-> sup = -infinity; 2541 else if( operand. sup == 1.0 ) 2543 resultant-> inf = 0.0; 2544 resultant-> sup = 0.0; 2559 if( operand. inf <= 0.0 ) 2561 resultant-> inf = -infinity; 2563 else if( operand. inf == 1.0 ) 2565 resultant-> inf = 0.0; 2573 if( operand. sup >= infinity ) 2575 resultant-> sup = infinity; 2577 else if( operand. sup == 1.0 ) 2579 resultant-> sup = 0.0; 2581 else if( operand. sup == 0.0 ) 2583 resultant-> sup = -infinity; 2600 assert(resultant != NULL); 2616 assert(resultant != NULL); 2631 assert(resultant != NULL); 2634 if( operand. inf <= 0.0 && operand. sup >= 0.0) 2636 resultant-> inf = 0.0; 2639 else if( operand. inf > 0.0 ) 2641 *resultant = operand; 2645 resultant-> inf = -operand. sup; 2646 resultant-> sup = -operand. inf; 2657 assert(resultant != NULL); 2660 if( operand. sup < 0.0 ) 2662 resultant-> inf = -1.0; 2663 resultant-> sup = -1.0; 2665 else if( operand. inf >= 0.0 ) 2667 resultant-> inf = 1.0; 2668 resultant-> sup = 1.0; 2672 resultant-> inf = -1.0; 2673 resultant-> sup = 1.0; 2691 assert(b_. inf < infinity); 2692 assert(b_. sup > -infinity); 2693 assert( x. inf < infinity); 2694 assert( x. sup > -infinity); 2699 if( (b_. inf <= -infinity && x. inf < 0.0 ) || 2700 ( b_. inf < 0.0 && x. inf <= -infinity) || 2701 ( b_. sup > 0.0 && x. sup >= infinity) || 2702 ( b_. sup >= infinity && x. sup > 0.0 ) ) 2717 u = MAX( MAX(cand1, cand2), MAX(cand3, cand4)); 2762 assert(x. inf < 0.0 && x. sup > 0); 2768 return MAX(cand1, cand2); 2790 if( sqrcoeff == 0.0 ) 2799 lincoeff. inf = -lincoeff. sup; 2800 lincoeff. sup = -tmp; 2803 assert(resultant-> sup >= resultant-> inf); 2818 assert(resultant != NULL); 2821 if( lincoeff. inf <= -infinity || rhs. sup >= infinity || sqrcoeff. inf <= -infinity ) 2823 resultant-> inf = 0.0; 2824 resultant-> sup = infinity; 2833 if( lincoeff. sup < infinity && rhs. inf > -infinity && sqrcoeff. sup < infinity ) 2845 if( resultant-> inf >= infinity || resultant-> sup <= -infinity ) 2869 assert(resultant != NULL); 2870 assert(sqrcoeff < infinity); 2871 assert(sqrcoeff > -infinity); 2873 resultant-> inf = 0.0; 2874 resultant-> sup = infinity; 2881 if( lincoeff >= 0.0 ) 2886 delta = b*b + sqrcoeff*rhs; 2887 if( delta < 0.0 || (sqrcoeff == 0.0 && lincoeff == 0.0) ) 2898 if( sqrcoeff < 0.0 ) 2904 if( sqrcoeff < 0.0 ) 2906 delta = b*b + sqrcoeff*rhs; 2919 if( sqrcoeff > 0.0 ) 2922 delta = b*b + sqrcoeff*rhs; 2927 resultant-> inf = z / sqrcoeff; 2937 delta = b*b + sqrcoeff * rhs; 2938 if( delta >= 0.0 && sqrcoeff <= 0.0 ) 2969 assert(resultant != NULL); 2971 if( sqrcoeff. inf == 0.0 && sqrcoeff. sup == 0.0 ) 2973 if( lincoeff. inf == 0.0 && lincoeff. sup == 0.0 ) 2975 if( rhs. inf <= 0.0 && rhs. sup >= 0.0 ) 2986 if( lincoeff. inf == 0.0 && lincoeff. sup == 0.0 ) 2990 resultant-> inf = -resultant-> sup; 2996 SCIPdebugMessage( " positive solutions of [%g,%g]*x^2 + [%g,%g]*x in [%g,%g] are [%g,%g]\n", 3000 lincoeff. inf = -lincoeff. sup; 3001 lincoeff. sup = -tmp; 3008 SCIPdebugMessage( " negative solutions of [%g,%g]*x^2 + [%g,%g]*x in [%g,%g] are [%g,%g]\n", 3039 assert(resultant != NULL); 3040 assert(xbnds. inf <= xbnds. sup); 3041 assert(ybnds. inf <= ybnds. sup); 3065 denom = 4.0 * ax * ay - axy * axy; 3068 x = (axy * by - 2.0 * ay * bx) / denom; 3069 y = (axy * bx - 2.0 * ax * by) / denom; 3070 if( xbnds. inf <= x && x <= xbnds. sup && ybnds. inf <= y && y <= ybnds. sup ) 3072 val = (axy * bx * by - ay * bx * bx - ax * by * by) / denom; 3073 minval = MIN(val, minval); 3074 maxval = MAX(val, maxval); 3077 else if( REALABS(2.0 * ay * bx - axy * by) <= 1e-9 ) 3083 if( xbnds. inf <= -infinity && xbnds. sup >= infinity ) 3085 val = -ay * bx * bx / (axy * axy); 3086 minval = MIN(val, minval); 3087 maxval = MAX(val, maxval); 3093 if( xbnds. inf <= -infinity ) 3100 else if( ax == 0.0 ) 3104 if( ybnds. inf <= -infinity ) 3105 val = (axy < 0.0 ? -infinity : infinity); 3106 else if( bx + axy * ybnds. inf < 0.0 ) 3110 minval = MIN(val, minval); 3111 maxval = MAX(val, maxval); 3113 if( ybnds. sup >= infinity ) 3114 val = (axy < 0.0 ? infinity : -infinity); 3115 else if( bx + axy * ybnds. sup < 0.0 ) 3119 minval = MIN(val, minval); 3120 maxval = MAX(val, maxval); 3132 minval = MIN(tmp. inf, minval); 3133 maxval = MAX(tmp. sup, maxval); 3136 if( xbnds. sup >= infinity ) 3143 else if( ax == 0.0 ) 3147 if( ybnds. inf <= -infinity ) 3148 val = (axy > 0.0 ? -infinity : infinity); 3149 else if( bx + axy * ybnds. inf > 0.0 ) 3153 minval = MIN(val, minval); 3154 maxval = MAX(val, maxval); 3156 if( ybnds. sup >= infinity ) 3157 val = (axy > 0.0 ? infinity : -infinity); 3158 else if( bx + axy * ybnds. sup > 0.0 ) 3162 minval = MIN(val, minval); 3163 maxval = MAX(val, maxval); 3175 minval = MIN(tmp. inf, minval); 3176 maxval = MAX(tmp. sup, maxval); 3179 if( ybnds. inf <= -infinity ) 3186 else if( ay == 0.0 ) 3190 if( xbnds. inf <= -infinity ) 3191 val = (axy < 0.0 ? -infinity : infinity); 3192 else if( by + axy * xbnds. inf < 0.0 ) 3196 minval = MIN(val, minval); 3197 maxval = MAX(val, maxval); 3199 if( xbnds. sup >= infinity ) 3200 val = (axy < 0.0 ? infinity : -infinity); 3201 else if( by + axy * xbnds. sup < 0.0 ) 3205 minval = MIN(val, minval); 3206 maxval = MAX(val, maxval); 3218 minval = MIN(tmp. inf, minval); 3219 maxval = MAX(tmp. sup, maxval); 3222 if( ybnds. sup >= infinity ) 3229 else if( ay == 0.0 ) 3233 if( xbnds. inf <= -infinity ) 3234 val = (axy > 0.0 ? -infinity : infinity); 3235 else if( by + axy * xbnds. inf > 0.0 ) 3239 minval = MIN(val, minval); 3240 maxval = MAX(val, maxval); 3242 if( xbnds. sup >= infinity ) 3243 val = (axy > 0.0 ? infinity : -infinity); 3244 else if( by + axy * xbnds. sup > 0.0 ) 3248 minval = MIN(val, minval); 3249 maxval = MAX(val, maxval); 3261 minval = MIN(tmp. inf, minval); 3262 maxval = MAX(tmp. sup, maxval); 3265 minval -= 1e-10 * REALABS(minval); 3266 maxval += 1e-10 * REALABS(maxval); 3269 SCIPdebugMessage( "range for %gx^2 + %gy^2 + %gxy + %gx + %gy = [%g, %g] for x = [%g, %g], y=[%g, %g]\n", 3270 ax, ay, axy, bx, by, minval, maxval, xbnds. inf, xbnds. sup, ybnds. inf, ybnds. sup); 3294 assert(resultant != NULL); 3312 if( xbnds. sup >= 0.0 ) 3322 if( xbnds. inf < 0.0 ) 3373 rcoef_y = axy * bx / (2.0*ax) - by; 3374 rcoef_yy = axy * axy / (4.0*ax) - ay; 3375 rcoef_const = bx * bx / (4.0*ax); 3377 #define CALCB(y) ((bx + axy * (y)) / (2.0 * sqrtax)) 3378 #define CALCR(c,y) (rcoef_const + (c) + (rcoef_y + rcoef_yy * (y)) * (y)) 3381 if( rhs. sup < infinity ) 3389 if( EPSN(ub, 1e-9) ) 3403 minvalleft = infinity; 3404 maxvalleft = -infinity; 3405 minvalright = infinity; 3406 maxvalright = -infinity; 3408 if( rhs. sup >= infinity ) 3412 minvalleft = -infinity; 3413 maxvalright = infinity; 3417 if( ybnds. inf <= -infinity ) 3420 if( ! EPSZ(ay, 1e-9) && axy * axy >= 4.0 * ax * ay ) 3424 minvalleft = -infinity; 3427 minvalright = -infinity; 3429 maxvalright = infinity; 3433 maxvalright = infinity; 3436 maxvalleft = infinity; 3438 minvalleft = -infinity; 3441 else if( ! EPSZ(ay, 1e-9) ) 3448 minvalleft = -by / 2.0; 3449 maxvalleft = -by / 2.0; 3451 maxvalright = infinity; 3461 if( rhs. sup < infinity ) 3470 minvalleft = MIN(-sqrtc - b, minvalleft); 3471 maxvalright = MAX( sqrtc - b, maxvalright); 3475 if( rhs. inf > -infinity ) 3484 maxvalleft = MAX(-sqrtc - b, maxvalleft); 3485 minvalright = MIN( sqrtc - b, minvalright); 3491 if( ybnds. sup >= infinity ) 3494 if( ! EPSZ(ay, 1e-9) && axy * axy >= 4.0 * ax * ay ) 3498 minvalleft = -infinity; 3501 minvalright = -infinity; 3503 maxvalright = infinity; 3507 maxvalright = infinity; 3510 maxvalleft = infinity; 3512 minvalleft = -infinity; 3515 else if( ! EPSZ(ay, 1e-9) ) 3522 minvalleft = -infinity; 3524 minvalright = MIN(minvalright, -by / 2.0); 3525 maxvalright = MAX(maxvalright, -by / 2.0); 3535 if( rhs. sup < infinity ) 3544 minvalleft = MIN(-sqrtc - b, minvalleft); 3545 maxvalright = MAX( sqrtc - b, maxvalright); 3549 if( rhs. inf > -infinity ) 3558 maxvalleft = MAX(-sqrtc - b, maxvalleft); 3559 minvalright = MIN( sqrtc - b, minvalright); 3566 if( ! EPSZ(ay, 1e-9) ) 3568 if( REALABS(axy*axy - 4.0*ax*ay) > 1e-9 ) 3572 if( rhs. sup < infinity ) 3574 sqrtterm = axy * axy * ay * (ay * bx * bx - axy * bx * by + ax * by * by - axy * axy * rhs. sup + 4.0 * ax * ay * rhs. sup); 3575 if( ! EPSN(sqrtterm, 1e-9) ) 3577 sqrtterm = sqrt( MAX(sqrtterm, 0.0)); 3579 ymin = axy * ay * bx - 2.0 * ax * ay * by - sqrtterm; 3581 ymin /= 4.0 * ax * ay - axy * axy; 3583 if( ymin > ybnds. inf && ymin < ybnds. sup ) 3596 minvalleft = MIN(-sqrtc - b, minvalleft); 3597 maxvalright = MAX( sqrtc - b, maxvalright); 3602 ymin = axy * ay * bx - 2.0 * ax * ay * by + sqrtterm; 3604 ymin /= 4.0 * ax * ay - axy * axy; 3606 if( ymin > ybnds. inf && ymin < ybnds. sup ) 3619 minvalleft = MIN(-sqrtc - b, minvalleft); 3620 maxvalright = MAX( sqrtc - b, maxvalright); 3626 if( rhs. inf > -infinity ) 3628 sqrtterm = axy * axy * ay * (ay * bx * bx - axy * bx * by + ax * by * by - axy * axy * rhs. inf + 4.0 * ax * ay * rhs. inf); 3629 if( ! EPSN(sqrtterm, 1e-9) ) 3631 sqrtterm = sqrt( MAX(sqrtterm, 0.0)); 3633 ymin = axy * ay * bx - 2.0 * ax * ay * by - sqrtterm; 3635 ymin /= 4.0 * ax * ay - axy * axy; 3637 if( ymin > ybnds. inf && ymin < ybnds. sup ) 3650 maxvalleft = MAX(-sqrtc - b, maxvalleft); 3651 minvalright = MIN( sqrtc - b, minvalright); 3656 ymin = axy * ay * bx - 2.0 * ax * ay * by + sqrtterm; 3658 ymin /= 4.0 * ax * ay - axy * axy; 3660 if( ymin > ybnds. inf && ymin < ybnds. sup ) 3673 maxvalleft = MAX(-sqrtc - b, maxvalleft); 3674 minvalright = MIN( sqrtc - b, minvalright); 3681 else if( REALABS(2.0 * ay * bx - axy * by) > 1e-9 ) 3683 if( rhs. sup < infinity ) 3685 ymin = - (4.0 * ay * bx * by - axy * by * by + 4.0 * axy * ay * rhs. sup); 3687 ymin /= 2.0 * ay * bx - axy * by; 3689 if( ymin > ybnds. inf && ymin < ybnds. sup ) 3702 minvalleft = MIN(-sqrtc - b, minvalleft); 3703 maxvalright = MAX( sqrtc - b, maxvalright); 3708 if( rhs. inf > -infinity ) 3710 ymin = - (4.0 * ay * bx * by - axy * by * by + 4.0 * axy * ay * rhs. inf); 3712 ymin /= 2.0 * ay * bx - axy * by; 3714 if( ymin > ybnds. inf && ymin < ybnds. sup ) 3727 maxvalleft = MAX(-sqrtc - b, maxvalleft); 3728 minvalright = MIN( sqrtc - b, minvalright); 3758 if( ybnds. sup > 0.0 ) 3766 assert(ypos. inf >= 0.0); 3768 minvalleft = MIN(minvalleft, -b); 3769 maxvalleft = MAX(maxvalleft, -b); 3770 minvalright = MIN(minvalright, -b); 3771 maxvalright = MAX(maxvalright, -b); 3773 if( ypos. sup < infinity ) 3776 minvalleft = MIN(minvalleft, -b); 3777 maxvalleft = MAX(maxvalleft, -b); 3778 minvalright = MIN(minvalright, -b); 3779 maxvalright = MAX(maxvalright, -b); 3786 minvalleft = -infinity; 3787 minvalright = -infinity; 3791 maxvalleft = infinity; 3792 maxvalright = infinity; 3800 if( ybnds. inf < 0.0 ) 3814 if( yneg. inf > -infinity ) 3817 minvalleft = MIN(minvalleft, -b); 3818 maxvalleft = MAX(maxvalleft, -b); 3819 minvalright = MIN(minvalright, -b); 3820 maxvalright = MAX(maxvalright, -b); 3827 maxvalleft = infinity; 3828 maxvalright = infinity; 3832 minvalleft = -infinity; 3833 minvalright = -infinity; 3837 assert(yneg. sup <= 0.0); 3839 minvalleft = MIN(minvalleft, -b); 3840 maxvalleft = MAX(maxvalleft, -b); 3841 minvalright = MIN(minvalright, -b); 3842 maxvalright = MAX(maxvalright, -b); 3847 if( rhs. inf > -infinity && xbnds. inf > -infinity && EPSGT(xbnds. inf, maxvalleft / sqrtax, 1e-9) ) 3851 assert( EPSGE(minvalright, minvalleft, 1e-9)); 3852 if( minvalright > -infinity ) 3858 if( minvalleft > -infinity ) 3862 if( rhs. inf > -infinity && xbnds. sup < infinity && EPSLT(xbnds. sup, minvalright / sqrtax, 1e-9) ) 3866 assert( EPSLE(maxvalleft, maxvalright, 1e-9)); 3867 if( maxvalleft < infinity ) 3873 if( maxvalright < infinity ) 3894 if( EPSGE(-bx / axy, ybnds. inf, 1e-9) && EPSLE(-bx / axy, ybnds. sup, 1e-9) ) 3904 if( xbnds. inf < 0.0 && xbnds. sup > 0.0 ) 3922 if( lincoef. inf == 0.0 && lincoef. sup == 0.0 ) 3925 if( myrhs. inf <= 0.0 && myrhs. sup >= 0.0 ) 3930 else if( xbnds. inf >= 0.0 ) 3942 assert(xbnds. sup <= 0.0); 3961 if( bx + axy * (axy > 0.0 ? ybnds. inf : ybnds. sup) > 0.0 ) 3966 if( c > -infinity && c < infinity ) 3968 if( ybnds. inf <= -infinity ) 3971 if( EPSZ(ay, 1e-9) ) 3973 else if( ay * axy < 0.0 ) 3978 val = (c - ay * ybnds. inf * ybnds. inf - by * ybnds. inf) / (bx + axy * ybnds. inf); 3979 minval = MIN(val, minval); 3982 if( ybnds. sup >= infinity ) 3985 if( EPSZ(ay, 1e-9) ) 3986 minval = MIN(minval, -by / axy); 3987 else if( ay * axy > 0.0 ) 3992 val = (c - ay * ybnds. sup * ybnds. sup - by * ybnds. sup) / (bx + axy * ybnds. sup); 3993 minval = MIN(val, minval); 3996 if( ! EPSZ(ay, 1e-9) ) 3998 d = ay * (ay * bx * bx - axy * (bx * by + axy * c)); 3999 if( ! EPSN(d, 1e-9) ) 4001 ymin = -ay * bx + sqrt( MAX(d, 0.0)); 4004 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin); 4005 minval = MIN(val, minval); 4007 ymin = -ay * bx - sqrt( MAX(d, 0.0)); 4010 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin); 4011 minval = MIN(val, minval); 4021 if( bx + axy * (axy > 0.0 ? ybnds. inf : ybnds. sup) > 0.0 ) 4026 if( c > -infinity && c < infinity ) 4028 if( ybnds. inf <= -infinity ) 4031 if( EPSZ(ay, 1e-9) ) 4033 else if( ay * axy > 0.0 ) 4038 val = (c - ay * ybnds. inf * ybnds. inf - by * ybnds. inf) / (bx + axy * ybnds. inf); 4039 maxval = MAX(val, maxval); 4042 if( ybnds. sup >= infinity ) 4045 if( EPSZ(ay, 1e-9) ) 4046 maxval = MAX(maxval, -by / axy); 4047 else if( ay * axy < 0.0 ) 4052 val = (c - ay * ybnds. sup * ybnds. sup - by * ybnds. sup) / (bx + axy * ybnds. sup); 4053 maxval = MAX(val, maxval); 4056 if( ! EPSZ(ay, 1e-9) ) 4058 d = ay * (ay * bx * bx - axy * (bx * by + axy * c)); 4059 if( ! EPSN(d, 1e-9) ) 4061 ymin = ay * bx + sqrt( MAX(d, 0.0)); 4064 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin); 4065 maxval = MAX(val, maxval); 4067 ymin = ay * bx - sqrt( MAX(d, 0.0)); 4070 val = (c - ay * ymin * ymin - by * ymin) / (bx + axy * ymin); 4071 maxval = MAX(val, maxval); 4080 if( minval > -infinity ) 4081 resultant-> inf = minval - 1e-10 * REALABS(minval); 4083 resultant-> inf = -infinity; 4084 if( maxval < infinity ) 4085 resultant-> sup = maxval + 1e-10 * REALABS(maxval); 4087 resultant-> sup = infinity; 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)
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 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 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)
|