URL:
<https://savannah.gnu.org/bugs/?65760>
Summary: gsl_sf_log_erfc (and gsl_sf_erc) return NaN for
infinite or very large finite arguments
Group: GNU Scientific Library
Submitter: lpsinger
Submitted: Sun 19 May 2024 11:49:02 PM UTC
Category: Accuracy problem
Severity: 3 - Normal
Operating System: Debian 12.5
Status: None
Assigned to: None
Open/Closed: Open
Release: 2.7.1
Discussion Lock: Any
_______________________________________________________
Follow-up Comments:
-------------------------------------------------------
Date: Sun 19 May 2024 11:49:02 PM UTC By: Leo Singer <lpsinger>
gsl_sf_log_erfc (and gsl_sf_erc) return NaN for infinite or very large finite
arguments. For such arguments, gsl_sf_log_erfc should return -inf and
gsl_sf_erc should return 0.
See minimal reproducer below.
/* test.c */
#include <gsl/gsl_math.h>
#include <gsl/gsl_sf_erf.h>
#include <stdio.h>
static const double x[] = {1e0, 1e1, 1e2, 1e20, 1e60, 1e80, GSL_POSINF};
int main(int argc, char **argv) {
for (int i = 0; i < sizeof(x) / sizeof(x[0]); i ++) {
double x_i = x[i];
double y_i = gsl_sf_log_erfc(x[i]);
printf("gsl_sf_log_erfc(%g) = %g\n", x_i, y_i);
}
return 0;
}
Compile and run as follows:
$ gcc test.c $(pkg-config --cflags --libs gsl)
$ ./a.out
gsl_sf_log_erfc(1) = -1.84961
gsl_sf_log_erfc(10) = -102.88
gsl_sf_log_erfc(100) = -10005.2
gsl_sf_log_erfc(1e+20) = -1e+40
gsl_sf_log_erfc(1e+60) = -inf
gsl_sf_log_erfc(1e+80) = -nan
gsl_sf_log_erfc(inf) = -nan
_______________________________________________________
Reply to this item at:
<https://savannah.gnu.org/bugs/?65760>
_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/