<div dir="ltr">Hi, Devin,<div><br></div><div>I don't whether this is the standard solution.</div><div><br></div><div>As I understand, the default error handler in GSL will abort the program after printing error message. So you need to close it first. </div><div><br></div><div>In most time I don't use try-catch with GSL, I detect whether the result is 'nan' or not. Try the code below:</div><div><br></div><div>Best,</div><div><br></div><div>KK</div><div><br></div><div><div>// [[Rcpp::depends(RcppGSL)]]</div><div>#include <RcppGSL.h></div><div>#include <gsl/gsl_sf_hyperg.h></div><div> </div><div>#include <Rcpp.h></div><div>#include <math.h></div><div>using namespace Rcpp;</div><div> </div><div>// [[Rcpp::export]]</div><div>int test()</div><div>{</div><div>    gsl_set_error_handler_off();</div><div>    printf ("status = %f\n", gsl_sf_hyperg_2F1(1,1,1.1467003,1));</div><div>    printf ("status = %f\n", gsl_sf_hyperg_2F1(-10.34,2.05,3.05,0.1725)); </div><div>    return 0;</div><div>}</div></div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Thu, Dec 11, 2014 at 10:03 AM, Devin <span dir="ltr"><<a href="mailto:devin.heer@gmail.com" target="_blank">devin.heer@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="DE-CH" link="#0563C1" vlink="#954F72"><div><p class="MsoNormal"><span lang="EN-US">Dear list<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">My Rcpp source file contains a<i> </i></span><i><span lang="EN-US" style="font-family:"Courier New"">gsl_sf_hyperg_2F1()</span></i><span lang="EN-US"> function, and for some input values to this function the return value is “</span><span lang="EN-US" style="font-family:"Courier New"">NaN</span><span lang="EN-US">”, which leads in RStudio to an abortion error.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">In order to avoid abortion errors, I try to implement a try/catch exception handler:<br><br><u></u><u></u></span></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New"">// [[Rcpp::depends(RcppGSL)]]<u></u><u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New"">#include <RcppGSL.h><u></u><u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New"">#include <gsl/gsl_sf_hyperg.h><u></u><u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New""><u></u> <u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New"">#include <Rcpp.h><u></u><u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New"">#include <math.h><u></u><u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New"">using namespace Rcpp;<u></u><u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New""><u></u> <u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New"">// [[Rcpp::export]]<u></u><u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New"">int test()<u></u><u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New"">{<u></u><u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New"">    try{<u></u><u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New"">        gsl_sf_hyperg_2F1(1,1,1.1467003,1); //  abortion error since not defined<u></u><u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New"">    }<u></u><u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New"">    catch(std::domain_error& e){<u></u><u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New"">        std::cout << "Domain Error occurred!"  << std::endl;<u></u><u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New"">    }<u></u><u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New"">    return 0;<u></u><u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US" style="font-family:"Courier New"">} <u></u><u></u></span></i></p><p class="MsoNormal"><i><span lang="EN-US"><u></u> <u></u></span></i></p><p class="MsoNormal"><span lang="EN-US">This seems to be wrong, since it still causes an abortion error in RStudio.<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">I appreciate any input<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p><p class="MsoNormal"><span lang="EN-US">Thanks<span class="HOEnZb"><font color="#888888"><u></u><u></u></font></span></span></p><span class="HOEnZb"><font color="#888888"><p class="MsoNormal"><span lang="EN-US">Devin<u></u><u></u></span></p><p class="MsoNormal"><span lang="EN-US"><u></u> <u></u></span></p></font></span></div></div><br>_______________________________________________<br>
Rcpp-devel mailing list<br>
<a href="mailto:Rcpp-devel@lists.r-forge.r-project.org">Rcpp-devel@lists.r-forge.r-project.org</a><br>
<a href="https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel" target="_blank">https://lists.r-forge.r-project.org/cgi-bin/mailman/listinfo/rcpp-devel</a><br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature"><div dir="ltr">Qiang Kou<div><a href="mailto:qkou@umail.iu.edu" target="_blank">qkou@umail.iu.edu</a><br><div>School of Informatics and Computing, Indiana University</div><div><br></div></div></div></div>
</div>