Follow-up Comment #1, bug #66850 (group gsl):

Though the solution is exact and performant (it circumvents the use of series
or continued fraction calculations), it has the same limitations: numerous
test cases fail regardless of whether the patch is installed. The following
test cases can be added tp specfunc/test_hyperg.c: 

  TEST_SF(s, gsl_sf_hyperg_2F1_e, (1, 4, 3, -1/2.0, &r), 16/27.0, TEST_TOL0,
GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (1, 40, 39, -1/2.0, &r), 232/351.0,
TEST_TOL0, GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (1, 400, 399, -1/2.0, &r), 2392/3591.0,
TEST_TOL0, GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (10, 40, 39, -1/2.0, &r),
0.0158593478717443560201269, TEST_TOL0, GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (20, 14, 13, -1/3.0, &r),
0.00195151503934399583018743074, TEST_TOL0, GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (2, 14, 13, -1/3.0, &r), 225/416.0,
TEST_TOL0, GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (2, 14, 13, -1/9.0, &r), 1296/1625.0,
TEST_TOL0, GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (2, 2, 1, -1/9.0, &r), 81/125.0, TEST_TOL0,
GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (2, 2, 1, -1/10.0, &r), 900/1331.0,
TEST_TOL0, GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (4, 2, 1, -1, &r), -1/16.0, TEST_TOL0,
GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (8, 2, 1, -1, &r), -3/256.0, TEST_TOL0,
GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (10, 2, 1, -1, &r), -1/256.0, TEST_TOL0,
GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (-1, 2, 1, -1, &r), 3, TEST_TOL0,
GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (-1, 5, 4, -1, &r), 9/4.0, TEST_TOL0,
GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (-1, 15, 14, 10, &r), -68/7.0, TEST_TOL0,
GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (-1, 3, 2, 1, &r), -0.5, TEST_TOL0,
GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (-1, 3, 2, 10, &r), -14, TEST_TOL0,
GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (-1, 3, 2, 100, &r), -149, TEST_TOL0,
GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (-1, 3, 2, 1000, &r), -1499, TEST_TOL0,
GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (-1, 3, 2, 10000, &r), -14999, TEST_TOL0,
GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (3, 1, 2, -1, &r), 3/8.0, TEST_TOL0,
GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (4, 1, 3, -1, &r), 5/12.0, TEST_TOL0,
GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (14, 1, 13, -1, &r), 25/52.0, TEST_TOL0,
GSL_SUCCESS);
  TEST_SF(s, gsl_sf_hyperg_2F1_e, (140, 1, 139, -1, &r), 277/556.0, TEST_TOL0,
GSL_SUCCESS);

  /* the following test cases fail */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (1, 1, 0, 0, &r), undefined, TEST_TOL0,
GSL_SUCCESS);   /* undefined, hence needs special handling */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (100, 2, 1, -1/2.0, &r),
-7.9528826459414479705549e-17, TEST_TOL0, GSL_SUCCESS); /* accuracy */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (100, 3, 2, -1/2.0, &r),
-3.8534586016417325218152e-17, TEST_TOL0, GSL_SUCCESS); /* accuracy */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (20, 40, 39, -1/2.0, &r),
0.0002493220513051845892, TEST_TOL0, GSL_SUCCESS);     /* accuracy */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (20, 14, 13, -1/2.0, &r),
0.00014650883427211877925283, TEST_TOL0, GSL_SUCCESS); /* accuracy */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (8, 2, 1, -2, &r), -13/19683.0,
TEST_TOL0, GSL_SUCCESS);                         /* a too large */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (3, 2, 1, -12, &r), -23/28561.0,
TEST_TOL0, GSL_SUCCESS);                        /* x too large (abs) */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (-1, 4, 3, -1, &r), 7/3.0, TEST_TOL0,
GSL_SUCCESS);                              /* accuracy */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (-1, 15, 14, -1, &r), 29/14.0, TEST_TOL0,
GSL_SUCCESS);                          /* accuracy */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (2, 15, 14, 10, &r), 53/5103.0,
TEST_TOL0, GSL_SUCCESS);                         /* x too large */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (3, 15, 14, 10, &r), -16/15309.0,
TEST_TOL0, GSL_SUCCESS);                       /* x too large */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (-3, 15, 14, 10, &r), -6318/7.0,
TEST_TOL0, GSL_SUCCESS);                        /* x too large */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (-3, 5, 4, 5, &r), -124, TEST_TOL0,
GSL_SUCCESS);                                /* x too large */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (-1, 4, 3, 10000, &r), -39997/3.0,
TEST_TOL0, GSL_SUCCESS);                      /* x too large */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (-2, 4, 3, 1000, &r), -1664001,
TEST_TOL0, GSL_SUCCESS);                         /* x too large */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (-3, 4, 3, 1000, &r), -1995003999,
TEST_TOL0, GSL_SUCCESS);                      /* x too large */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (-3, 3, 2, 1000, &r), -2494004499,
TEST_TOL0, GSL_SUCCESS);                      /* x too large */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (-3, 2, 1, 1000, &r), -3991005999,
TEST_TOL0, GSL_SUCCESS);                      /* x too large */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (-8, 2, 1, 10, &r), 425684241, TEST_TOL0,
GSL_SUCCESS);                          /* x too large? */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (-10, -10, -11, 100, &r),
7391185002367640001, TEST_TOL0, GSL_SUCCESS);          /* x too large? */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (-10, -10, -11, 10, &r), -387420489/11.0,
TEST_TOL0, GSL_SUCCESS);               /* x too large? */
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (14, 1, 13, -1/2, &r), 76/117.0,
TEST_TOL0, GSL_SUCCESS);
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (14, 1, 13, -2, &r), 37/117.0, TEST_TOL0,
GSL_SUCCESS);
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (140, 1, 139, -2, &r), 415/1251.0,
TEST_TOL0, GSL_SUCCESS);
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (140, 1, 139, 1/2, &r), 280/139.0,
TEST_TOL0, GSL_SUCCESS);
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (140, 1, 139, 2, &r), -137/139.0,
TEST_TOL0, GSL_SUCCESS);
  // TEST_SF(s, gsl_sf_hyperg_2F1_e, (11, 10, 10, -3, &r),
2.384185791015625e-07, TEST_TOL0, GSL_SUCCESS);

Hence further development needed and almost certainly the use of the
pow-function needs to be reviewed.


    _______________________________________________________

Reply to this item at:

  <https://savannah.gnu.org/bugs/?66850>

_______________________________________________
Message sent via Savannah
https://savannah.gnu.org/

Attachment: signature.asc
Description: PGP signature

Reply via email to