diff --git a/src/simplex/spxprim.c b/src/simplex/spxprim.c index 4a5e7aa..1f4aac8 100644 --- a/src/simplex/spxprim.c +++ b/src/simplex/spxprim.c @@ -963,7 +963,13 @@ loop: /* main loop starts here */ else spx_nt_prod(lp, nt, trow, 1, -1.0, rho); /* FIXME: tcol[p] and trow[q] should be close to each other */ - xassert(trow[csa->q] != 0.0); + if (trow[csa->q] == 0.0) + { if (msg_lev >= GLP_MSG_ERR) + xprintf("Error: trow[q] == 0.0\n"); + csa->p_stat = csa->d_stat = GLP_UNDEF; + ret = GLP_EFAIL; + goto fini; + } /* update reduced costs of non-basic variables for adjacent * basis */ if (spx_update_d(lp, d, csa->p, csa->q, trow, tcol) <= 1e-9) diff --git a/src/simplex/spydual.c b/src/simplex/spydual.c index d33ebb1..c8350d2 100644 --- a/src/simplex/spydual.c +++ b/src/simplex/spydual.c @@ -1632,7 +1632,13 @@ loop: /* main loop starts here */ t_pivcol += timer() - t_start; #endif /* FIXME: tcol[p] and trow[q] should be close to each other */ - xassert(csa->tcol.vec[csa->p] != 0.0); + if (csa->tcol.vec[csa->p] == 0.0) + { if (msg_lev >= GLP_MSG_ERR) + xprintf("Error: tcol[p] == 0.0\n"); + csa->p_stat = csa->d_stat = GLP_UNDEF; + ret = GLP_EFAIL; + goto fini; + } /* update values of basic variables for adjacent basis */ k = head[csa->p]; /* x[k] = xB[p] */ p_flag = (l[k] != u[k] && beta[csa->p] > u[k]);