<div>Hi,</div>
<div>&nbsp;</div>
<div>Thanks for this info. I set the cw to the one in which my program was running properly.</div>
<div>Apparently, IPOpt has just the INEXACT flag on, whereas LAPACKPP has all the flags you mentioned on.</div>
<div>&nbsp;</div>
<div>If I turn on all the flags, it doesnt crash in the lapackpp function calls. </div>
<div>But I was wondering if this is ok ? If there was an underflow (or zerodivide, etc)&nbsp;in the calculations, doesnt it mean something went wrong in the calculations?&nbsp;Even though I am getting the right answer.</div>
<div>&nbsp;</div>
<div>Thanks,</div>
<div>~ sonia&nbsp;<br><br>&nbsp;</div>
<div><span class="gmail_quote">On 12/16/06, <b class="gmail_sendername">Steven Dirkse</b> &lt;<a href="mailto:sdirkse@gams.com">sdirkse@gams.com</a>&gt; wrote:</span>
<blockquote class="gmail_quote" style="PADDING-LEFT: 1ex; MARGIN: 0px 0px 0px 0.8ex; BORDER-LEFT: #ccc 1px solid">Sonia Singhal wrote:<br>&gt; Hi,<br>&gt;<br>&gt; I am doing development in Microsoft Visual Studio 2003. I have been
<br>&gt; using LAPACK through a C++ interface provided in lapackpp-2.5.0. I was<br>&gt; using it for solving linear system of equations and doing SVD. This<br>&gt; package provides the libs for lapack and blas which I used for compiling
<br>&gt; their c++ interface package.<br>&gt; Recently I used IpOpt ( 3.2.3 ) version in the code to solve an<br>&gt; optimization problem. I havnt written the complete code yet, just made a<br>&gt; dummy optimization class just to see if I was able to link the entire
<br>&gt; ipopt infrastructure with my existing code. I was able to compile and<br>&gt; run the Cpp Example given in the IPOpt distribution.<br>&gt; The problem is that my code crashes in the lapackpp's call to their<br>&gt; interface to SVD (dgesdd). It crashes giving a &quot;floating point
<br>&gt; underflow&quot; error. This doesnt happen if I remove ipopt's libs and code.<br>&gt; I have posted this question on the lapackpp forum too. I am posting here<br>&gt; too just in case anyone has any idea of what the problem could be.
<br>&gt;<br>&gt; Thanks,<br>&gt; ~ sonia<br>&gt;<br><br>Sonia,<br><br>Floating point underflow is a hardware exception that can be raised on<br>most CPUs.&nbsp;&nbsp;Typically this is masked, so when underflow occurs the<br>result is stored as a denormal (if it isn't one already) if possible or
<br>silently flushed to zero.&nbsp;&nbsp;I'd guess that LAPACK is expecting this<br>setting.&nbsp;&nbsp;Somehow running with the IPOPT code in there, this exception<br>is unmasked and you LAPACK behaves differently.<br><br>You can experiment with your code to see what the exception mask is when
<br>it works and when it aborts.&nbsp;&nbsp;Here is a snippet of code to get you started:<br><br>#if defined(_WIN32)<br>{<br>&nbsp;&nbsp;unsigned int cw;<br><br>&nbsp;&nbsp;cw = _control87(0,0);<br>&nbsp;&nbsp;if (cw &amp; _EM_INVALID&nbsp;&nbsp; ) ADD2MASK(EX_INVALIDOP );
<br>&nbsp;&nbsp;if (cw &amp; _EM_DENORMAL&nbsp;&nbsp;) ADD2MASK(EX_DENORMAL&nbsp;&nbsp;);<br>&nbsp;&nbsp;if (cw &amp; _EM_ZERODIVIDE) ADD2MASK(EX_ZERODIVIDE);<br>&nbsp;&nbsp;if (cw &amp; _EM_OVERFLOW&nbsp;&nbsp;) ADD2MASK(EX_OVERFLOW&nbsp;&nbsp;);<br>&nbsp;&nbsp;if (cw &amp; _EM_UNDERFLOW ) ADD2MASK(EX_UNDERFLOW );
<br>&nbsp;&nbsp;if (cw &amp; _EM_INEXACT&nbsp;&nbsp; ) ADD2MASK(EX_PRECISION );<br>}<br><br>I would google _control87 for more info.&nbsp;&nbsp;FYI, ADD2MASK is a macro of<br>mine, but _EM_INVALID are defined by some system headers.&nbsp;&nbsp;If you<br>replace ADD2MASK by some print statements you should see what the mask is.
<br><br>-Steve<br><br></blockquote></div><br>