diff --git a/mex/sources/bytecode/Interpreter.cc b/mex/sources/bytecode/Interpreter.cc
index b5e290812..c2fd07043 100644
--- a/mex/sources/bytecode/Interpreter.cc
+++ b/mex/sources/bytecode/Interpreter.cc
@@ -16,8 +16,8 @@
* You should have received a copy of the GNU General Public License
* along with Dynare. If not, see .
*/
-#define _GLIBCXX_USE_C99_FENV_TR1 1
-#include
+//#define _GLIBCXX_USE_C99_FENV_TR1 1
+//#include
#include
#include
@@ -112,7 +112,7 @@ double
Interpreter::pow1(double a, double b)
{
double r = pow_(a, b);
- if (fetestexcept(FE_INVALID))
+ if (isnan(r) || isinf(r))
{
if (error_not_printed)
{
@@ -120,7 +120,6 @@ Interpreter::pow1(double a, double b)
error_not_printed = false;
r = 0.0000000000000000000000001;
}
- feclearexcept (FE_ALL_EXCEPT);
res1 = NAN;
return r;
}
@@ -131,7 +130,7 @@ double
Interpreter::log1(double a)
{
double r = log(a);
- if (fetestexcept(FE_INVALID | FE_DIVBYZERO))
+ if (isnan(r) || isinf(r))
{
if (error_not_printed)
{
@@ -139,7 +138,6 @@ Interpreter::log1(double a)
error_not_printed = false;
r = 0.0000000000000000000000001;
}
- feclearexcept (FE_ALL_EXCEPT);
res1 = NAN;
return r;
}
@@ -150,7 +148,7 @@ double
Interpreter::log10_1(double a)
{
double r = log(a);
- if (fetestexcept(FE_INVALID | FE_DIVBYZERO))
+ if (isnan(r) || isinf(r))
{
if (error_not_printed)
{
@@ -158,7 +156,6 @@ Interpreter::log10_1(double a)
error_not_printed = false;
r = 0.0000000000000000000000001;
}
- feclearexcept (FE_ALL_EXCEPT);
res1 = NAN;
return r;
}
@@ -655,7 +652,7 @@ Interpreter::compute_block_time(int Per_u_, bool evaluate, int block_num)
case oDivide:
double r;
r = v1 / v2;
- if (fetestexcept(FE_DIVBYZERO))
+ if (isinf(r))
{
if (error_not_printed)
{
@@ -663,7 +660,6 @@ Interpreter::compute_block_time(int Per_u_, bool evaluate, int block_num)
error_not_printed = false;
r = 1e70;
}
- feclearexcept (FE_ALL_EXCEPT);
res1 = NAN;
}
Stack.push(r);
@@ -1086,14 +1082,13 @@ Interpreter::simulate_a_block(const int size, const int type, string file_name,
if (cvg)
continue;
y[Block_Contain[0].Variable] += -r[0]/g1[0];
- if (fetestexcept(FE_DIVBYZERO))
+ if (isinf(y[Block_Contain[0].Variable]))
{
if (error_not_printed)
{
mexPrintf("--------------------------------------\n Error: Divide by zero with %5.15f/%5.15f\nSingularity in block %d\n--------------------------------------\n", r[0], g1[0], block_num);
error_not_printed = false;
}
- feclearexcept (FE_ALL_EXCEPT);
res1 = NAN;
}
iter++;
@@ -1126,14 +1121,13 @@ Interpreter::simulate_a_block(const int size, const int type, string file_name,
if (cvg)
continue;
y[Per_y_+Block_Contain[0].Variable] += -r[0]/g1[0];
- if (fetestexcept(FE_DIVBYZERO))
+ if (isinf(y[Per_y_+Block_Contain[0].Variable]))
{
if (error_not_printed)
{
mexPrintf("--------------------------------------\n Error: Divide by zero with %5.15f/%5.15f\nSingularity in block %d\n--------------------------------------\n", r[0], g1[0], block_num);
error_not_printed = false;
}
- feclearexcept (FE_ALL_EXCEPT);
res1 = NAN;
}
iter++;
@@ -1167,14 +1161,13 @@ Interpreter::simulate_a_block(const int size, const int type, string file_name,
if (cvg)
continue;
y[Block_Contain[0].Variable] += -r[0]/g1[0];
- if (fetestexcept(FE_DIVBYZERO))
+ if (isinf(y[Block_Contain[0].Variable]))
{
if (error_not_printed)
{
mexPrintf("--------------------------------------\n Error: Divide by zero with %5.15f/%5.15f\nSingularity in block %d\n--------------------------------------\n", r[0], g1[0], block_num);
error_not_printed = false;
}
- feclearexcept (FE_ALL_EXCEPT);
res1 = NAN;
}
iter++;
@@ -1206,14 +1199,13 @@ Interpreter::simulate_a_block(const int size, const int type, string file_name,
if (cvg)
continue;
y[Per_y_+Block_Contain[0].Variable] += -r[0]/g1[0];
- if (fetestexcept(FE_DIVBYZERO))
+ if (isinf(y[Per_y_+Block_Contain[0].Variable]))
{
if (error_not_printed)
{
mexPrintf("--------------------------------------\n Error: Divide by zero with %5.15f/%5.15f\nSingularity in block %d\n--------------------------------------\n", r[0], g1[0], block_num);
error_not_printed = false;
}
- feclearexcept (FE_ALL_EXCEPT);
res1 = NAN;
}
iter++;
@@ -1273,7 +1265,7 @@ Interpreter::simulate_a_block(const int size, const int type, string file_name,
if (cvg)
continue;
int prev_iter = iter;
- result = simulate_NG(Block_Count, symbol_table_endo_nbr, 0, 0, 0, size, true/*false*/, cvg, iter, true, EQN_block_number);
+ result = simulate_NG(Block_Count, symbol_table_endo_nbr, 0, 0, 0, size, false, cvg, iter, true, EQN_block_number);
iter++;
if (iter > prev_iter)
{
diff --git a/mex/sources/bytecode/SparseMatrix.cc b/mex/sources/bytecode/SparseMatrix.cc
index 21545482a..d43821fde 100644
--- a/mex/sources/bytecode/SparseMatrix.cc
+++ b/mex/sources/bytecode/SparseMatrix.cc
@@ -17,8 +17,8 @@
* along with Dynare. If not, see .
*/
-#define _GLIBCXX_USE_C99_FENV_TR1 1
-#include
+//#define _GLIBCXX_USE_C99_FENV_TR1 1
+//#include
#include
#include
@@ -1718,7 +1718,7 @@ SparseMatrix::simulate_NG1(int blck, int y_size, int it_, int y_kmin, int y_kmax
}
else
markovitz = fabs(piv_v[j])/piv_abs;
- if (fetestexcept(FE_DIVBYZERO))
+ /*if (fetestexcept(FE_DIVBYZERO))
{
if (error_not_printed)
{
@@ -1728,7 +1728,7 @@ SparseMatrix::simulate_NG1(int blck, int y_size, int it_, int y_kmin, int y_kmax
}
feclearexcept (FE_ALL_EXCEPT);
res1 = NAN;
- }
+ }*/
//mexPrintf("piv_v[j]=%f NR[j]=%d markovitz=%f markovitz_max=%f\n", piv_v[j], NR[j], markovitz, markovitz_max);
if (markovitz > markovitz_max)
{
@@ -1758,7 +1758,7 @@ SparseMatrix::simulate_NG1(int blck, int y_size, int it_, int y_kmin, int y_kmax
}
else
markovitz = fabs(piv_v[j])/piv_abs;
- if (fetestexcept(FE_DIVBYZERO))
+ /*if (fetestexcept(FE_DIVBYZERO))
{
if (error_not_printed)
{
@@ -1768,7 +1768,7 @@ SparseMatrix::simulate_NG1(int blck, int y_size, int it_, int y_kmin, int y_kmax
}
feclearexcept (FE_ALL_EXCEPT);
res1 = NAN;
- }
+ }*/
if (/*markovitz > markovitz_max &&*/ NR[j] == 1)
{
piv = piv_v[j];
diff --git a/mex/sources/bytecode/bytecode.cc b/mex/sources/bytecode/bytecode.cc
index 58f7fc33f..0b0b52810 100644
--- a/mex/sources/bytecode/bytecode.cc
+++ b/mex/sources/bytecode/bytecode.cc
@@ -21,8 +21,8 @@
// simulate.cc //
// simulate file designed for GNU GCC C++ compiler //
////////////////////////////////////////////////////////////////////////
-#define _GLIBCXX_USE_C99_FENV_TR1 1
-#include
+//#define _GLIBCXX_USE_C99_FENV_TR1 1
+//#include
#include
@@ -55,14 +55,14 @@ main(int argc, const char *argv[])
bool steady_state = false;
bool evaluate = false;
printf("argc=%d\n", argc);
- fexcept_t *flagp;
+ /*fexcept_t *flagp;
flagp = (fexcept_t*) mxMalloc(sizeof(fexcept_t));
if (fegetexceptflag(flagp, FE_ALL_EXCEPT))
mexPrintf("fegetexceptflag failed\n");
if (fesetexceptflag(flagp,FE_INVALID | FE_DIVBYZERO))
mexPrintf("fesetexceptflag failed\n");
mxFree(flagp);
- feclearexcept (FE_ALL_EXCEPT);
+ feclearexcept (FE_ALL_EXCEPT);*/
if (argc < 2)
{
mexPrintf("model filename expected\n");
@@ -229,29 +229,6 @@ Get_Argument(const mxArray *prhs)
return f;
}
-void fpe_handler(int) {
- int e;
- mexPrintf("caught FPE, exiting.\n");
- e = fetestexcept(FE_ALL_EXCEPT);
- if (!e) {
- mexPrintf("no exception information set\n");
- }
- if (e & FE_DIVBYZERO) {
- mexPrintf("divide by zero\n");
- }
- if (e & FE_INVALID) {
- mexPrintf("invalide operand\n");
- }
- if (e & FE_UNDERFLOW) {
- mexPrintf("underflow\n");
- }
- if (e & FE_OVERFLOW) {
- mexPrintf("overflow\n");
- }
- exit(1);
-}
-
-
/* The gateway routine */
void
@@ -265,14 +242,14 @@ mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[])
double *direction;
bool steady_state = false;
bool evaluate = false;
- fexcept_t *flagp;
+ /*fexcept_t *flagp;
flagp = (fexcept_t*) mxMalloc(sizeof(fexcept_t));
if(fegetexceptflag(flagp, FE_ALL_EXCEPT))
mexPrintf("fegetexceptflag failed\n");
if(fesetexceptflag(flagp,FE_INVALID | FE_DIVBYZERO))
mexPrintf("fesetexceptflag failed\n");
mxFree(flagp);
- feclearexcept (FE_ALL_EXCEPT);
+ feclearexcept (FE_ALL_EXCEPT);*/
for (i = 0; i < nrhs; i++)
{
if (Get_Argument(prhs[i]) == "static")