]> git.ipfire.org Git - thirdparty/gcc.git/blame - libstdc++-v3/testsuite/tr1/5_numerical_facilities/special_functions/17_hyperg/check_value.cc
Remove trailing whitespace from libstdc++-v3 files
[thirdparty/gcc.git] / libstdc++-v3 / testsuite / tr1 / 5_numerical_facilities / special_functions / 17_hyperg / check_value.cc
CommitLineData
7c62b943
BK
1// 2007-02-04 Edward Smith-Rowland <3dw4rd@verizon.net>
2//
818ab71a 3// Copyright (C) 2007-2016 Free Software Foundation, Inc.
7c62b943
BK
4//
5// This file is part of the GNU ISO C++ Library. This library is free
6// software; you can redistribute it and/or modify it under the
7// terms of the GNU General Public License as published by the
748086b7 8// Free Software Foundation; either version 3, or (at your option)
7c62b943
BK
9// any later version.
10//
11// This library is distributed in the hope that it will be useful,
12// but WITHOUT ANY WARRANTY; without even the implied warranty of
13// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14// GNU General Public License for more details.
15//
16// You should have received a copy of the GNU General Public License along
748086b7
JJ
17// with this library; see the file COPYING3. If not see
18// <http://www.gnu.org/licenses/>.
7c62b943
BK
19
20// hyperg
21
22
23// Compare against values generated by the GNU Scientific Library.
24// The GSL can be found on the web: http://www.gnu.org/software/gsl/
25
26#include <tr1/cmath>
27#if defined(__TEST_DEBUG)
28#include <iostream>
29#define VERIFY(A) \
30if (!(A)) \
31 { \
32 std::cout << "line " << __LINE__ \
33 << " max_abs_frac = " << max_abs_frac \
34 << std::endl; \
35 }
36#else
37#include <testsuite_hooks.h>
38#endif
39#include "../testcase.h"
40
41
42// Test data for a=0.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
43testcase_hyperg<double> data001[] = {
f92ab29f 44 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 45 2.0000000000000000, -0.90000000000000002 },
f92ab29f 46 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 47 2.0000000000000000, -0.80000000000000004 },
f92ab29f 48 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 49 2.0000000000000000, -0.69999999999999996 },
f92ab29f 50 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 51 2.0000000000000000, -0.59999999999999998 },
f92ab29f 52 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 53 2.0000000000000000, -0.50000000000000000 },
f92ab29f 54 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 55 2.0000000000000000, -0.40000000000000002 },
f92ab29f 56 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 57 2.0000000000000000, -0.30000000000000004 },
f92ab29f 58 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 59 2.0000000000000000, -0.19999999999999996 },
f92ab29f 60 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 61 2.0000000000000000, -0.099999999999999978 },
f92ab29f 62 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 63 2.0000000000000000, 0.0000000000000000 },
f92ab29f 64 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 65 2.0000000000000000, 0.10000000000000009 },
f92ab29f 66 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 67 2.0000000000000000, 0.19999999999999996 },
f92ab29f 68 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 69 2.0000000000000000, 0.30000000000000004 },
f92ab29f 70 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 71 2.0000000000000000, 0.39999999999999991 },
f92ab29f 72 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 73 2.0000000000000000, 0.50000000000000000 },
f92ab29f 74 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 75 2.0000000000000000, 0.60000000000000009 },
f92ab29f 76 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 77 2.0000000000000000, 0.69999999999999996 },
f92ab29f 78 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 79 2.0000000000000000, 0.80000000000000004 },
f92ab29f 80 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943
BK
81 2.0000000000000000, 0.89999999999999991 },
82};
83
84// Test function for a=0.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
85template <typename Tp>
86void test001()
87{
88 const Tp eps = std::numeric_limits<Tp>::epsilon();
89 Tp max_abs_diff = -Tp(1);
90 Tp max_abs_frac = -Tp(1);
91 unsigned int num_datum = sizeof(data001)
92 / sizeof(testcase_hyperg<double>);
93 for (unsigned int i = 0; i < num_datum; ++i)
94 {
95 const Tp f = std::tr1::hyperg(Tp(data001[i].a), Tp(data001[i].b),
96 Tp(data001[i].c), Tp(data001[i].x));
97 const Tp f0 = data001[i].f0;
98 const Tp diff = f - f0;
99 if (std::abs(diff) > max_abs_diff)
100 max_abs_diff = std::abs(diff);
101 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
102 {
103 const Tp frac = diff / f0;
104 if (std::abs(frac) > max_abs_frac)
105 max_abs_frac = std::abs(frac);
106 }
107 }
108 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
109}
110
111// Test data for a=0.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
112testcase_hyperg<double> data002[] = {
f92ab29f 113 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 114 4.0000000000000000, -0.90000000000000002 },
f92ab29f 115 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 116 4.0000000000000000, -0.80000000000000004 },
f92ab29f 117 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 118 4.0000000000000000, -0.69999999999999996 },
f92ab29f 119 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 120 4.0000000000000000, -0.59999999999999998 },
f92ab29f 121 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 122 4.0000000000000000, -0.50000000000000000 },
f92ab29f 123 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 124 4.0000000000000000, -0.40000000000000002 },
f92ab29f 125 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 126 4.0000000000000000, -0.30000000000000004 },
f92ab29f 127 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 128 4.0000000000000000, -0.19999999999999996 },
f92ab29f 129 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 130 4.0000000000000000, -0.099999999999999978 },
f92ab29f 131 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 132 4.0000000000000000, 0.0000000000000000 },
f92ab29f 133 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 134 4.0000000000000000, 0.10000000000000009 },
f92ab29f 135 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 136 4.0000000000000000, 0.19999999999999996 },
f92ab29f 137 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 138 4.0000000000000000, 0.30000000000000004 },
f92ab29f 139 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 140 4.0000000000000000, 0.39999999999999991 },
f92ab29f 141 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 142 4.0000000000000000, 0.50000000000000000 },
f92ab29f 143 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 144 4.0000000000000000, 0.60000000000000009 },
f92ab29f 145 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 146 4.0000000000000000, 0.69999999999999996 },
f92ab29f 147 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 148 4.0000000000000000, 0.80000000000000004 },
f92ab29f 149 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943
BK
150 4.0000000000000000, 0.89999999999999991 },
151};
152
153// Test function for a=0.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
154template <typename Tp>
155void test002()
156{
157 const Tp eps = std::numeric_limits<Tp>::epsilon();
158 Tp max_abs_diff = -Tp(1);
159 Tp max_abs_frac = -Tp(1);
160 unsigned int num_datum = sizeof(data002)
161 / sizeof(testcase_hyperg<double>);
162 for (unsigned int i = 0; i < num_datum; ++i)
163 {
164 const Tp f = std::tr1::hyperg(Tp(data002[i].a), Tp(data002[i].b),
165 Tp(data002[i].c), Tp(data002[i].x));
166 const Tp f0 = data002[i].f0;
167 const Tp diff = f - f0;
168 if (std::abs(diff) > max_abs_diff)
169 max_abs_diff = std::abs(diff);
170 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
171 {
172 const Tp frac = diff / f0;
173 if (std::abs(frac) > max_abs_frac)
174 max_abs_frac = std::abs(frac);
175 }
176 }
177 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
178}
179
180// Test data for a=0.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
181testcase_hyperg<double> data003[] = {
f92ab29f 182 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 183 6.0000000000000000, -0.90000000000000002 },
f92ab29f 184 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 185 6.0000000000000000, -0.80000000000000004 },
f92ab29f 186 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 187 6.0000000000000000, -0.69999999999999996 },
f92ab29f 188 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 189 6.0000000000000000, -0.59999999999999998 },
f92ab29f 190 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 191 6.0000000000000000, -0.50000000000000000 },
f92ab29f 192 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 193 6.0000000000000000, -0.40000000000000002 },
f92ab29f 194 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 195 6.0000000000000000, -0.30000000000000004 },
f92ab29f 196 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 197 6.0000000000000000, -0.19999999999999996 },
f92ab29f 198 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 199 6.0000000000000000, -0.099999999999999978 },
f92ab29f 200 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 201 6.0000000000000000, 0.0000000000000000 },
f92ab29f 202 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 203 6.0000000000000000, 0.10000000000000009 },
f92ab29f 204 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 205 6.0000000000000000, 0.19999999999999996 },
f92ab29f 206 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 207 6.0000000000000000, 0.30000000000000004 },
f92ab29f 208 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 209 6.0000000000000000, 0.39999999999999991 },
f92ab29f 210 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 211 6.0000000000000000, 0.50000000000000000 },
f92ab29f 212 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 213 6.0000000000000000, 0.60000000000000009 },
f92ab29f 214 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 215 6.0000000000000000, 0.69999999999999996 },
f92ab29f 216 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 217 6.0000000000000000, 0.80000000000000004 },
f92ab29f 218 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943
BK
219 6.0000000000000000, 0.89999999999999991 },
220};
221
222// Test function for a=0.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
223template <typename Tp>
224void test003()
225{
226 const Tp eps = std::numeric_limits<Tp>::epsilon();
227 Tp max_abs_diff = -Tp(1);
228 Tp max_abs_frac = -Tp(1);
229 unsigned int num_datum = sizeof(data003)
230 / sizeof(testcase_hyperg<double>);
231 for (unsigned int i = 0; i < num_datum; ++i)
232 {
233 const Tp f = std::tr1::hyperg(Tp(data003[i].a), Tp(data003[i].b),
234 Tp(data003[i].c), Tp(data003[i].x));
235 const Tp f0 = data003[i].f0;
236 const Tp diff = f - f0;
237 if (std::abs(diff) > max_abs_diff)
238 max_abs_diff = std::abs(diff);
239 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
240 {
241 const Tp frac = diff / f0;
242 if (std::abs(frac) > max_abs_frac)
243 max_abs_frac = std::abs(frac);
244 }
245 }
246 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
247}
248
249// Test data for a=0.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
250testcase_hyperg<double> data004[] = {
f92ab29f 251 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 252 8.0000000000000000, -0.90000000000000002 },
f92ab29f 253 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 254 8.0000000000000000, -0.80000000000000004 },
f92ab29f 255 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 256 8.0000000000000000, -0.69999999999999996 },
f92ab29f 257 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 258 8.0000000000000000, -0.59999999999999998 },
f92ab29f 259 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 260 8.0000000000000000, -0.50000000000000000 },
f92ab29f 261 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 262 8.0000000000000000, -0.40000000000000002 },
f92ab29f 263 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 264 8.0000000000000000, -0.30000000000000004 },
f92ab29f 265 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 266 8.0000000000000000, -0.19999999999999996 },
f92ab29f 267 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 268 8.0000000000000000, -0.099999999999999978 },
f92ab29f 269 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 270 8.0000000000000000, 0.0000000000000000 },
f92ab29f 271 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 272 8.0000000000000000, 0.10000000000000009 },
f92ab29f 273 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 274 8.0000000000000000, 0.19999999999999996 },
f92ab29f 275 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 276 8.0000000000000000, 0.30000000000000004 },
f92ab29f 277 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 278 8.0000000000000000, 0.39999999999999991 },
f92ab29f 279 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 280 8.0000000000000000, 0.50000000000000000 },
f92ab29f 281 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 282 8.0000000000000000, 0.60000000000000009 },
f92ab29f 283 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 284 8.0000000000000000, 0.69999999999999996 },
f92ab29f 285 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 286 8.0000000000000000, 0.80000000000000004 },
f92ab29f 287 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943
BK
288 8.0000000000000000, 0.89999999999999991 },
289};
290
291// Test function for a=0.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
292template <typename Tp>
293void test004()
294{
295 const Tp eps = std::numeric_limits<Tp>::epsilon();
296 Tp max_abs_diff = -Tp(1);
297 Tp max_abs_frac = -Tp(1);
298 unsigned int num_datum = sizeof(data004)
299 / sizeof(testcase_hyperg<double>);
300 for (unsigned int i = 0; i < num_datum; ++i)
301 {
302 const Tp f = std::tr1::hyperg(Tp(data004[i].a), Tp(data004[i].b),
303 Tp(data004[i].c), Tp(data004[i].x));
304 const Tp f0 = data004[i].f0;
305 const Tp diff = f - f0;
306 if (std::abs(diff) > max_abs_diff)
307 max_abs_diff = std::abs(diff);
308 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
309 {
310 const Tp frac = diff / f0;
311 if (std::abs(frac) > max_abs_frac)
312 max_abs_frac = std::abs(frac);
313 }
314 }
315 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
316}
317
318// Test data for a=0.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
319testcase_hyperg<double> data005[] = {
f92ab29f 320 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 321 10.000000000000000, -0.90000000000000002 },
f92ab29f 322 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 323 10.000000000000000, -0.80000000000000004 },
f92ab29f 324 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 325 10.000000000000000, -0.69999999999999996 },
f92ab29f 326 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 327 10.000000000000000, -0.59999999999999998 },
f92ab29f 328 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 329 10.000000000000000, -0.50000000000000000 },
f92ab29f 330 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 331 10.000000000000000, -0.40000000000000002 },
f92ab29f 332 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 333 10.000000000000000, -0.30000000000000004 },
f92ab29f 334 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 335 10.000000000000000, -0.19999999999999996 },
f92ab29f 336 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 337 10.000000000000000, -0.099999999999999978 },
f92ab29f 338 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 339 10.000000000000000, 0.0000000000000000 },
f92ab29f 340 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 341 10.000000000000000, 0.10000000000000009 },
f92ab29f 342 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 343 10.000000000000000, 0.19999999999999996 },
f92ab29f 344 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 345 10.000000000000000, 0.30000000000000004 },
f92ab29f 346 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 347 10.000000000000000, 0.39999999999999991 },
f92ab29f 348 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 349 10.000000000000000, 0.50000000000000000 },
f92ab29f 350 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 351 10.000000000000000, 0.60000000000000009 },
f92ab29f 352 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 353 10.000000000000000, 0.69999999999999996 },
f92ab29f 354 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943 355 10.000000000000000, 0.80000000000000004 },
f92ab29f 356 { 1.0000000000000000, 0.0000000000000000, 0.0000000000000000,
7c62b943
BK
357 10.000000000000000, 0.89999999999999991 },
358};
359
360// Test function for a=0.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
361template <typename Tp>
362void test005()
363{
364 const Tp eps = std::numeric_limits<Tp>::epsilon();
365 Tp max_abs_diff = -Tp(1);
366 Tp max_abs_frac = -Tp(1);
367 unsigned int num_datum = sizeof(data005)
368 / sizeof(testcase_hyperg<double>);
369 for (unsigned int i = 0; i < num_datum; ++i)
370 {
371 const Tp f = std::tr1::hyperg(Tp(data005[i].a), Tp(data005[i].b),
372 Tp(data005[i].c), Tp(data005[i].x));
373 const Tp f0 = data005[i].f0;
374 const Tp diff = f - f0;
375 if (std::abs(diff) > max_abs_diff)
376 max_abs_diff = std::abs(diff);
377 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
378 {
379 const Tp frac = diff / f0;
380 if (std::abs(frac) > max_abs_frac)
381 max_abs_frac = std::abs(frac);
382 }
383 }
384 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
385}
386
387// Test data for a=0.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
388testcase_hyperg<double> data006[] = {
f92ab29f 389 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 390 2.0000000000000000, -0.90000000000000002 },
f92ab29f 391 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 392 2.0000000000000000, -0.80000000000000004 },
f92ab29f 393 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 394 2.0000000000000000, -0.69999999999999996 },
f92ab29f 395 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 396 2.0000000000000000, -0.59999999999999998 },
f92ab29f 397 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 398 2.0000000000000000, -0.50000000000000000 },
f92ab29f 399 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 400 2.0000000000000000, -0.40000000000000002 },
f92ab29f 401 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 402 2.0000000000000000, -0.30000000000000004 },
f92ab29f 403 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 404 2.0000000000000000, -0.19999999999999996 },
f92ab29f 405 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 406 2.0000000000000000, -0.099999999999999978 },
f92ab29f 407 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 408 2.0000000000000000, 0.0000000000000000 },
f92ab29f 409 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 410 2.0000000000000000, 0.10000000000000009 },
f92ab29f 411 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 412 2.0000000000000000, 0.19999999999999996 },
f92ab29f 413 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 414 2.0000000000000000, 0.30000000000000004 },
f92ab29f 415 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 416 2.0000000000000000, 0.39999999999999991 },
f92ab29f 417 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 418 2.0000000000000000, 0.50000000000000000 },
f92ab29f 419 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 420 2.0000000000000000, 0.60000000000000009 },
f92ab29f 421 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 422 2.0000000000000000, 0.69999999999999996 },
f92ab29f 423 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 424 2.0000000000000000, 0.80000000000000004 },
f92ab29f 425 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943
BK
426 2.0000000000000000, 0.89999999999999991 },
427};
428
429// Test function for a=0.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
430template <typename Tp>
431void test006()
432{
433 const Tp eps = std::numeric_limits<Tp>::epsilon();
434 Tp max_abs_diff = -Tp(1);
435 Tp max_abs_frac = -Tp(1);
436 unsigned int num_datum = sizeof(data006)
437 / sizeof(testcase_hyperg<double>);
438 for (unsigned int i = 0; i < num_datum; ++i)
439 {
440 const Tp f = std::tr1::hyperg(Tp(data006[i].a), Tp(data006[i].b),
441 Tp(data006[i].c), Tp(data006[i].x));
442 const Tp f0 = data006[i].f0;
443 const Tp diff = f - f0;
444 if (std::abs(diff) > max_abs_diff)
445 max_abs_diff = std::abs(diff);
446 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
447 {
448 const Tp frac = diff / f0;
449 if (std::abs(frac) > max_abs_frac)
450 max_abs_frac = std::abs(frac);
451 }
452 }
453 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
454}
455
456// Test data for a=0.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
457testcase_hyperg<double> data007[] = {
f92ab29f 458 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 459 4.0000000000000000, -0.90000000000000002 },
f92ab29f 460 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 461 4.0000000000000000, -0.80000000000000004 },
f92ab29f 462 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 463 4.0000000000000000, -0.69999999999999996 },
f92ab29f 464 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 465 4.0000000000000000, -0.59999999999999998 },
f92ab29f 466 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 467 4.0000000000000000, -0.50000000000000000 },
f92ab29f 468 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 469 4.0000000000000000, -0.40000000000000002 },
f92ab29f 470 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 471 4.0000000000000000, -0.30000000000000004 },
f92ab29f 472 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 473 4.0000000000000000, -0.19999999999999996 },
f92ab29f 474 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 475 4.0000000000000000, -0.099999999999999978 },
f92ab29f 476 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 477 4.0000000000000000, 0.0000000000000000 },
f92ab29f 478 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 479 4.0000000000000000, 0.10000000000000009 },
f92ab29f 480 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 481 4.0000000000000000, 0.19999999999999996 },
f92ab29f 482 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 483 4.0000000000000000, 0.30000000000000004 },
f92ab29f 484 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 485 4.0000000000000000, 0.39999999999999991 },
f92ab29f 486 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 487 4.0000000000000000, 0.50000000000000000 },
f92ab29f 488 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 489 4.0000000000000000, 0.60000000000000009 },
f92ab29f 490 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 491 4.0000000000000000, 0.69999999999999996 },
f92ab29f 492 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 493 4.0000000000000000, 0.80000000000000004 },
f92ab29f 494 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943
BK
495 4.0000000000000000, 0.89999999999999991 },
496};
497
498// Test function for a=0.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
499template <typename Tp>
500void test007()
501{
502 const Tp eps = std::numeric_limits<Tp>::epsilon();
503 Tp max_abs_diff = -Tp(1);
504 Tp max_abs_frac = -Tp(1);
505 unsigned int num_datum = sizeof(data007)
506 / sizeof(testcase_hyperg<double>);
507 for (unsigned int i = 0; i < num_datum; ++i)
508 {
509 const Tp f = std::tr1::hyperg(Tp(data007[i].a), Tp(data007[i].b),
510 Tp(data007[i].c), Tp(data007[i].x));
511 const Tp f0 = data007[i].f0;
512 const Tp diff = f - f0;
513 if (std::abs(diff) > max_abs_diff)
514 max_abs_diff = std::abs(diff);
515 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
516 {
517 const Tp frac = diff / f0;
518 if (std::abs(frac) > max_abs_frac)
519 max_abs_frac = std::abs(frac);
520 }
521 }
522 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
523}
524
525// Test data for a=0.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
526testcase_hyperg<double> data008[] = {
f92ab29f 527 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 528 6.0000000000000000, -0.90000000000000002 },
f92ab29f 529 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 530 6.0000000000000000, -0.80000000000000004 },
f92ab29f 531 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 532 6.0000000000000000, -0.69999999999999996 },
f92ab29f 533 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 534 6.0000000000000000, -0.59999999999999998 },
f92ab29f 535 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 536 6.0000000000000000, -0.50000000000000000 },
f92ab29f 537 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 538 6.0000000000000000, -0.40000000000000002 },
f92ab29f 539 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 540 6.0000000000000000, -0.30000000000000004 },
f92ab29f 541 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 542 6.0000000000000000, -0.19999999999999996 },
f92ab29f 543 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 544 6.0000000000000000, -0.099999999999999978 },
f92ab29f 545 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 546 6.0000000000000000, 0.0000000000000000 },
f92ab29f 547 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 548 6.0000000000000000, 0.10000000000000009 },
f92ab29f 549 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 550 6.0000000000000000, 0.19999999999999996 },
f92ab29f 551 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 552 6.0000000000000000, 0.30000000000000004 },
f92ab29f 553 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 554 6.0000000000000000, 0.39999999999999991 },
f92ab29f 555 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 556 6.0000000000000000, 0.50000000000000000 },
f92ab29f 557 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 558 6.0000000000000000, 0.60000000000000009 },
f92ab29f 559 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 560 6.0000000000000000, 0.69999999999999996 },
f92ab29f 561 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 562 6.0000000000000000, 0.80000000000000004 },
f92ab29f 563 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943
BK
564 6.0000000000000000, 0.89999999999999991 },
565};
566
567// Test function for a=0.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
568template <typename Tp>
569void test008()
570{
571 const Tp eps = std::numeric_limits<Tp>::epsilon();
572 Tp max_abs_diff = -Tp(1);
573 Tp max_abs_frac = -Tp(1);
574 unsigned int num_datum = sizeof(data008)
575 / sizeof(testcase_hyperg<double>);
576 for (unsigned int i = 0; i < num_datum; ++i)
577 {
578 const Tp f = std::tr1::hyperg(Tp(data008[i].a), Tp(data008[i].b),
579 Tp(data008[i].c), Tp(data008[i].x));
580 const Tp f0 = data008[i].f0;
581 const Tp diff = f - f0;
582 if (std::abs(diff) > max_abs_diff)
583 max_abs_diff = std::abs(diff);
584 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
585 {
586 const Tp frac = diff / f0;
587 if (std::abs(frac) > max_abs_frac)
588 max_abs_frac = std::abs(frac);
589 }
590 }
591 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
592}
593
594// Test data for a=0.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
595testcase_hyperg<double> data009[] = {
f92ab29f 596 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 597 8.0000000000000000, -0.90000000000000002 },
f92ab29f 598 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 599 8.0000000000000000, -0.80000000000000004 },
f92ab29f 600 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 601 8.0000000000000000, -0.69999999999999996 },
f92ab29f 602 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 603 8.0000000000000000, -0.59999999999999998 },
f92ab29f 604 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 605 8.0000000000000000, -0.50000000000000000 },
f92ab29f 606 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 607 8.0000000000000000, -0.40000000000000002 },
f92ab29f 608 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 609 8.0000000000000000, -0.30000000000000004 },
f92ab29f 610 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 611 8.0000000000000000, -0.19999999999999996 },
f92ab29f 612 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 613 8.0000000000000000, -0.099999999999999978 },
f92ab29f 614 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 615 8.0000000000000000, 0.0000000000000000 },
f92ab29f 616 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 617 8.0000000000000000, 0.10000000000000009 },
f92ab29f 618 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 619 8.0000000000000000, 0.19999999999999996 },
f92ab29f 620 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 621 8.0000000000000000, 0.30000000000000004 },
f92ab29f 622 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 623 8.0000000000000000, 0.39999999999999991 },
f92ab29f 624 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 625 8.0000000000000000, 0.50000000000000000 },
f92ab29f 626 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 627 8.0000000000000000, 0.60000000000000009 },
f92ab29f 628 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 629 8.0000000000000000, 0.69999999999999996 },
f92ab29f 630 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 631 8.0000000000000000, 0.80000000000000004 },
f92ab29f 632 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943
BK
633 8.0000000000000000, 0.89999999999999991 },
634};
635
636// Test function for a=0.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
637template <typename Tp>
638void test009()
639{
640 const Tp eps = std::numeric_limits<Tp>::epsilon();
641 Tp max_abs_diff = -Tp(1);
642 Tp max_abs_frac = -Tp(1);
643 unsigned int num_datum = sizeof(data009)
644 / sizeof(testcase_hyperg<double>);
645 for (unsigned int i = 0; i < num_datum; ++i)
646 {
647 const Tp f = std::tr1::hyperg(Tp(data009[i].a), Tp(data009[i].b),
648 Tp(data009[i].c), Tp(data009[i].x));
649 const Tp f0 = data009[i].f0;
650 const Tp diff = f - f0;
651 if (std::abs(diff) > max_abs_diff)
652 max_abs_diff = std::abs(diff);
653 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
654 {
655 const Tp frac = diff / f0;
656 if (std::abs(frac) > max_abs_frac)
657 max_abs_frac = std::abs(frac);
658 }
659 }
660 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
661}
662
663// Test data for a=0.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
664testcase_hyperg<double> data010[] = {
f92ab29f 665 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 666 10.000000000000000, -0.90000000000000002 },
f92ab29f 667 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 668 10.000000000000000, -0.80000000000000004 },
f92ab29f 669 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 670 10.000000000000000, -0.69999999999999996 },
f92ab29f 671 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 672 10.000000000000000, -0.59999999999999998 },
f92ab29f 673 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 674 10.000000000000000, -0.50000000000000000 },
f92ab29f 675 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 676 10.000000000000000, -0.40000000000000002 },
f92ab29f 677 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 678 10.000000000000000, -0.30000000000000004 },
f92ab29f 679 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 680 10.000000000000000, -0.19999999999999996 },
f92ab29f 681 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 682 10.000000000000000, -0.099999999999999978 },
f92ab29f 683 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 684 10.000000000000000, 0.0000000000000000 },
f92ab29f 685 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 686 10.000000000000000, 0.10000000000000009 },
f92ab29f 687 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 688 10.000000000000000, 0.19999999999999996 },
f92ab29f 689 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 690 10.000000000000000, 0.30000000000000004 },
f92ab29f 691 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 692 10.000000000000000, 0.39999999999999991 },
f92ab29f 693 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 694 10.000000000000000, 0.50000000000000000 },
f92ab29f 695 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 696 10.000000000000000, 0.60000000000000009 },
f92ab29f 697 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 698 10.000000000000000, 0.69999999999999996 },
f92ab29f 699 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943 700 10.000000000000000, 0.80000000000000004 },
f92ab29f 701 { 1.0000000000000000, 0.0000000000000000, 0.50000000000000000,
7c62b943
BK
702 10.000000000000000, 0.89999999999999991 },
703};
704
705// Test function for a=0.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
706template <typename Tp>
707void test010()
708{
709 const Tp eps = std::numeric_limits<Tp>::epsilon();
710 Tp max_abs_diff = -Tp(1);
711 Tp max_abs_frac = -Tp(1);
712 unsigned int num_datum = sizeof(data010)
713 / sizeof(testcase_hyperg<double>);
714 for (unsigned int i = 0; i < num_datum; ++i)
715 {
716 const Tp f = std::tr1::hyperg(Tp(data010[i].a), Tp(data010[i].b),
717 Tp(data010[i].c), Tp(data010[i].x));
718 const Tp f0 = data010[i].f0;
719 const Tp diff = f - f0;
720 if (std::abs(diff) > max_abs_diff)
721 max_abs_diff = std::abs(diff);
722 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
723 {
724 const Tp frac = diff / f0;
725 if (std::abs(frac) > max_abs_frac)
726 max_abs_frac = std::abs(frac);
727 }
728 }
729 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
730}
731
732// Test data for a=0.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
733testcase_hyperg<double> data011[] = {
f92ab29f 734 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 735 2.0000000000000000, -0.90000000000000002 },
f92ab29f 736 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 737 2.0000000000000000, -0.80000000000000004 },
f92ab29f 738 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 739 2.0000000000000000, -0.69999999999999996 },
f92ab29f 740 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 741 2.0000000000000000, -0.59999999999999998 },
f92ab29f 742 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 743 2.0000000000000000, -0.50000000000000000 },
f92ab29f 744 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 745 2.0000000000000000, -0.40000000000000002 },
f92ab29f 746 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 747 2.0000000000000000, -0.30000000000000004 },
f92ab29f 748 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 749 2.0000000000000000, -0.19999999999999996 },
f92ab29f 750 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 751 2.0000000000000000, -0.099999999999999978 },
f92ab29f 752 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 753 2.0000000000000000, 0.0000000000000000 },
f92ab29f 754 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 755 2.0000000000000000, 0.10000000000000009 },
f92ab29f 756 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 757 2.0000000000000000, 0.19999999999999996 },
f92ab29f 758 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 759 2.0000000000000000, 0.30000000000000004 },
f92ab29f 760 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 761 2.0000000000000000, 0.39999999999999991 },
f92ab29f 762 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 763 2.0000000000000000, 0.50000000000000000 },
f92ab29f 764 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 765 2.0000000000000000, 0.60000000000000009 },
f92ab29f 766 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 767 2.0000000000000000, 0.69999999999999996 },
f92ab29f 768 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 769 2.0000000000000000, 0.80000000000000004 },
f92ab29f 770 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943
BK
771 2.0000000000000000, 0.89999999999999991 },
772};
773
774// Test function for a=0.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
775template <typename Tp>
776void test011()
777{
778 const Tp eps = std::numeric_limits<Tp>::epsilon();
779 Tp max_abs_diff = -Tp(1);
780 Tp max_abs_frac = -Tp(1);
781 unsigned int num_datum = sizeof(data011)
782 / sizeof(testcase_hyperg<double>);
783 for (unsigned int i = 0; i < num_datum; ++i)
784 {
785 const Tp f = std::tr1::hyperg(Tp(data011[i].a), Tp(data011[i].b),
786 Tp(data011[i].c), Tp(data011[i].x));
787 const Tp f0 = data011[i].f0;
788 const Tp diff = f - f0;
789 if (std::abs(diff) > max_abs_diff)
790 max_abs_diff = std::abs(diff);
791 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
792 {
793 const Tp frac = diff / f0;
794 if (std::abs(frac) > max_abs_frac)
795 max_abs_frac = std::abs(frac);
796 }
797 }
798 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
799}
800
801// Test data for a=0.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
802testcase_hyperg<double> data012[] = {
f92ab29f 803 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 804 4.0000000000000000, -0.90000000000000002 },
f92ab29f 805 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 806 4.0000000000000000, -0.80000000000000004 },
f92ab29f 807 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 808 4.0000000000000000, -0.69999999999999996 },
f92ab29f 809 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 810 4.0000000000000000, -0.59999999999999998 },
f92ab29f 811 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 812 4.0000000000000000, -0.50000000000000000 },
f92ab29f 813 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 814 4.0000000000000000, -0.40000000000000002 },
f92ab29f 815 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 816 4.0000000000000000, -0.30000000000000004 },
f92ab29f 817 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 818 4.0000000000000000, -0.19999999999999996 },
f92ab29f 819 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 820 4.0000000000000000, -0.099999999999999978 },
f92ab29f 821 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 822 4.0000000000000000, 0.0000000000000000 },
f92ab29f 823 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 824 4.0000000000000000, 0.10000000000000009 },
f92ab29f 825 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 826 4.0000000000000000, 0.19999999999999996 },
f92ab29f 827 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 828 4.0000000000000000, 0.30000000000000004 },
f92ab29f 829 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 830 4.0000000000000000, 0.39999999999999991 },
f92ab29f 831 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 832 4.0000000000000000, 0.50000000000000000 },
f92ab29f 833 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 834 4.0000000000000000, 0.60000000000000009 },
f92ab29f 835 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 836 4.0000000000000000, 0.69999999999999996 },
f92ab29f 837 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 838 4.0000000000000000, 0.80000000000000004 },
f92ab29f 839 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943
BK
840 4.0000000000000000, 0.89999999999999991 },
841};
842
843// Test function for a=0.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
844template <typename Tp>
845void test012()
846{
847 const Tp eps = std::numeric_limits<Tp>::epsilon();
848 Tp max_abs_diff = -Tp(1);
849 Tp max_abs_frac = -Tp(1);
850 unsigned int num_datum = sizeof(data012)
851 / sizeof(testcase_hyperg<double>);
852 for (unsigned int i = 0; i < num_datum; ++i)
853 {
854 const Tp f = std::tr1::hyperg(Tp(data012[i].a), Tp(data012[i].b),
855 Tp(data012[i].c), Tp(data012[i].x));
856 const Tp f0 = data012[i].f0;
857 const Tp diff = f - f0;
858 if (std::abs(diff) > max_abs_diff)
859 max_abs_diff = std::abs(diff);
860 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
861 {
862 const Tp frac = diff / f0;
863 if (std::abs(frac) > max_abs_frac)
864 max_abs_frac = std::abs(frac);
865 }
866 }
867 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
868}
869
870// Test data for a=0.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
871testcase_hyperg<double> data013[] = {
f92ab29f 872 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 873 6.0000000000000000, -0.90000000000000002 },
f92ab29f 874 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 875 6.0000000000000000, -0.80000000000000004 },
f92ab29f 876 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 877 6.0000000000000000, -0.69999999999999996 },
f92ab29f 878 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 879 6.0000000000000000, -0.59999999999999998 },
f92ab29f 880 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 881 6.0000000000000000, -0.50000000000000000 },
f92ab29f 882 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 883 6.0000000000000000, -0.40000000000000002 },
f92ab29f 884 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 885 6.0000000000000000, -0.30000000000000004 },
f92ab29f 886 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 887 6.0000000000000000, -0.19999999999999996 },
f92ab29f 888 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 889 6.0000000000000000, -0.099999999999999978 },
f92ab29f 890 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 891 6.0000000000000000, 0.0000000000000000 },
f92ab29f 892 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 893 6.0000000000000000, 0.10000000000000009 },
f92ab29f 894 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 895 6.0000000000000000, 0.19999999999999996 },
f92ab29f 896 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 897 6.0000000000000000, 0.30000000000000004 },
f92ab29f 898 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 899 6.0000000000000000, 0.39999999999999991 },
f92ab29f 900 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 901 6.0000000000000000, 0.50000000000000000 },
f92ab29f 902 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 903 6.0000000000000000, 0.60000000000000009 },
f92ab29f 904 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 905 6.0000000000000000, 0.69999999999999996 },
f92ab29f 906 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 907 6.0000000000000000, 0.80000000000000004 },
f92ab29f 908 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943
BK
909 6.0000000000000000, 0.89999999999999991 },
910};
911
912// Test function for a=0.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
913template <typename Tp>
914void test013()
915{
916 const Tp eps = std::numeric_limits<Tp>::epsilon();
917 Tp max_abs_diff = -Tp(1);
918 Tp max_abs_frac = -Tp(1);
919 unsigned int num_datum = sizeof(data013)
920 / sizeof(testcase_hyperg<double>);
921 for (unsigned int i = 0; i < num_datum; ++i)
922 {
923 const Tp f = std::tr1::hyperg(Tp(data013[i].a), Tp(data013[i].b),
924 Tp(data013[i].c), Tp(data013[i].x));
925 const Tp f0 = data013[i].f0;
926 const Tp diff = f - f0;
927 if (std::abs(diff) > max_abs_diff)
928 max_abs_diff = std::abs(diff);
929 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
930 {
931 const Tp frac = diff / f0;
932 if (std::abs(frac) > max_abs_frac)
933 max_abs_frac = std::abs(frac);
934 }
935 }
936 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
937}
938
939// Test data for a=0.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
940testcase_hyperg<double> data014[] = {
f92ab29f 941 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 942 8.0000000000000000, -0.90000000000000002 },
f92ab29f 943 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 944 8.0000000000000000, -0.80000000000000004 },
f92ab29f 945 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 946 8.0000000000000000, -0.69999999999999996 },
f92ab29f 947 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 948 8.0000000000000000, -0.59999999999999998 },
f92ab29f 949 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 950 8.0000000000000000, -0.50000000000000000 },
f92ab29f 951 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 952 8.0000000000000000, -0.40000000000000002 },
f92ab29f 953 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 954 8.0000000000000000, -0.30000000000000004 },
f92ab29f 955 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 956 8.0000000000000000, -0.19999999999999996 },
f92ab29f 957 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 958 8.0000000000000000, -0.099999999999999978 },
f92ab29f 959 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 960 8.0000000000000000, 0.0000000000000000 },
f92ab29f 961 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 962 8.0000000000000000, 0.10000000000000009 },
f92ab29f 963 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 964 8.0000000000000000, 0.19999999999999996 },
f92ab29f 965 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 966 8.0000000000000000, 0.30000000000000004 },
f92ab29f 967 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 968 8.0000000000000000, 0.39999999999999991 },
f92ab29f 969 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 970 8.0000000000000000, 0.50000000000000000 },
f92ab29f 971 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 972 8.0000000000000000, 0.60000000000000009 },
f92ab29f 973 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 974 8.0000000000000000, 0.69999999999999996 },
f92ab29f 975 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 976 8.0000000000000000, 0.80000000000000004 },
f92ab29f 977 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943
BK
978 8.0000000000000000, 0.89999999999999991 },
979};
980
981// Test function for a=0.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
982template <typename Tp>
983void test014()
984{
985 const Tp eps = std::numeric_limits<Tp>::epsilon();
986 Tp max_abs_diff = -Tp(1);
987 Tp max_abs_frac = -Tp(1);
988 unsigned int num_datum = sizeof(data014)
989 / sizeof(testcase_hyperg<double>);
990 for (unsigned int i = 0; i < num_datum; ++i)
991 {
992 const Tp f = std::tr1::hyperg(Tp(data014[i].a), Tp(data014[i].b),
993 Tp(data014[i].c), Tp(data014[i].x));
994 const Tp f0 = data014[i].f0;
995 const Tp diff = f - f0;
996 if (std::abs(diff) > max_abs_diff)
997 max_abs_diff = std::abs(diff);
998 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
999 {
1000 const Tp frac = diff / f0;
1001 if (std::abs(frac) > max_abs_frac)
1002 max_abs_frac = std::abs(frac);
1003 }
1004 }
1005 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1006}
1007
1008// Test data for a=0.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
1009testcase_hyperg<double> data015[] = {
f92ab29f 1010 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1011 10.000000000000000, -0.90000000000000002 },
f92ab29f 1012 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1013 10.000000000000000, -0.80000000000000004 },
f92ab29f 1014 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1015 10.000000000000000, -0.69999999999999996 },
f92ab29f 1016 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1017 10.000000000000000, -0.59999999999999998 },
f92ab29f 1018 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1019 10.000000000000000, -0.50000000000000000 },
f92ab29f 1020 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1021 10.000000000000000, -0.40000000000000002 },
f92ab29f 1022 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1023 10.000000000000000, -0.30000000000000004 },
f92ab29f 1024 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1025 10.000000000000000, -0.19999999999999996 },
f92ab29f 1026 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1027 10.000000000000000, -0.099999999999999978 },
f92ab29f 1028 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1029 10.000000000000000, 0.0000000000000000 },
f92ab29f 1030 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1031 10.000000000000000, 0.10000000000000009 },
f92ab29f 1032 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1033 10.000000000000000, 0.19999999999999996 },
f92ab29f 1034 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1035 10.000000000000000, 0.30000000000000004 },
f92ab29f 1036 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1037 10.000000000000000, 0.39999999999999991 },
f92ab29f 1038 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1039 10.000000000000000, 0.50000000000000000 },
f92ab29f 1040 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1041 10.000000000000000, 0.60000000000000009 },
f92ab29f 1042 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1043 10.000000000000000, 0.69999999999999996 },
f92ab29f 1044 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943 1045 10.000000000000000, 0.80000000000000004 },
f92ab29f 1046 { 1.0000000000000000, 0.0000000000000000, 1.0000000000000000,
7c62b943
BK
1047 10.000000000000000, 0.89999999999999991 },
1048};
1049
1050// Test function for a=0.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
1051template <typename Tp>
1052void test015()
1053{
1054 const Tp eps = std::numeric_limits<Tp>::epsilon();
1055 Tp max_abs_diff = -Tp(1);
1056 Tp max_abs_frac = -Tp(1);
1057 unsigned int num_datum = sizeof(data015)
1058 / sizeof(testcase_hyperg<double>);
1059 for (unsigned int i = 0; i < num_datum; ++i)
1060 {
1061 const Tp f = std::tr1::hyperg(Tp(data015[i].a), Tp(data015[i].b),
1062 Tp(data015[i].c), Tp(data015[i].x));
1063 const Tp f0 = data015[i].f0;
1064 const Tp diff = f - f0;
1065 if (std::abs(diff) > max_abs_diff)
1066 max_abs_diff = std::abs(diff);
1067 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1068 {
1069 const Tp frac = diff / f0;
1070 if (std::abs(frac) > max_abs_frac)
1071 max_abs_frac = std::abs(frac);
1072 }
1073 }
1074 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1075}
1076
1077// Test data for a=0.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
1078testcase_hyperg<double> data016[] = {
f92ab29f 1079 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1080 2.0000000000000000, -0.90000000000000002 },
f92ab29f 1081 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1082 2.0000000000000000, -0.80000000000000004 },
f92ab29f 1083 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1084 2.0000000000000000, -0.69999999999999996 },
f92ab29f 1085 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1086 2.0000000000000000, -0.59999999999999998 },
f92ab29f 1087 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1088 2.0000000000000000, -0.50000000000000000 },
f92ab29f 1089 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1090 2.0000000000000000, -0.40000000000000002 },
f92ab29f 1091 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1092 2.0000000000000000, -0.30000000000000004 },
f92ab29f 1093 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1094 2.0000000000000000, -0.19999999999999996 },
f92ab29f 1095 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1096 2.0000000000000000, -0.099999999999999978 },
f92ab29f 1097 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1098 2.0000000000000000, 0.0000000000000000 },
f92ab29f 1099 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1100 2.0000000000000000, 0.10000000000000009 },
f92ab29f 1101 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1102 2.0000000000000000, 0.19999999999999996 },
f92ab29f 1103 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1104 2.0000000000000000, 0.30000000000000004 },
f92ab29f 1105 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1106 2.0000000000000000, 0.39999999999999991 },
f92ab29f 1107 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1108 2.0000000000000000, 0.50000000000000000 },
f92ab29f 1109 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1110 2.0000000000000000, 0.60000000000000009 },
f92ab29f 1111 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1112 2.0000000000000000, 0.69999999999999996 },
f92ab29f 1113 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1114 2.0000000000000000, 0.80000000000000004 },
f92ab29f 1115 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943
BK
1116 2.0000000000000000, 0.89999999999999991 },
1117};
1118
1119// Test function for a=0.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
1120template <typename Tp>
1121void test016()
1122{
1123 const Tp eps = std::numeric_limits<Tp>::epsilon();
1124 Tp max_abs_diff = -Tp(1);
1125 Tp max_abs_frac = -Tp(1);
1126 unsigned int num_datum = sizeof(data016)
1127 / sizeof(testcase_hyperg<double>);
1128 for (unsigned int i = 0; i < num_datum; ++i)
1129 {
1130 const Tp f = std::tr1::hyperg(Tp(data016[i].a), Tp(data016[i].b),
1131 Tp(data016[i].c), Tp(data016[i].x));
1132 const Tp f0 = data016[i].f0;
1133 const Tp diff = f - f0;
1134 if (std::abs(diff) > max_abs_diff)
1135 max_abs_diff = std::abs(diff);
1136 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1137 {
1138 const Tp frac = diff / f0;
1139 if (std::abs(frac) > max_abs_frac)
1140 max_abs_frac = std::abs(frac);
1141 }
1142 }
1143 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1144}
1145
1146// Test data for a=0.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
1147testcase_hyperg<double> data017[] = {
f92ab29f 1148 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1149 4.0000000000000000, -0.90000000000000002 },
f92ab29f 1150 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1151 4.0000000000000000, -0.80000000000000004 },
f92ab29f 1152 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1153 4.0000000000000000, -0.69999999999999996 },
f92ab29f 1154 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1155 4.0000000000000000, -0.59999999999999998 },
f92ab29f 1156 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1157 4.0000000000000000, -0.50000000000000000 },
f92ab29f 1158 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1159 4.0000000000000000, -0.40000000000000002 },
f92ab29f 1160 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1161 4.0000000000000000, -0.30000000000000004 },
f92ab29f 1162 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1163 4.0000000000000000, -0.19999999999999996 },
f92ab29f 1164 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1165 4.0000000000000000, -0.099999999999999978 },
f92ab29f 1166 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1167 4.0000000000000000, 0.0000000000000000 },
f92ab29f 1168 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1169 4.0000000000000000, 0.10000000000000009 },
f92ab29f 1170 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1171 4.0000000000000000, 0.19999999999999996 },
f92ab29f 1172 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1173 4.0000000000000000, 0.30000000000000004 },
f92ab29f 1174 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1175 4.0000000000000000, 0.39999999999999991 },
f92ab29f 1176 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1177 4.0000000000000000, 0.50000000000000000 },
f92ab29f 1178 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1179 4.0000000000000000, 0.60000000000000009 },
f92ab29f 1180 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1181 4.0000000000000000, 0.69999999999999996 },
f92ab29f 1182 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1183 4.0000000000000000, 0.80000000000000004 },
f92ab29f 1184 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943
BK
1185 4.0000000000000000, 0.89999999999999991 },
1186};
1187
1188// Test function for a=0.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
1189template <typename Tp>
1190void test017()
1191{
1192 const Tp eps = std::numeric_limits<Tp>::epsilon();
1193 Tp max_abs_diff = -Tp(1);
1194 Tp max_abs_frac = -Tp(1);
1195 unsigned int num_datum = sizeof(data017)
1196 / sizeof(testcase_hyperg<double>);
1197 for (unsigned int i = 0; i < num_datum; ++i)
1198 {
1199 const Tp f = std::tr1::hyperg(Tp(data017[i].a), Tp(data017[i].b),
1200 Tp(data017[i].c), Tp(data017[i].x));
1201 const Tp f0 = data017[i].f0;
1202 const Tp diff = f - f0;
1203 if (std::abs(diff) > max_abs_diff)
1204 max_abs_diff = std::abs(diff);
1205 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1206 {
1207 const Tp frac = diff / f0;
1208 if (std::abs(frac) > max_abs_frac)
1209 max_abs_frac = std::abs(frac);
1210 }
1211 }
1212 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1213}
1214
1215// Test data for a=0.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
1216testcase_hyperg<double> data018[] = {
f92ab29f 1217 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1218 6.0000000000000000, -0.90000000000000002 },
f92ab29f 1219 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1220 6.0000000000000000, -0.80000000000000004 },
f92ab29f 1221 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1222 6.0000000000000000, -0.69999999999999996 },
f92ab29f 1223 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1224 6.0000000000000000, -0.59999999999999998 },
f92ab29f 1225 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1226 6.0000000000000000, -0.50000000000000000 },
f92ab29f 1227 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1228 6.0000000000000000, -0.40000000000000002 },
f92ab29f 1229 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1230 6.0000000000000000, -0.30000000000000004 },
f92ab29f 1231 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1232 6.0000000000000000, -0.19999999999999996 },
f92ab29f 1233 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1234 6.0000000000000000, -0.099999999999999978 },
f92ab29f 1235 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1236 6.0000000000000000, 0.0000000000000000 },
f92ab29f 1237 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1238 6.0000000000000000, 0.10000000000000009 },
f92ab29f 1239 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1240 6.0000000000000000, 0.19999999999999996 },
f92ab29f 1241 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1242 6.0000000000000000, 0.30000000000000004 },
f92ab29f 1243 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1244 6.0000000000000000, 0.39999999999999991 },
f92ab29f 1245 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1246 6.0000000000000000, 0.50000000000000000 },
f92ab29f 1247 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1248 6.0000000000000000, 0.60000000000000009 },
f92ab29f 1249 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1250 6.0000000000000000, 0.69999999999999996 },
f92ab29f 1251 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1252 6.0000000000000000, 0.80000000000000004 },
f92ab29f 1253 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943
BK
1254 6.0000000000000000, 0.89999999999999991 },
1255};
1256
1257// Test function for a=0.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
1258template <typename Tp>
1259void test018()
1260{
1261 const Tp eps = std::numeric_limits<Tp>::epsilon();
1262 Tp max_abs_diff = -Tp(1);
1263 Tp max_abs_frac = -Tp(1);
1264 unsigned int num_datum = sizeof(data018)
1265 / sizeof(testcase_hyperg<double>);
1266 for (unsigned int i = 0; i < num_datum; ++i)
1267 {
1268 const Tp f = std::tr1::hyperg(Tp(data018[i].a), Tp(data018[i].b),
1269 Tp(data018[i].c), Tp(data018[i].x));
1270 const Tp f0 = data018[i].f0;
1271 const Tp diff = f - f0;
1272 if (std::abs(diff) > max_abs_diff)
1273 max_abs_diff = std::abs(diff);
1274 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1275 {
1276 const Tp frac = diff / f0;
1277 if (std::abs(frac) > max_abs_frac)
1278 max_abs_frac = std::abs(frac);
1279 }
1280 }
1281 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1282}
1283
1284// Test data for a=0.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
1285testcase_hyperg<double> data019[] = {
f92ab29f 1286 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1287 8.0000000000000000, -0.90000000000000002 },
f92ab29f 1288 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1289 8.0000000000000000, -0.80000000000000004 },
f92ab29f 1290 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1291 8.0000000000000000, -0.69999999999999996 },
f92ab29f 1292 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1293 8.0000000000000000, -0.59999999999999998 },
f92ab29f 1294 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1295 8.0000000000000000, -0.50000000000000000 },
f92ab29f 1296 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1297 8.0000000000000000, -0.40000000000000002 },
f92ab29f 1298 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1299 8.0000000000000000, -0.30000000000000004 },
f92ab29f 1300 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1301 8.0000000000000000, -0.19999999999999996 },
f92ab29f 1302 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1303 8.0000000000000000, -0.099999999999999978 },
f92ab29f 1304 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1305 8.0000000000000000, 0.0000000000000000 },
f92ab29f 1306 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1307 8.0000000000000000, 0.10000000000000009 },
f92ab29f 1308 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1309 8.0000000000000000, 0.19999999999999996 },
f92ab29f 1310 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1311 8.0000000000000000, 0.30000000000000004 },
f92ab29f 1312 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1313 8.0000000000000000, 0.39999999999999991 },
f92ab29f 1314 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1315 8.0000000000000000, 0.50000000000000000 },
f92ab29f 1316 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1317 8.0000000000000000, 0.60000000000000009 },
f92ab29f 1318 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1319 8.0000000000000000, 0.69999999999999996 },
f92ab29f 1320 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1321 8.0000000000000000, 0.80000000000000004 },
f92ab29f 1322 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943
BK
1323 8.0000000000000000, 0.89999999999999991 },
1324};
1325
1326// Test function for a=0.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
1327template <typename Tp>
1328void test019()
1329{
1330 const Tp eps = std::numeric_limits<Tp>::epsilon();
1331 Tp max_abs_diff = -Tp(1);
1332 Tp max_abs_frac = -Tp(1);
1333 unsigned int num_datum = sizeof(data019)
1334 / sizeof(testcase_hyperg<double>);
1335 for (unsigned int i = 0; i < num_datum; ++i)
1336 {
1337 const Tp f = std::tr1::hyperg(Tp(data019[i].a), Tp(data019[i].b),
1338 Tp(data019[i].c), Tp(data019[i].x));
1339 const Tp f0 = data019[i].f0;
1340 const Tp diff = f - f0;
1341 if (std::abs(diff) > max_abs_diff)
1342 max_abs_diff = std::abs(diff);
1343 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1344 {
1345 const Tp frac = diff / f0;
1346 if (std::abs(frac) > max_abs_frac)
1347 max_abs_frac = std::abs(frac);
1348 }
1349 }
1350 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1351}
1352
1353// Test data for a=0.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
1354testcase_hyperg<double> data020[] = {
f92ab29f 1355 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1356 10.000000000000000, -0.90000000000000002 },
f92ab29f 1357 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1358 10.000000000000000, -0.80000000000000004 },
f92ab29f 1359 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1360 10.000000000000000, -0.69999999999999996 },
f92ab29f 1361 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1362 10.000000000000000, -0.59999999999999998 },
f92ab29f 1363 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1364 10.000000000000000, -0.50000000000000000 },
f92ab29f 1365 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1366 10.000000000000000, -0.40000000000000002 },
f92ab29f 1367 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1368 10.000000000000000, -0.30000000000000004 },
f92ab29f 1369 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1370 10.000000000000000, -0.19999999999999996 },
f92ab29f 1371 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1372 10.000000000000000, -0.099999999999999978 },
f92ab29f 1373 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1374 10.000000000000000, 0.0000000000000000 },
f92ab29f 1375 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1376 10.000000000000000, 0.10000000000000009 },
f92ab29f 1377 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1378 10.000000000000000, 0.19999999999999996 },
f92ab29f 1379 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1380 10.000000000000000, 0.30000000000000004 },
f92ab29f 1381 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1382 10.000000000000000, 0.39999999999999991 },
f92ab29f 1383 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1384 10.000000000000000, 0.50000000000000000 },
f92ab29f 1385 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1386 10.000000000000000, 0.60000000000000009 },
f92ab29f 1387 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1388 10.000000000000000, 0.69999999999999996 },
f92ab29f 1389 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943 1390 10.000000000000000, 0.80000000000000004 },
f92ab29f 1391 { 1.0000000000000000, 0.0000000000000000, 2.0000000000000000,
7c62b943
BK
1392 10.000000000000000, 0.89999999999999991 },
1393};
1394
1395// Test function for a=0.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
1396template <typename Tp>
1397void test020()
1398{
1399 const Tp eps = std::numeric_limits<Tp>::epsilon();
1400 Tp max_abs_diff = -Tp(1);
1401 Tp max_abs_frac = -Tp(1);
1402 unsigned int num_datum = sizeof(data020)
1403 / sizeof(testcase_hyperg<double>);
1404 for (unsigned int i = 0; i < num_datum; ++i)
1405 {
1406 const Tp f = std::tr1::hyperg(Tp(data020[i].a), Tp(data020[i].b),
1407 Tp(data020[i].c), Tp(data020[i].x));
1408 const Tp f0 = data020[i].f0;
1409 const Tp diff = f - f0;
1410 if (std::abs(diff) > max_abs_diff)
1411 max_abs_diff = std::abs(diff);
1412 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1413 {
1414 const Tp frac = diff / f0;
1415 if (std::abs(frac) > max_abs_frac)
1416 max_abs_frac = std::abs(frac);
1417 }
1418 }
1419 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1420}
1421
1422// Test data for a=0.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
1423testcase_hyperg<double> data021[] = {
f92ab29f 1424 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1425 2.0000000000000000, -0.90000000000000002 },
f92ab29f 1426 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1427 2.0000000000000000, -0.80000000000000004 },
f92ab29f 1428 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1429 2.0000000000000000, -0.69999999999999996 },
f92ab29f 1430 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1431 2.0000000000000000, -0.59999999999999998 },
f92ab29f 1432 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1433 2.0000000000000000, -0.50000000000000000 },
f92ab29f 1434 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1435 2.0000000000000000, -0.40000000000000002 },
f92ab29f 1436 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1437 2.0000000000000000, -0.30000000000000004 },
f92ab29f 1438 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1439 2.0000000000000000, -0.19999999999999996 },
f92ab29f 1440 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1441 2.0000000000000000, -0.099999999999999978 },
f92ab29f 1442 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1443 2.0000000000000000, 0.0000000000000000 },
f92ab29f 1444 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1445 2.0000000000000000, 0.10000000000000009 },
f92ab29f 1446 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1447 2.0000000000000000, 0.19999999999999996 },
f92ab29f 1448 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1449 2.0000000000000000, 0.30000000000000004 },
f92ab29f 1450 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1451 2.0000000000000000, 0.39999999999999991 },
f92ab29f 1452 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1453 2.0000000000000000, 0.50000000000000000 },
f92ab29f 1454 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1455 2.0000000000000000, 0.60000000000000009 },
f92ab29f 1456 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1457 2.0000000000000000, 0.69999999999999996 },
f92ab29f 1458 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1459 2.0000000000000000, 0.80000000000000004 },
f92ab29f 1460 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943
BK
1461 2.0000000000000000, 0.89999999999999991 },
1462};
1463
1464// Test function for a=0.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
1465template <typename Tp>
1466void test021()
1467{
1468 const Tp eps = std::numeric_limits<Tp>::epsilon();
1469 Tp max_abs_diff = -Tp(1);
1470 Tp max_abs_frac = -Tp(1);
1471 unsigned int num_datum = sizeof(data021)
1472 / sizeof(testcase_hyperg<double>);
1473 for (unsigned int i = 0; i < num_datum; ++i)
1474 {
1475 const Tp f = std::tr1::hyperg(Tp(data021[i].a), Tp(data021[i].b),
1476 Tp(data021[i].c), Tp(data021[i].x));
1477 const Tp f0 = data021[i].f0;
1478 const Tp diff = f - f0;
1479 if (std::abs(diff) > max_abs_diff)
1480 max_abs_diff = std::abs(diff);
1481 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1482 {
1483 const Tp frac = diff / f0;
1484 if (std::abs(frac) > max_abs_frac)
1485 max_abs_frac = std::abs(frac);
1486 }
1487 }
1488 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1489}
1490
1491// Test data for a=0.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
1492testcase_hyperg<double> data022[] = {
f92ab29f 1493 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1494 4.0000000000000000, -0.90000000000000002 },
f92ab29f 1495 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1496 4.0000000000000000, -0.80000000000000004 },
f92ab29f 1497 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1498 4.0000000000000000, -0.69999999999999996 },
f92ab29f 1499 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1500 4.0000000000000000, -0.59999999999999998 },
f92ab29f 1501 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1502 4.0000000000000000, -0.50000000000000000 },
f92ab29f 1503 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1504 4.0000000000000000, -0.40000000000000002 },
f92ab29f 1505 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1506 4.0000000000000000, -0.30000000000000004 },
f92ab29f 1507 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1508 4.0000000000000000, -0.19999999999999996 },
f92ab29f 1509 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1510 4.0000000000000000, -0.099999999999999978 },
f92ab29f 1511 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1512 4.0000000000000000, 0.0000000000000000 },
f92ab29f 1513 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1514 4.0000000000000000, 0.10000000000000009 },
f92ab29f 1515 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1516 4.0000000000000000, 0.19999999999999996 },
f92ab29f 1517 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1518 4.0000000000000000, 0.30000000000000004 },
f92ab29f 1519 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1520 4.0000000000000000, 0.39999999999999991 },
f92ab29f 1521 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1522 4.0000000000000000, 0.50000000000000000 },
f92ab29f 1523 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1524 4.0000000000000000, 0.60000000000000009 },
f92ab29f 1525 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1526 4.0000000000000000, 0.69999999999999996 },
f92ab29f 1527 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1528 4.0000000000000000, 0.80000000000000004 },
f92ab29f 1529 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943
BK
1530 4.0000000000000000, 0.89999999999999991 },
1531};
1532
1533// Test function for a=0.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
1534template <typename Tp>
1535void test022()
1536{
1537 const Tp eps = std::numeric_limits<Tp>::epsilon();
1538 Tp max_abs_diff = -Tp(1);
1539 Tp max_abs_frac = -Tp(1);
1540 unsigned int num_datum = sizeof(data022)
1541 / sizeof(testcase_hyperg<double>);
1542 for (unsigned int i = 0; i < num_datum; ++i)
1543 {
1544 const Tp f = std::tr1::hyperg(Tp(data022[i].a), Tp(data022[i].b),
1545 Tp(data022[i].c), Tp(data022[i].x));
1546 const Tp f0 = data022[i].f0;
1547 const Tp diff = f - f0;
1548 if (std::abs(diff) > max_abs_diff)
1549 max_abs_diff = std::abs(diff);
1550 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1551 {
1552 const Tp frac = diff / f0;
1553 if (std::abs(frac) > max_abs_frac)
1554 max_abs_frac = std::abs(frac);
1555 }
1556 }
1557 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1558}
1559
1560// Test data for a=0.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
1561testcase_hyperg<double> data023[] = {
f92ab29f 1562 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1563 6.0000000000000000, -0.90000000000000002 },
f92ab29f 1564 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1565 6.0000000000000000, -0.80000000000000004 },
f92ab29f 1566 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1567 6.0000000000000000, -0.69999999999999996 },
f92ab29f 1568 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1569 6.0000000000000000, -0.59999999999999998 },
f92ab29f 1570 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1571 6.0000000000000000, -0.50000000000000000 },
f92ab29f 1572 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1573 6.0000000000000000, -0.40000000000000002 },
f92ab29f 1574 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1575 6.0000000000000000, -0.30000000000000004 },
f92ab29f 1576 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1577 6.0000000000000000, -0.19999999999999996 },
f92ab29f 1578 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1579 6.0000000000000000, -0.099999999999999978 },
f92ab29f 1580 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1581 6.0000000000000000, 0.0000000000000000 },
f92ab29f 1582 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1583 6.0000000000000000, 0.10000000000000009 },
f92ab29f 1584 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1585 6.0000000000000000, 0.19999999999999996 },
f92ab29f 1586 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1587 6.0000000000000000, 0.30000000000000004 },
f92ab29f 1588 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1589 6.0000000000000000, 0.39999999999999991 },
f92ab29f 1590 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1591 6.0000000000000000, 0.50000000000000000 },
f92ab29f 1592 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1593 6.0000000000000000, 0.60000000000000009 },
f92ab29f 1594 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1595 6.0000000000000000, 0.69999999999999996 },
f92ab29f 1596 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1597 6.0000000000000000, 0.80000000000000004 },
f92ab29f 1598 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943
BK
1599 6.0000000000000000, 0.89999999999999991 },
1600};
1601
1602// Test function for a=0.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
1603template <typename Tp>
1604void test023()
1605{
1606 const Tp eps = std::numeric_limits<Tp>::epsilon();
1607 Tp max_abs_diff = -Tp(1);
1608 Tp max_abs_frac = -Tp(1);
1609 unsigned int num_datum = sizeof(data023)
1610 / sizeof(testcase_hyperg<double>);
1611 for (unsigned int i = 0; i < num_datum; ++i)
1612 {
1613 const Tp f = std::tr1::hyperg(Tp(data023[i].a), Tp(data023[i].b),
1614 Tp(data023[i].c), Tp(data023[i].x));
1615 const Tp f0 = data023[i].f0;
1616 const Tp diff = f - f0;
1617 if (std::abs(diff) > max_abs_diff)
1618 max_abs_diff = std::abs(diff);
1619 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1620 {
1621 const Tp frac = diff / f0;
1622 if (std::abs(frac) > max_abs_frac)
1623 max_abs_frac = std::abs(frac);
1624 }
1625 }
1626 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1627}
1628
1629// Test data for a=0.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
1630testcase_hyperg<double> data024[] = {
f92ab29f 1631 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1632 8.0000000000000000, -0.90000000000000002 },
f92ab29f 1633 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1634 8.0000000000000000, -0.80000000000000004 },
f92ab29f 1635 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1636 8.0000000000000000, -0.69999999999999996 },
f92ab29f 1637 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1638 8.0000000000000000, -0.59999999999999998 },
f92ab29f 1639 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1640 8.0000000000000000, -0.50000000000000000 },
f92ab29f 1641 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1642 8.0000000000000000, -0.40000000000000002 },
f92ab29f 1643 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1644 8.0000000000000000, -0.30000000000000004 },
f92ab29f 1645 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1646 8.0000000000000000, -0.19999999999999996 },
f92ab29f 1647 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1648 8.0000000000000000, -0.099999999999999978 },
f92ab29f 1649 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1650 8.0000000000000000, 0.0000000000000000 },
f92ab29f 1651 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1652 8.0000000000000000, 0.10000000000000009 },
f92ab29f 1653 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1654 8.0000000000000000, 0.19999999999999996 },
f92ab29f 1655 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1656 8.0000000000000000, 0.30000000000000004 },
f92ab29f 1657 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1658 8.0000000000000000, 0.39999999999999991 },
f92ab29f 1659 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1660 8.0000000000000000, 0.50000000000000000 },
f92ab29f 1661 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1662 8.0000000000000000, 0.60000000000000009 },
f92ab29f 1663 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1664 8.0000000000000000, 0.69999999999999996 },
f92ab29f 1665 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1666 8.0000000000000000, 0.80000000000000004 },
f92ab29f 1667 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943
BK
1668 8.0000000000000000, 0.89999999999999991 },
1669};
1670
1671// Test function for a=0.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
1672template <typename Tp>
1673void test024()
1674{
1675 const Tp eps = std::numeric_limits<Tp>::epsilon();
1676 Tp max_abs_diff = -Tp(1);
1677 Tp max_abs_frac = -Tp(1);
1678 unsigned int num_datum = sizeof(data024)
1679 / sizeof(testcase_hyperg<double>);
1680 for (unsigned int i = 0; i < num_datum; ++i)
1681 {
1682 const Tp f = std::tr1::hyperg(Tp(data024[i].a), Tp(data024[i].b),
1683 Tp(data024[i].c), Tp(data024[i].x));
1684 const Tp f0 = data024[i].f0;
1685 const Tp diff = f - f0;
1686 if (std::abs(diff) > max_abs_diff)
1687 max_abs_diff = std::abs(diff);
1688 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1689 {
1690 const Tp frac = diff / f0;
1691 if (std::abs(frac) > max_abs_frac)
1692 max_abs_frac = std::abs(frac);
1693 }
1694 }
1695 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1696}
1697
1698// Test data for a=0.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
1699testcase_hyperg<double> data025[] = {
f92ab29f 1700 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1701 10.000000000000000, -0.90000000000000002 },
f92ab29f 1702 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1703 10.000000000000000, -0.80000000000000004 },
f92ab29f 1704 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1705 10.000000000000000, -0.69999999999999996 },
f92ab29f 1706 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1707 10.000000000000000, -0.59999999999999998 },
f92ab29f 1708 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1709 10.000000000000000, -0.50000000000000000 },
f92ab29f 1710 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1711 10.000000000000000, -0.40000000000000002 },
f92ab29f 1712 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1713 10.000000000000000, -0.30000000000000004 },
f92ab29f 1714 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1715 10.000000000000000, -0.19999999999999996 },
f92ab29f 1716 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1717 10.000000000000000, -0.099999999999999978 },
f92ab29f 1718 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1719 10.000000000000000, 0.0000000000000000 },
f92ab29f 1720 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1721 10.000000000000000, 0.10000000000000009 },
f92ab29f 1722 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1723 10.000000000000000, 0.19999999999999996 },
f92ab29f 1724 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1725 10.000000000000000, 0.30000000000000004 },
f92ab29f 1726 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1727 10.000000000000000, 0.39999999999999991 },
f92ab29f 1728 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1729 10.000000000000000, 0.50000000000000000 },
f92ab29f 1730 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1731 10.000000000000000, 0.60000000000000009 },
f92ab29f 1732 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1733 10.000000000000000, 0.69999999999999996 },
f92ab29f 1734 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943 1735 10.000000000000000, 0.80000000000000004 },
f92ab29f 1736 { 1.0000000000000000, 0.0000000000000000, 5.0000000000000000,
7c62b943
BK
1737 10.000000000000000, 0.89999999999999991 },
1738};
1739
1740// Test function for a=0.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
1741template <typename Tp>
1742void test025()
1743{
1744 const Tp eps = std::numeric_limits<Tp>::epsilon();
1745 Tp max_abs_diff = -Tp(1);
1746 Tp max_abs_frac = -Tp(1);
1747 unsigned int num_datum = sizeof(data025)
1748 / sizeof(testcase_hyperg<double>);
1749 for (unsigned int i = 0; i < num_datum; ++i)
1750 {
1751 const Tp f = std::tr1::hyperg(Tp(data025[i].a), Tp(data025[i].b),
1752 Tp(data025[i].c), Tp(data025[i].x));
1753 const Tp f0 = data025[i].f0;
1754 const Tp diff = f - f0;
1755 if (std::abs(diff) > max_abs_diff)
1756 max_abs_diff = std::abs(diff);
1757 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1758 {
1759 const Tp frac = diff / f0;
1760 if (std::abs(frac) > max_abs_frac)
1761 max_abs_frac = std::abs(frac);
1762 }
1763 }
1764 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1765}
1766
1767// Test data for a=0.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
1768testcase_hyperg<double> data026[] = {
f92ab29f 1769 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1770 2.0000000000000000, -0.90000000000000002 },
f92ab29f 1771 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1772 2.0000000000000000, -0.80000000000000004 },
f92ab29f 1773 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1774 2.0000000000000000, -0.69999999999999996 },
f92ab29f 1775 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1776 2.0000000000000000, -0.59999999999999998 },
f92ab29f 1777 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1778 2.0000000000000000, -0.50000000000000000 },
f92ab29f 1779 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1780 2.0000000000000000, -0.40000000000000002 },
f92ab29f 1781 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1782 2.0000000000000000, -0.30000000000000004 },
f92ab29f 1783 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1784 2.0000000000000000, -0.19999999999999996 },
f92ab29f 1785 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1786 2.0000000000000000, -0.099999999999999978 },
f92ab29f 1787 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1788 2.0000000000000000, 0.0000000000000000 },
f92ab29f 1789 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1790 2.0000000000000000, 0.10000000000000009 },
f92ab29f 1791 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1792 2.0000000000000000, 0.19999999999999996 },
f92ab29f 1793 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1794 2.0000000000000000, 0.30000000000000004 },
f92ab29f 1795 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1796 2.0000000000000000, 0.39999999999999991 },
f92ab29f 1797 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1798 2.0000000000000000, 0.50000000000000000 },
f92ab29f 1799 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1800 2.0000000000000000, 0.60000000000000009 },
f92ab29f 1801 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1802 2.0000000000000000, 0.69999999999999996 },
f92ab29f 1803 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1804 2.0000000000000000, 0.80000000000000004 },
f92ab29f 1805 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943
BK
1806 2.0000000000000000, 0.89999999999999991 },
1807};
1808
1809// Test function for a=0.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
1810template <typename Tp>
1811void test026()
1812{
1813 const Tp eps = std::numeric_limits<Tp>::epsilon();
1814 Tp max_abs_diff = -Tp(1);
1815 Tp max_abs_frac = -Tp(1);
1816 unsigned int num_datum = sizeof(data026)
1817 / sizeof(testcase_hyperg<double>);
1818 for (unsigned int i = 0; i < num_datum; ++i)
1819 {
1820 const Tp f = std::tr1::hyperg(Tp(data026[i].a), Tp(data026[i].b),
1821 Tp(data026[i].c), Tp(data026[i].x));
1822 const Tp f0 = data026[i].f0;
1823 const Tp diff = f - f0;
1824 if (std::abs(diff) > max_abs_diff)
1825 max_abs_diff = std::abs(diff);
1826 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1827 {
1828 const Tp frac = diff / f0;
1829 if (std::abs(frac) > max_abs_frac)
1830 max_abs_frac = std::abs(frac);
1831 }
1832 }
1833 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1834}
1835
1836// Test data for a=0.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
1837testcase_hyperg<double> data027[] = {
f92ab29f 1838 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1839 4.0000000000000000, -0.90000000000000002 },
f92ab29f 1840 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1841 4.0000000000000000, -0.80000000000000004 },
f92ab29f 1842 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1843 4.0000000000000000, -0.69999999999999996 },
f92ab29f 1844 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1845 4.0000000000000000, -0.59999999999999998 },
f92ab29f 1846 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1847 4.0000000000000000, -0.50000000000000000 },
f92ab29f 1848 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1849 4.0000000000000000, -0.40000000000000002 },
f92ab29f 1850 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1851 4.0000000000000000, -0.30000000000000004 },
f92ab29f 1852 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1853 4.0000000000000000, -0.19999999999999996 },
f92ab29f 1854 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1855 4.0000000000000000, -0.099999999999999978 },
f92ab29f 1856 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1857 4.0000000000000000, 0.0000000000000000 },
f92ab29f 1858 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1859 4.0000000000000000, 0.10000000000000009 },
f92ab29f 1860 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1861 4.0000000000000000, 0.19999999999999996 },
f92ab29f 1862 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1863 4.0000000000000000, 0.30000000000000004 },
f92ab29f 1864 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1865 4.0000000000000000, 0.39999999999999991 },
f92ab29f 1866 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1867 4.0000000000000000, 0.50000000000000000 },
f92ab29f 1868 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1869 4.0000000000000000, 0.60000000000000009 },
f92ab29f 1870 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1871 4.0000000000000000, 0.69999999999999996 },
f92ab29f 1872 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1873 4.0000000000000000, 0.80000000000000004 },
f92ab29f 1874 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943
BK
1875 4.0000000000000000, 0.89999999999999991 },
1876};
1877
1878// Test function for a=0.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
1879template <typename Tp>
1880void test027()
1881{
1882 const Tp eps = std::numeric_limits<Tp>::epsilon();
1883 Tp max_abs_diff = -Tp(1);
1884 Tp max_abs_frac = -Tp(1);
1885 unsigned int num_datum = sizeof(data027)
1886 / sizeof(testcase_hyperg<double>);
1887 for (unsigned int i = 0; i < num_datum; ++i)
1888 {
1889 const Tp f = std::tr1::hyperg(Tp(data027[i].a), Tp(data027[i].b),
1890 Tp(data027[i].c), Tp(data027[i].x));
1891 const Tp f0 = data027[i].f0;
1892 const Tp diff = f - f0;
1893 if (std::abs(diff) > max_abs_diff)
1894 max_abs_diff = std::abs(diff);
1895 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1896 {
1897 const Tp frac = diff / f0;
1898 if (std::abs(frac) > max_abs_frac)
1899 max_abs_frac = std::abs(frac);
1900 }
1901 }
1902 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1903}
1904
1905// Test data for a=0.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
1906testcase_hyperg<double> data028[] = {
f92ab29f 1907 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1908 6.0000000000000000, -0.90000000000000002 },
f92ab29f 1909 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1910 6.0000000000000000, -0.80000000000000004 },
f92ab29f 1911 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1912 6.0000000000000000, -0.69999999999999996 },
f92ab29f 1913 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1914 6.0000000000000000, -0.59999999999999998 },
f92ab29f 1915 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1916 6.0000000000000000, -0.50000000000000000 },
f92ab29f 1917 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1918 6.0000000000000000, -0.40000000000000002 },
f92ab29f 1919 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1920 6.0000000000000000, -0.30000000000000004 },
f92ab29f 1921 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1922 6.0000000000000000, -0.19999999999999996 },
f92ab29f 1923 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1924 6.0000000000000000, -0.099999999999999978 },
f92ab29f 1925 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1926 6.0000000000000000, 0.0000000000000000 },
f92ab29f 1927 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1928 6.0000000000000000, 0.10000000000000009 },
f92ab29f 1929 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1930 6.0000000000000000, 0.19999999999999996 },
f92ab29f 1931 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1932 6.0000000000000000, 0.30000000000000004 },
f92ab29f 1933 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1934 6.0000000000000000, 0.39999999999999991 },
f92ab29f 1935 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1936 6.0000000000000000, 0.50000000000000000 },
f92ab29f 1937 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1938 6.0000000000000000, 0.60000000000000009 },
f92ab29f 1939 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1940 6.0000000000000000, 0.69999999999999996 },
f92ab29f 1941 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1942 6.0000000000000000, 0.80000000000000004 },
f92ab29f 1943 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943
BK
1944 6.0000000000000000, 0.89999999999999991 },
1945};
1946
1947// Test function for a=0.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
1948template <typename Tp>
1949void test028()
1950{
1951 const Tp eps = std::numeric_limits<Tp>::epsilon();
1952 Tp max_abs_diff = -Tp(1);
1953 Tp max_abs_frac = -Tp(1);
1954 unsigned int num_datum = sizeof(data028)
1955 / sizeof(testcase_hyperg<double>);
1956 for (unsigned int i = 0; i < num_datum; ++i)
1957 {
1958 const Tp f = std::tr1::hyperg(Tp(data028[i].a), Tp(data028[i].b),
1959 Tp(data028[i].c), Tp(data028[i].x));
1960 const Tp f0 = data028[i].f0;
1961 const Tp diff = f - f0;
1962 if (std::abs(diff) > max_abs_diff)
1963 max_abs_diff = std::abs(diff);
1964 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
1965 {
1966 const Tp frac = diff / f0;
1967 if (std::abs(frac) > max_abs_frac)
1968 max_abs_frac = std::abs(frac);
1969 }
1970 }
1971 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
1972}
1973
1974// Test data for a=0.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
1975testcase_hyperg<double> data029[] = {
f92ab29f 1976 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1977 8.0000000000000000, -0.90000000000000002 },
f92ab29f 1978 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1979 8.0000000000000000, -0.80000000000000004 },
f92ab29f 1980 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1981 8.0000000000000000, -0.69999999999999996 },
f92ab29f 1982 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1983 8.0000000000000000, -0.59999999999999998 },
f92ab29f 1984 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1985 8.0000000000000000, -0.50000000000000000 },
f92ab29f 1986 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1987 8.0000000000000000, -0.40000000000000002 },
f92ab29f 1988 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1989 8.0000000000000000, -0.30000000000000004 },
f92ab29f 1990 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1991 8.0000000000000000, -0.19999999999999996 },
f92ab29f 1992 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1993 8.0000000000000000, -0.099999999999999978 },
f92ab29f 1994 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1995 8.0000000000000000, 0.0000000000000000 },
f92ab29f 1996 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1997 8.0000000000000000, 0.10000000000000009 },
f92ab29f 1998 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 1999 8.0000000000000000, 0.19999999999999996 },
f92ab29f 2000 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2001 8.0000000000000000, 0.30000000000000004 },
f92ab29f 2002 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2003 8.0000000000000000, 0.39999999999999991 },
f92ab29f 2004 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2005 8.0000000000000000, 0.50000000000000000 },
f92ab29f 2006 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2007 8.0000000000000000, 0.60000000000000009 },
f92ab29f 2008 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2009 8.0000000000000000, 0.69999999999999996 },
f92ab29f 2010 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2011 8.0000000000000000, 0.80000000000000004 },
f92ab29f 2012 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943
BK
2013 8.0000000000000000, 0.89999999999999991 },
2014};
2015
2016// Test function for a=0.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
2017template <typename Tp>
2018void test029()
2019{
2020 const Tp eps = std::numeric_limits<Tp>::epsilon();
2021 Tp max_abs_diff = -Tp(1);
2022 Tp max_abs_frac = -Tp(1);
2023 unsigned int num_datum = sizeof(data029)
2024 / sizeof(testcase_hyperg<double>);
2025 for (unsigned int i = 0; i < num_datum; ++i)
2026 {
2027 const Tp f = std::tr1::hyperg(Tp(data029[i].a), Tp(data029[i].b),
2028 Tp(data029[i].c), Tp(data029[i].x));
2029 const Tp f0 = data029[i].f0;
2030 const Tp diff = f - f0;
2031 if (std::abs(diff) > max_abs_diff)
2032 max_abs_diff = std::abs(diff);
2033 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2034 {
2035 const Tp frac = diff / f0;
2036 if (std::abs(frac) > max_abs_frac)
2037 max_abs_frac = std::abs(frac);
2038 }
2039 }
2040 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2041}
2042
2043// Test data for a=0.0000000000000000, b=10.000000000000000, c=10.000000000000000.
2044testcase_hyperg<double> data030[] = {
f92ab29f 2045 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2046 10.000000000000000, -0.90000000000000002 },
f92ab29f 2047 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2048 10.000000000000000, -0.80000000000000004 },
f92ab29f 2049 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2050 10.000000000000000, -0.69999999999999996 },
f92ab29f 2051 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2052 10.000000000000000, -0.59999999999999998 },
f92ab29f 2053 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2054 10.000000000000000, -0.50000000000000000 },
f92ab29f 2055 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2056 10.000000000000000, -0.40000000000000002 },
f92ab29f 2057 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2058 10.000000000000000, -0.30000000000000004 },
f92ab29f 2059 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2060 10.000000000000000, -0.19999999999999996 },
f92ab29f 2061 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2062 10.000000000000000, -0.099999999999999978 },
f92ab29f 2063 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2064 10.000000000000000, 0.0000000000000000 },
f92ab29f 2065 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2066 10.000000000000000, 0.10000000000000009 },
f92ab29f 2067 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2068 10.000000000000000, 0.19999999999999996 },
f92ab29f 2069 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2070 10.000000000000000, 0.30000000000000004 },
f92ab29f 2071 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2072 10.000000000000000, 0.39999999999999991 },
f92ab29f 2073 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2074 10.000000000000000, 0.50000000000000000 },
f92ab29f 2075 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2076 10.000000000000000, 0.60000000000000009 },
f92ab29f 2077 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2078 10.000000000000000, 0.69999999999999996 },
f92ab29f 2079 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943 2080 10.000000000000000, 0.80000000000000004 },
f92ab29f 2081 { 1.0000000000000000, 0.0000000000000000, 10.000000000000000,
7c62b943
BK
2082 10.000000000000000, 0.89999999999999991 },
2083};
2084
2085// Test function for a=0.0000000000000000, b=10.000000000000000, c=10.000000000000000.
2086template <typename Tp>
2087void test030()
2088{
2089 const Tp eps = std::numeric_limits<Tp>::epsilon();
2090 Tp max_abs_diff = -Tp(1);
2091 Tp max_abs_frac = -Tp(1);
2092 unsigned int num_datum = sizeof(data030)
2093 / sizeof(testcase_hyperg<double>);
2094 for (unsigned int i = 0; i < num_datum; ++i)
2095 {
2096 const Tp f = std::tr1::hyperg(Tp(data030[i].a), Tp(data030[i].b),
2097 Tp(data030[i].c), Tp(data030[i].x));
2098 const Tp f0 = data030[i].f0;
2099 const Tp diff = f - f0;
2100 if (std::abs(diff) > max_abs_diff)
2101 max_abs_diff = std::abs(diff);
2102 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2103 {
2104 const Tp frac = diff / f0;
2105 if (std::abs(frac) > max_abs_frac)
2106 max_abs_frac = std::abs(frac);
2107 }
2108 }
2109 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2110}
2111
2112// Test data for a=0.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
2113testcase_hyperg<double> data031[] = {
f92ab29f 2114 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2115 2.0000000000000000, -0.90000000000000002 },
f92ab29f 2116 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2117 2.0000000000000000, -0.80000000000000004 },
f92ab29f 2118 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2119 2.0000000000000000, -0.69999999999999996 },
f92ab29f 2120 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2121 2.0000000000000000, -0.59999999999999998 },
f92ab29f 2122 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2123 2.0000000000000000, -0.50000000000000000 },
f92ab29f 2124 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2125 2.0000000000000000, -0.40000000000000002 },
f92ab29f 2126 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2127 2.0000000000000000, -0.30000000000000004 },
f92ab29f 2128 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2129 2.0000000000000000, -0.19999999999999996 },
f92ab29f 2130 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2131 2.0000000000000000, -0.099999999999999978 },
f92ab29f 2132 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2133 2.0000000000000000, 0.0000000000000000 },
f92ab29f 2134 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2135 2.0000000000000000, 0.10000000000000009 },
f92ab29f 2136 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2137 2.0000000000000000, 0.19999999999999996 },
f92ab29f 2138 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2139 2.0000000000000000, 0.30000000000000004 },
f92ab29f 2140 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2141 2.0000000000000000, 0.39999999999999991 },
f92ab29f 2142 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2143 2.0000000000000000, 0.50000000000000000 },
f92ab29f 2144 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2145 2.0000000000000000, 0.60000000000000009 },
f92ab29f 2146 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2147 2.0000000000000000, 0.69999999999999996 },
f92ab29f 2148 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2149 2.0000000000000000, 0.80000000000000004 },
f92ab29f 2150 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943
BK
2151 2.0000000000000000, 0.89999999999999991 },
2152};
2153
2154// Test function for a=0.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
2155template <typename Tp>
2156void test031()
2157{
2158 const Tp eps = std::numeric_limits<Tp>::epsilon();
2159 Tp max_abs_diff = -Tp(1);
2160 Tp max_abs_frac = -Tp(1);
2161 unsigned int num_datum = sizeof(data031)
2162 / sizeof(testcase_hyperg<double>);
2163 for (unsigned int i = 0; i < num_datum; ++i)
2164 {
2165 const Tp f = std::tr1::hyperg(Tp(data031[i].a), Tp(data031[i].b),
2166 Tp(data031[i].c), Tp(data031[i].x));
2167 const Tp f0 = data031[i].f0;
2168 const Tp diff = f - f0;
2169 if (std::abs(diff) > max_abs_diff)
2170 max_abs_diff = std::abs(diff);
2171 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2172 {
2173 const Tp frac = diff / f0;
2174 if (std::abs(frac) > max_abs_frac)
2175 max_abs_frac = std::abs(frac);
2176 }
2177 }
2178 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2179}
2180
2181// Test data for a=0.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
2182testcase_hyperg<double> data032[] = {
f92ab29f 2183 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2184 4.0000000000000000, -0.90000000000000002 },
f92ab29f 2185 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2186 4.0000000000000000, -0.80000000000000004 },
f92ab29f 2187 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2188 4.0000000000000000, -0.69999999999999996 },
f92ab29f 2189 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2190 4.0000000000000000, -0.59999999999999998 },
f92ab29f 2191 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2192 4.0000000000000000, -0.50000000000000000 },
f92ab29f 2193 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2194 4.0000000000000000, -0.40000000000000002 },
f92ab29f 2195 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2196 4.0000000000000000, -0.30000000000000004 },
f92ab29f 2197 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2198 4.0000000000000000, -0.19999999999999996 },
f92ab29f 2199 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2200 4.0000000000000000, -0.099999999999999978 },
f92ab29f 2201 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2202 4.0000000000000000, 0.0000000000000000 },
f92ab29f 2203 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2204 4.0000000000000000, 0.10000000000000009 },
f92ab29f 2205 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2206 4.0000000000000000, 0.19999999999999996 },
f92ab29f 2207 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2208 4.0000000000000000, 0.30000000000000004 },
f92ab29f 2209 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2210 4.0000000000000000, 0.39999999999999991 },
f92ab29f 2211 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2212 4.0000000000000000, 0.50000000000000000 },
f92ab29f 2213 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2214 4.0000000000000000, 0.60000000000000009 },
f92ab29f 2215 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2216 4.0000000000000000, 0.69999999999999996 },
f92ab29f 2217 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2218 4.0000000000000000, 0.80000000000000004 },
f92ab29f 2219 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943
BK
2220 4.0000000000000000, 0.89999999999999991 },
2221};
2222
2223// Test function for a=0.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
2224template <typename Tp>
2225void test032()
2226{
2227 const Tp eps = std::numeric_limits<Tp>::epsilon();
2228 Tp max_abs_diff = -Tp(1);
2229 Tp max_abs_frac = -Tp(1);
2230 unsigned int num_datum = sizeof(data032)
2231 / sizeof(testcase_hyperg<double>);
2232 for (unsigned int i = 0; i < num_datum; ++i)
2233 {
2234 const Tp f = std::tr1::hyperg(Tp(data032[i].a), Tp(data032[i].b),
2235 Tp(data032[i].c), Tp(data032[i].x));
2236 const Tp f0 = data032[i].f0;
2237 const Tp diff = f - f0;
2238 if (std::abs(diff) > max_abs_diff)
2239 max_abs_diff = std::abs(diff);
2240 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2241 {
2242 const Tp frac = diff / f0;
2243 if (std::abs(frac) > max_abs_frac)
2244 max_abs_frac = std::abs(frac);
2245 }
2246 }
2247 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2248}
2249
2250// Test data for a=0.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
2251testcase_hyperg<double> data033[] = {
f92ab29f 2252 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2253 6.0000000000000000, -0.90000000000000002 },
f92ab29f 2254 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2255 6.0000000000000000, -0.80000000000000004 },
f92ab29f 2256 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2257 6.0000000000000000, -0.69999999999999996 },
f92ab29f 2258 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2259 6.0000000000000000, -0.59999999999999998 },
f92ab29f 2260 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2261 6.0000000000000000, -0.50000000000000000 },
f92ab29f 2262 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2263 6.0000000000000000, -0.40000000000000002 },
f92ab29f 2264 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2265 6.0000000000000000, -0.30000000000000004 },
f92ab29f 2266 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2267 6.0000000000000000, -0.19999999999999996 },
f92ab29f 2268 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2269 6.0000000000000000, -0.099999999999999978 },
f92ab29f 2270 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2271 6.0000000000000000, 0.0000000000000000 },
f92ab29f 2272 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2273 6.0000000000000000, 0.10000000000000009 },
f92ab29f 2274 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2275 6.0000000000000000, 0.19999999999999996 },
f92ab29f 2276 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2277 6.0000000000000000, 0.30000000000000004 },
f92ab29f 2278 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2279 6.0000000000000000, 0.39999999999999991 },
f92ab29f 2280 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2281 6.0000000000000000, 0.50000000000000000 },
f92ab29f 2282 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2283 6.0000000000000000, 0.60000000000000009 },
f92ab29f 2284 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2285 6.0000000000000000, 0.69999999999999996 },
f92ab29f 2286 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2287 6.0000000000000000, 0.80000000000000004 },
f92ab29f 2288 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943
BK
2289 6.0000000000000000, 0.89999999999999991 },
2290};
2291
2292// Test function for a=0.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
2293template <typename Tp>
2294void test033()
2295{
2296 const Tp eps = std::numeric_limits<Tp>::epsilon();
2297 Tp max_abs_diff = -Tp(1);
2298 Tp max_abs_frac = -Tp(1);
2299 unsigned int num_datum = sizeof(data033)
2300 / sizeof(testcase_hyperg<double>);
2301 for (unsigned int i = 0; i < num_datum; ++i)
2302 {
2303 const Tp f = std::tr1::hyperg(Tp(data033[i].a), Tp(data033[i].b),
2304 Tp(data033[i].c), Tp(data033[i].x));
2305 const Tp f0 = data033[i].f0;
2306 const Tp diff = f - f0;
2307 if (std::abs(diff) > max_abs_diff)
2308 max_abs_diff = std::abs(diff);
2309 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2310 {
2311 const Tp frac = diff / f0;
2312 if (std::abs(frac) > max_abs_frac)
2313 max_abs_frac = std::abs(frac);
2314 }
2315 }
2316 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2317}
2318
2319// Test data for a=0.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
2320testcase_hyperg<double> data034[] = {
f92ab29f 2321 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2322 8.0000000000000000, -0.90000000000000002 },
f92ab29f 2323 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2324 8.0000000000000000, -0.80000000000000004 },
f92ab29f 2325 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2326 8.0000000000000000, -0.69999999999999996 },
f92ab29f 2327 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2328 8.0000000000000000, -0.59999999999999998 },
f92ab29f 2329 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2330 8.0000000000000000, -0.50000000000000000 },
f92ab29f 2331 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2332 8.0000000000000000, -0.40000000000000002 },
f92ab29f 2333 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2334 8.0000000000000000, -0.30000000000000004 },
f92ab29f 2335 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2336 8.0000000000000000, -0.19999999999999996 },
f92ab29f 2337 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2338 8.0000000000000000, -0.099999999999999978 },
f92ab29f 2339 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2340 8.0000000000000000, 0.0000000000000000 },
f92ab29f 2341 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2342 8.0000000000000000, 0.10000000000000009 },
f92ab29f 2343 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2344 8.0000000000000000, 0.19999999999999996 },
f92ab29f 2345 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2346 8.0000000000000000, 0.30000000000000004 },
f92ab29f 2347 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2348 8.0000000000000000, 0.39999999999999991 },
f92ab29f 2349 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2350 8.0000000000000000, 0.50000000000000000 },
f92ab29f 2351 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2352 8.0000000000000000, 0.60000000000000009 },
f92ab29f 2353 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2354 8.0000000000000000, 0.69999999999999996 },
f92ab29f 2355 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2356 8.0000000000000000, 0.80000000000000004 },
f92ab29f 2357 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943
BK
2358 8.0000000000000000, 0.89999999999999991 },
2359};
2360
2361// Test function for a=0.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
2362template <typename Tp>
2363void test034()
2364{
2365 const Tp eps = std::numeric_limits<Tp>::epsilon();
2366 Tp max_abs_diff = -Tp(1);
2367 Tp max_abs_frac = -Tp(1);
2368 unsigned int num_datum = sizeof(data034)
2369 / sizeof(testcase_hyperg<double>);
2370 for (unsigned int i = 0; i < num_datum; ++i)
2371 {
2372 const Tp f = std::tr1::hyperg(Tp(data034[i].a), Tp(data034[i].b),
2373 Tp(data034[i].c), Tp(data034[i].x));
2374 const Tp f0 = data034[i].f0;
2375 const Tp diff = f - f0;
2376 if (std::abs(diff) > max_abs_diff)
2377 max_abs_diff = std::abs(diff);
2378 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2379 {
2380 const Tp frac = diff / f0;
2381 if (std::abs(frac) > max_abs_frac)
2382 max_abs_frac = std::abs(frac);
2383 }
2384 }
2385 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2386}
2387
2388// Test data for a=0.0000000000000000, b=20.000000000000000, c=10.000000000000000.
2389testcase_hyperg<double> data035[] = {
f92ab29f 2390 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2391 10.000000000000000, -0.90000000000000002 },
f92ab29f 2392 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2393 10.000000000000000, -0.80000000000000004 },
f92ab29f 2394 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2395 10.000000000000000, -0.69999999999999996 },
f92ab29f 2396 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2397 10.000000000000000, -0.59999999999999998 },
f92ab29f 2398 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2399 10.000000000000000, -0.50000000000000000 },
f92ab29f 2400 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2401 10.000000000000000, -0.40000000000000002 },
f92ab29f 2402 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2403 10.000000000000000, -0.30000000000000004 },
f92ab29f 2404 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2405 10.000000000000000, -0.19999999999999996 },
f92ab29f 2406 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2407 10.000000000000000, -0.099999999999999978 },
f92ab29f 2408 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2409 10.000000000000000, 0.0000000000000000 },
f92ab29f 2410 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2411 10.000000000000000, 0.10000000000000009 },
f92ab29f 2412 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2413 10.000000000000000, 0.19999999999999996 },
f92ab29f 2414 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2415 10.000000000000000, 0.30000000000000004 },
f92ab29f 2416 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2417 10.000000000000000, 0.39999999999999991 },
f92ab29f 2418 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2419 10.000000000000000, 0.50000000000000000 },
f92ab29f 2420 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2421 10.000000000000000, 0.60000000000000009 },
f92ab29f 2422 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2423 10.000000000000000, 0.69999999999999996 },
f92ab29f 2424 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943 2425 10.000000000000000, 0.80000000000000004 },
f92ab29f 2426 { 1.0000000000000000, 0.0000000000000000, 20.000000000000000,
7c62b943
BK
2427 10.000000000000000, 0.89999999999999991 },
2428};
2429
2430// Test function for a=0.0000000000000000, b=20.000000000000000, c=10.000000000000000.
2431template <typename Tp>
2432void test035()
2433{
2434 const Tp eps = std::numeric_limits<Tp>::epsilon();
2435 Tp max_abs_diff = -Tp(1);
2436 Tp max_abs_frac = -Tp(1);
2437 unsigned int num_datum = sizeof(data035)
2438 / sizeof(testcase_hyperg<double>);
2439 for (unsigned int i = 0; i < num_datum; ++i)
2440 {
2441 const Tp f = std::tr1::hyperg(Tp(data035[i].a), Tp(data035[i].b),
2442 Tp(data035[i].c), Tp(data035[i].x));
2443 const Tp f0 = data035[i].f0;
2444 const Tp diff = f - f0;
2445 if (std::abs(diff) > max_abs_diff)
2446 max_abs_diff = std::abs(diff);
2447 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2448 {
2449 const Tp frac = diff / f0;
2450 if (std::abs(frac) > max_abs_frac)
2451 max_abs_frac = std::abs(frac);
2452 }
2453 }
2454 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2455}
2456
2457// Test data for a=0.50000000000000000, b=0.0000000000000000, c=2.0000000000000000.
2458testcase_hyperg<double> data036[] = {
f92ab29f 2459 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2460 2.0000000000000000, -0.90000000000000002 },
f92ab29f 2461 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2462 2.0000000000000000, -0.80000000000000004 },
f92ab29f 2463 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2464 2.0000000000000000, -0.69999999999999996 },
f92ab29f 2465 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2466 2.0000000000000000, -0.59999999999999998 },
f92ab29f 2467 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2468 2.0000000000000000, -0.50000000000000000 },
f92ab29f 2469 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2470 2.0000000000000000, -0.40000000000000002 },
f92ab29f 2471 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2472 2.0000000000000000, -0.30000000000000004 },
f92ab29f 2473 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2474 2.0000000000000000, -0.19999999999999996 },
f92ab29f 2475 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2476 2.0000000000000000, -0.099999999999999978 },
f92ab29f 2477 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2478 2.0000000000000000, 0.0000000000000000 },
f92ab29f 2479 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2480 2.0000000000000000, 0.10000000000000009 },
f92ab29f 2481 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2482 2.0000000000000000, 0.19999999999999996 },
f92ab29f 2483 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2484 2.0000000000000000, 0.30000000000000004 },
f92ab29f 2485 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2486 2.0000000000000000, 0.39999999999999991 },
f92ab29f 2487 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2488 2.0000000000000000, 0.50000000000000000 },
f92ab29f 2489 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2490 2.0000000000000000, 0.60000000000000009 },
f92ab29f 2491 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2492 2.0000000000000000, 0.69999999999999996 },
f92ab29f 2493 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2494 2.0000000000000000, 0.80000000000000004 },
f92ab29f 2495 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943
BK
2496 2.0000000000000000, 0.89999999999999991 },
2497};
2498
2499// Test function for a=0.50000000000000000, b=0.0000000000000000, c=2.0000000000000000.
2500template <typename Tp>
2501void test036()
2502{
2503 const Tp eps = std::numeric_limits<Tp>::epsilon();
2504 Tp max_abs_diff = -Tp(1);
2505 Tp max_abs_frac = -Tp(1);
2506 unsigned int num_datum = sizeof(data036)
2507 / sizeof(testcase_hyperg<double>);
2508 for (unsigned int i = 0; i < num_datum; ++i)
2509 {
2510 const Tp f = std::tr1::hyperg(Tp(data036[i].a), Tp(data036[i].b),
2511 Tp(data036[i].c), Tp(data036[i].x));
2512 const Tp f0 = data036[i].f0;
2513 const Tp diff = f - f0;
2514 if (std::abs(diff) > max_abs_diff)
2515 max_abs_diff = std::abs(diff);
2516 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2517 {
2518 const Tp frac = diff / f0;
2519 if (std::abs(frac) > max_abs_frac)
2520 max_abs_frac = std::abs(frac);
2521 }
2522 }
2523 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2524}
2525
2526// Test data for a=0.50000000000000000, b=0.0000000000000000, c=4.0000000000000000.
2527testcase_hyperg<double> data037[] = {
f92ab29f 2528 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2529 4.0000000000000000, -0.90000000000000002 },
f92ab29f 2530 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2531 4.0000000000000000, -0.80000000000000004 },
f92ab29f 2532 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2533 4.0000000000000000, -0.69999999999999996 },
f92ab29f 2534 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2535 4.0000000000000000, -0.59999999999999998 },
f92ab29f 2536 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2537 4.0000000000000000, -0.50000000000000000 },
f92ab29f 2538 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2539 4.0000000000000000, -0.40000000000000002 },
f92ab29f 2540 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2541 4.0000000000000000, -0.30000000000000004 },
f92ab29f 2542 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2543 4.0000000000000000, -0.19999999999999996 },
f92ab29f 2544 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2545 4.0000000000000000, -0.099999999999999978 },
f92ab29f 2546 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2547 4.0000000000000000, 0.0000000000000000 },
f92ab29f 2548 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2549 4.0000000000000000, 0.10000000000000009 },
f92ab29f 2550 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2551 4.0000000000000000, 0.19999999999999996 },
f92ab29f 2552 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2553 4.0000000000000000, 0.30000000000000004 },
f92ab29f 2554 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2555 4.0000000000000000, 0.39999999999999991 },
f92ab29f 2556 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2557 4.0000000000000000, 0.50000000000000000 },
f92ab29f 2558 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2559 4.0000000000000000, 0.60000000000000009 },
f92ab29f 2560 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2561 4.0000000000000000, 0.69999999999999996 },
f92ab29f 2562 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2563 4.0000000000000000, 0.80000000000000004 },
f92ab29f 2564 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943
BK
2565 4.0000000000000000, 0.89999999999999991 },
2566};
2567
2568// Test function for a=0.50000000000000000, b=0.0000000000000000, c=4.0000000000000000.
2569template <typename Tp>
2570void test037()
2571{
2572 const Tp eps = std::numeric_limits<Tp>::epsilon();
2573 Tp max_abs_diff = -Tp(1);
2574 Tp max_abs_frac = -Tp(1);
2575 unsigned int num_datum = sizeof(data037)
2576 / sizeof(testcase_hyperg<double>);
2577 for (unsigned int i = 0; i < num_datum; ++i)
2578 {
2579 const Tp f = std::tr1::hyperg(Tp(data037[i].a), Tp(data037[i].b),
2580 Tp(data037[i].c), Tp(data037[i].x));
2581 const Tp f0 = data037[i].f0;
2582 const Tp diff = f - f0;
2583 if (std::abs(diff) > max_abs_diff)
2584 max_abs_diff = std::abs(diff);
2585 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2586 {
2587 const Tp frac = diff / f0;
2588 if (std::abs(frac) > max_abs_frac)
2589 max_abs_frac = std::abs(frac);
2590 }
2591 }
2592 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2593}
2594
2595// Test data for a=0.50000000000000000, b=0.0000000000000000, c=6.0000000000000000.
2596testcase_hyperg<double> data038[] = {
f92ab29f 2597 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2598 6.0000000000000000, -0.90000000000000002 },
f92ab29f 2599 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2600 6.0000000000000000, -0.80000000000000004 },
f92ab29f 2601 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2602 6.0000000000000000, -0.69999999999999996 },
f92ab29f 2603 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2604 6.0000000000000000, -0.59999999999999998 },
f92ab29f 2605 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2606 6.0000000000000000, -0.50000000000000000 },
f92ab29f 2607 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2608 6.0000000000000000, -0.40000000000000002 },
f92ab29f 2609 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2610 6.0000000000000000, -0.30000000000000004 },
f92ab29f 2611 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2612 6.0000000000000000, -0.19999999999999996 },
f92ab29f 2613 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2614 6.0000000000000000, -0.099999999999999978 },
f92ab29f 2615 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2616 6.0000000000000000, 0.0000000000000000 },
f92ab29f 2617 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2618 6.0000000000000000, 0.10000000000000009 },
f92ab29f 2619 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2620 6.0000000000000000, 0.19999999999999996 },
f92ab29f 2621 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2622 6.0000000000000000, 0.30000000000000004 },
f92ab29f 2623 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2624 6.0000000000000000, 0.39999999999999991 },
f92ab29f 2625 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2626 6.0000000000000000, 0.50000000000000000 },
f92ab29f 2627 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2628 6.0000000000000000, 0.60000000000000009 },
f92ab29f 2629 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2630 6.0000000000000000, 0.69999999999999996 },
f92ab29f 2631 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2632 6.0000000000000000, 0.80000000000000004 },
f92ab29f 2633 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943
BK
2634 6.0000000000000000, 0.89999999999999991 },
2635};
2636
2637// Test function for a=0.50000000000000000, b=0.0000000000000000, c=6.0000000000000000.
2638template <typename Tp>
2639void test038()
2640{
2641 const Tp eps = std::numeric_limits<Tp>::epsilon();
2642 Tp max_abs_diff = -Tp(1);
2643 Tp max_abs_frac = -Tp(1);
2644 unsigned int num_datum = sizeof(data038)
2645 / sizeof(testcase_hyperg<double>);
2646 for (unsigned int i = 0; i < num_datum; ++i)
2647 {
2648 const Tp f = std::tr1::hyperg(Tp(data038[i].a), Tp(data038[i].b),
2649 Tp(data038[i].c), Tp(data038[i].x));
2650 const Tp f0 = data038[i].f0;
2651 const Tp diff = f - f0;
2652 if (std::abs(diff) > max_abs_diff)
2653 max_abs_diff = std::abs(diff);
2654 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2655 {
2656 const Tp frac = diff / f0;
2657 if (std::abs(frac) > max_abs_frac)
2658 max_abs_frac = std::abs(frac);
2659 }
2660 }
2661 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2662}
2663
2664// Test data for a=0.50000000000000000, b=0.0000000000000000, c=8.0000000000000000.
2665testcase_hyperg<double> data039[] = {
f92ab29f 2666 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2667 8.0000000000000000, -0.90000000000000002 },
f92ab29f 2668 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2669 8.0000000000000000, -0.80000000000000004 },
f92ab29f 2670 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2671 8.0000000000000000, -0.69999999999999996 },
f92ab29f 2672 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2673 8.0000000000000000, -0.59999999999999998 },
f92ab29f 2674 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2675 8.0000000000000000, -0.50000000000000000 },
f92ab29f 2676 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2677 8.0000000000000000, -0.40000000000000002 },
f92ab29f 2678 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2679 8.0000000000000000, -0.30000000000000004 },
f92ab29f 2680 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2681 8.0000000000000000, -0.19999999999999996 },
f92ab29f 2682 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2683 8.0000000000000000, -0.099999999999999978 },
f92ab29f 2684 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2685 8.0000000000000000, 0.0000000000000000 },
f92ab29f 2686 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2687 8.0000000000000000, 0.10000000000000009 },
f92ab29f 2688 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2689 8.0000000000000000, 0.19999999999999996 },
f92ab29f 2690 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2691 8.0000000000000000, 0.30000000000000004 },
f92ab29f 2692 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2693 8.0000000000000000, 0.39999999999999991 },
f92ab29f 2694 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2695 8.0000000000000000, 0.50000000000000000 },
f92ab29f 2696 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2697 8.0000000000000000, 0.60000000000000009 },
f92ab29f 2698 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2699 8.0000000000000000, 0.69999999999999996 },
f92ab29f 2700 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2701 8.0000000000000000, 0.80000000000000004 },
f92ab29f 2702 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943
BK
2703 8.0000000000000000, 0.89999999999999991 },
2704};
2705
2706// Test function for a=0.50000000000000000, b=0.0000000000000000, c=8.0000000000000000.
2707template <typename Tp>
2708void test039()
2709{
2710 const Tp eps = std::numeric_limits<Tp>::epsilon();
2711 Tp max_abs_diff = -Tp(1);
2712 Tp max_abs_frac = -Tp(1);
2713 unsigned int num_datum = sizeof(data039)
2714 / sizeof(testcase_hyperg<double>);
2715 for (unsigned int i = 0; i < num_datum; ++i)
2716 {
2717 const Tp f = std::tr1::hyperg(Tp(data039[i].a), Tp(data039[i].b),
2718 Tp(data039[i].c), Tp(data039[i].x));
2719 const Tp f0 = data039[i].f0;
2720 const Tp diff = f - f0;
2721 if (std::abs(diff) > max_abs_diff)
2722 max_abs_diff = std::abs(diff);
2723 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2724 {
2725 const Tp frac = diff / f0;
2726 if (std::abs(frac) > max_abs_frac)
2727 max_abs_frac = std::abs(frac);
2728 }
2729 }
2730 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2731}
2732
2733// Test data for a=0.50000000000000000, b=0.0000000000000000, c=10.000000000000000.
2734testcase_hyperg<double> data040[] = {
f92ab29f 2735 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2736 10.000000000000000, -0.90000000000000002 },
f92ab29f 2737 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2738 10.000000000000000, -0.80000000000000004 },
f92ab29f 2739 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2740 10.000000000000000, -0.69999999999999996 },
f92ab29f 2741 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2742 10.000000000000000, -0.59999999999999998 },
f92ab29f 2743 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2744 10.000000000000000, -0.50000000000000000 },
f92ab29f 2745 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2746 10.000000000000000, -0.40000000000000002 },
f92ab29f 2747 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2748 10.000000000000000, -0.30000000000000004 },
f92ab29f 2749 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2750 10.000000000000000, -0.19999999999999996 },
f92ab29f 2751 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2752 10.000000000000000, -0.099999999999999978 },
f92ab29f 2753 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2754 10.000000000000000, 0.0000000000000000 },
f92ab29f 2755 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2756 10.000000000000000, 0.10000000000000009 },
f92ab29f 2757 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2758 10.000000000000000, 0.19999999999999996 },
f92ab29f 2759 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2760 10.000000000000000, 0.30000000000000004 },
f92ab29f 2761 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2762 10.000000000000000, 0.39999999999999991 },
f92ab29f 2763 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2764 10.000000000000000, 0.50000000000000000 },
f92ab29f 2765 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2766 10.000000000000000, 0.60000000000000009 },
f92ab29f 2767 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2768 10.000000000000000, 0.69999999999999996 },
f92ab29f 2769 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943 2770 10.000000000000000, 0.80000000000000004 },
f92ab29f 2771 { 1.0000000000000000, 0.50000000000000000, 0.0000000000000000,
7c62b943
BK
2772 10.000000000000000, 0.89999999999999991 },
2773};
2774
2775// Test function for a=0.50000000000000000, b=0.0000000000000000, c=10.000000000000000.
2776template <typename Tp>
2777void test040()
2778{
2779 const Tp eps = std::numeric_limits<Tp>::epsilon();
2780 Tp max_abs_diff = -Tp(1);
2781 Tp max_abs_frac = -Tp(1);
2782 unsigned int num_datum = sizeof(data040)
2783 / sizeof(testcase_hyperg<double>);
2784 for (unsigned int i = 0; i < num_datum; ++i)
2785 {
2786 const Tp f = std::tr1::hyperg(Tp(data040[i].a), Tp(data040[i].b),
2787 Tp(data040[i].c), Tp(data040[i].x));
2788 const Tp f0 = data040[i].f0;
2789 const Tp diff = f - f0;
2790 if (std::abs(diff) > max_abs_diff)
2791 max_abs_diff = std::abs(diff);
2792 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2793 {
2794 const Tp frac = diff / f0;
2795 if (std::abs(frac) > max_abs_frac)
2796 max_abs_frac = std::abs(frac);
2797 }
2798 }
2799 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2800}
2801
2802// Test data for a=0.50000000000000000, b=0.50000000000000000, c=2.0000000000000000.
2803testcase_hyperg<double> data041[] = {
f92ab29f 2804 { 0.91383715388743758, 0.50000000000000000, 0.50000000000000000,
7c62b943 2805 2.0000000000000000, -0.90000000000000002 },
f92ab29f 2806 { 0.92151232618202283, 0.50000000000000000, 0.50000000000000000,
7c62b943 2807 2.0000000000000000, -0.80000000000000004 },
f92ab29f 2808 { 0.92955086110354823, 0.50000000000000000, 0.50000000000000000,
7c62b943 2809 2.0000000000000000, -0.69999999999999996 },
f92ab29f 2810 { 0.93798900119104844, 0.50000000000000000, 0.50000000000000000,
7c62b943 2811 2.0000000000000000, -0.59999999999999998 },
f92ab29f 2812 { 0.94686887307107304, 0.50000000000000000, 0.50000000000000000,
7c62b943 2813 2.0000000000000000, -0.50000000000000000 },
f92ab29f 2814 { 0.95623987262143295, 0.50000000000000000, 0.50000000000000000,
7c62b943 2815 2.0000000000000000, -0.40000000000000002 },
f92ab29f 2816 { 0.96616049387450154, 0.50000000000000000, 0.50000000000000000,
7c62b943 2817 2.0000000000000000, -0.30000000000000004 },
f92ab29f 2818 { 0.97670078782187519, 0.50000000000000000, 0.50000000000000000,
7c62b943 2819 2.0000000000000000, -0.19999999999999996 },
f92ab29f 2820 { 0.98794573712298384, 0.50000000000000000, 0.50000000000000000,
7c62b943 2821 2.0000000000000000, -0.099999999999999978 },
f92ab29f 2822 { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
7c62b943 2823 2.0000000000000000, 0.0000000000000000 },
f92ab29f 2824 { 1.0129947682256604, 0.50000000000000000, 0.50000000000000000,
7c62b943 2825 2.0000000000000000, 0.10000000000000009 },
f92ab29f 2826 { 1.0270980168168973, 0.50000000000000000, 0.50000000000000000,
7c62b943 2827 2.0000000000000000, 0.19999999999999996 },
f92ab29f 2828 { 1.0425304520063581, 0.50000000000000000, 0.50000000000000000,
7c62b943 2829 2.0000000000000000, 0.30000000000000004 },
f92ab29f 2830 { 1.0595915916161471, 0.50000000000000000, 0.50000000000000000,
7c62b943 2831 2.0000000000000000, 0.39999999999999991 },
f92ab29f 2832 { 1.0787052023767585, 0.50000000000000000, 0.50000000000000000,
7c62b943 2833 2.0000000000000000, 0.50000000000000000 },
f92ab29f 2834 { 1.1005053642285867, 0.50000000000000000, 0.50000000000000000,
7c62b943 2835 2.0000000000000000, 0.60000000000000009 },
f92ab29f 2836 { 1.1260196351148746, 0.50000000000000000, 0.50000000000000000,
7c62b943 2837 2.0000000000000000, 0.69999999999999996 },
f92ab29f 2838 { 1.1571341977338991, 0.50000000000000000, 0.50000000000000000,
7c62b943 2839 2.0000000000000000, 0.80000000000000004 },
f92ab29f 2840 { 1.1982111053717450, 0.50000000000000000, 0.50000000000000000,
7c62b943
BK
2841 2.0000000000000000, 0.89999999999999991 },
2842};
2843
2844// Test function for a=0.50000000000000000, b=0.50000000000000000, c=2.0000000000000000.
2845template <typename Tp>
2846void test041()
2847{
2848 const Tp eps = std::numeric_limits<Tp>::epsilon();
2849 Tp max_abs_diff = -Tp(1);
2850 Tp max_abs_frac = -Tp(1);
2851 unsigned int num_datum = sizeof(data041)
2852 / sizeof(testcase_hyperg<double>);
2853 for (unsigned int i = 0; i < num_datum; ++i)
2854 {
2855 const Tp f = std::tr1::hyperg(Tp(data041[i].a), Tp(data041[i].b),
2856 Tp(data041[i].c), Tp(data041[i].x));
2857 const Tp f0 = data041[i].f0;
2858 const Tp diff = f - f0;
2859 if (std::abs(diff) > max_abs_diff)
2860 max_abs_diff = std::abs(diff);
2861 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2862 {
2863 const Tp frac = diff / f0;
2864 if (std::abs(frac) > max_abs_frac)
2865 max_abs_frac = std::abs(frac);
2866 }
2867 }
2868 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2869}
2870
2871// Test data for a=0.50000000000000000, b=0.50000000000000000, c=4.0000000000000000.
2872testcase_hyperg<double> data042[] = {
f92ab29f 2873 { 0.95255425675562733, 0.50000000000000000, 0.50000000000000000,
7c62b943 2874 4.0000000000000000, -0.90000000000000002 },
f92ab29f 2875 { 0.95712841850078245, 0.50000000000000000, 0.50000000000000000,
7c62b943 2876 4.0000000000000000, -0.80000000000000004 },
f92ab29f 2877 { 0.96184734120034532, 0.50000000000000000, 0.50000000000000000,
7c62b943 2878 4.0000000000000000, -0.69999999999999996 },
f92ab29f 2879 { 0.96672141255196242, 0.50000000000000000, 0.50000000000000000,
7c62b943 2880 4.0000000000000000, -0.59999999999999998 },
f92ab29f 2881 { 0.97176228710138646, 0.50000000000000000, 0.50000000000000000,
7c62b943 2882 4.0000000000000000, -0.50000000000000000 },
f92ab29f 2883 { 0.97698311668286286, 0.50000000000000000, 0.50000000000000000,
7c62b943 2884 4.0000000000000000, -0.40000000000000002 },
f92ab29f 2885 { 0.98239883902556069, 0.50000000000000000, 0.50000000000000000,
7c62b943 2886 4.0000000000000000, -0.30000000000000004 },
f92ab29f 2887 { 0.98802654401961032, 0.50000000000000000, 0.50000000000000000,
7c62b943 2888 4.0000000000000000, -0.19999999999999996 },
f92ab29f 2889 { 0.99388594556732701, 0.50000000000000000, 0.50000000000000000,
7c62b943 2890 4.0000000000000000, -0.099999999999999978 },
f92ab29f 2891 { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
7c62b943 2892 4.0000000000000000, 0.0000000000000000 },
f92ab29f 2893 { 1.0063957328951061, 0.50000000000000000, 0.50000000000000000,
7c62b943 2894 4.0000000000000000, 0.10000000000000009 },
f92ab29f 2895 { 1.0131053706824598, 0.50000000000000000, 0.50000000000000000,
7c62b943 2896 4.0000000000000000, 0.19999999999999996 },
f92ab29f 2897 { 1.0201679332118803, 0.50000000000000000, 0.50000000000000000,
7c62b943 2898 4.0000000000000000, 0.30000000000000004 },
f92ab29f 2899 { 1.0276315524377497, 0.50000000000000000, 0.50000000000000000,
7c62b943 2900 4.0000000000000000, 0.39999999999999991 },
f92ab29f 2901 { 1.0355569942816882, 0.50000000000000000, 0.50000000000000000,
7c62b943 2902 4.0000000000000000, 0.50000000000000000 },
f92ab29f 2903 { 1.0440233080381554, 0.50000000000000000, 0.50000000000000000,
7c62b943 2904 4.0000000000000000, 0.60000000000000009 },
f92ab29f 2905 { 1.0531375808028993, 0.50000000000000000, 0.50000000000000000,
7c62b943 2906 4.0000000000000000, 0.69999999999999996 },
f92ab29f 2907 { 1.0630536689840200, 0.50000000000000000, 0.50000000000000000,
7c62b943 2908 4.0000000000000000, 0.80000000000000004 },
f92ab29f 2909 { 1.0740149570414563, 0.50000000000000000, 0.50000000000000000,
7c62b943
BK
2910 4.0000000000000000, 0.89999999999999991 },
2911};
2912
2913// Test function for a=0.50000000000000000, b=0.50000000000000000, c=4.0000000000000000.
2914template <typename Tp>
2915void test042()
2916{
2917 const Tp eps = std::numeric_limits<Tp>::epsilon();
2918 Tp max_abs_diff = -Tp(1);
2919 Tp max_abs_frac = -Tp(1);
2920 unsigned int num_datum = sizeof(data042)
2921 / sizeof(testcase_hyperg<double>);
2922 for (unsigned int i = 0; i < num_datum; ++i)
2923 {
2924 const Tp f = std::tr1::hyperg(Tp(data042[i].a), Tp(data042[i].b),
2925 Tp(data042[i].c), Tp(data042[i].x));
2926 const Tp f0 = data042[i].f0;
2927 const Tp diff = f - f0;
2928 if (std::abs(diff) > max_abs_diff)
2929 max_abs_diff = std::abs(diff);
2930 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
2931 {
2932 const Tp frac = diff / f0;
2933 if (std::abs(frac) > max_abs_frac)
2934 max_abs_frac = std::abs(frac);
2935 }
2936 }
2937 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
2938}
2939
2940// Test data for a=0.50000000000000000, b=0.50000000000000000, c=6.0000000000000000.
2941testcase_hyperg<double> data043[] = {
f92ab29f 2942 { 0.96694084713323891, 0.50000000000000000, 0.50000000000000000,
7c62b943 2943 6.0000000000000000, -0.90000000000000002 },
f92ab29f 2944 { 0.97024454918852587, 0.50000000000000000, 0.50000000000000000,
7c62b943 2945 6.0000000000000000, -0.80000000000000004 },
f92ab29f 2946 { 0.97362815600391461, 0.50000000000000000, 0.50000000000000000,
7c62b943 2947 6.0000000000000000, -0.69999999999999996 },
f92ab29f 2948 { 0.97709622064205115, 0.50000000000000000, 0.50000000000000000,
7c62b943 2949 6.0000000000000000, -0.59999999999999998 },
f92ab29f 2950 { 0.98065374770570624, 0.50000000000000000, 0.50000000000000000,
7c62b943 2951 6.0000000000000000, -0.50000000000000000 },
f92ab29f 2952 { 0.98430626119885489, 0.50000000000000000, 0.50000000000000000,
7c62b943 2953 6.0000000000000000, -0.40000000000000002 },
f92ab29f 2954 { 0.98805988669621037, 0.50000000000000000, 0.50000000000000000,
7c62b943 2955 6.0000000000000000, -0.30000000000000004 },
f92ab29f 2956 { 0.99192145185739655, 0.50000000000000000, 0.50000000000000000,
7c62b943 2957 6.0000000000000000, -0.19999999999999996 },
f92ab29f 2958 { 0.99589861079880937, 0.50000000000000000, 0.50000000000000000,
7c62b943 2959 6.0000000000000000, -0.099999999999999978 },
f92ab29f 2960 { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
7c62b943 2961 6.0000000000000000, 0.0000000000000000 },
f92ab29f 2962 { 1.0042354366729904, 0.50000000000000000, 0.50000000000000000,
7c62b943 2963 6.0000000000000000, 0.10000000000000009 },
f92ab29f 2964 { 1.0086161755545404, 0.50000000000000000, 0.50000000000000000,
7c62b943 2965 6.0000000000000000, 0.19999999999999996 },
f92ab29f 2966 { 1.0131552481403503, 0.50000000000000000, 0.50000000000000000,
7c62b943 2967 6.0000000000000000, 0.30000000000000004 },
f92ab29f 2968 { 1.0178679218284707, 0.50000000000000000, 0.50000000000000000,
7c62b943 2969 6.0000000000000000, 0.39999999999999991 },
f92ab29f 2970 { 1.0227723400312978, 0.50000000000000000, 0.50000000000000000,
7c62b943 2971 6.0000000000000000, 0.50000000000000000 },
f92ab29f 2972 { 1.0278904483717863, 0.50000000000000000, 0.50000000000000000,
7c62b943 2973 6.0000000000000000, 0.60000000000000009 },
f92ab29f 2974 { 1.0332494012993472, 0.50000000000000000, 0.50000000000000000,
7c62b943 2975 6.0000000000000000, 0.69999999999999996 },
f92ab29f 2976 { 1.0388838453357794, 0.50000000000000000, 0.50000000000000000,
7c62b943 2977 6.0000000000000000, 0.80000000000000004 },
f92ab29f 2978 { 1.0448400142331342, 0.50000000000000000, 0.50000000000000000,
7c62b943
BK
2979 6.0000000000000000, 0.89999999999999991 },
2980};
2981
2982// Test function for a=0.50000000000000000, b=0.50000000000000000, c=6.0000000000000000.
2983template <typename Tp>
2984void test043()
2985{
2986 const Tp eps = std::numeric_limits<Tp>::epsilon();
2987 Tp max_abs_diff = -Tp(1);
2988 Tp max_abs_frac = -Tp(1);
2989 unsigned int num_datum = sizeof(data043)
2990 / sizeof(testcase_hyperg<double>);
2991 for (unsigned int i = 0; i < num_datum; ++i)
2992 {
2993 const Tp f = std::tr1::hyperg(Tp(data043[i].a), Tp(data043[i].b),
2994 Tp(data043[i].c), Tp(data043[i].x));
2995 const Tp f0 = data043[i].f0;
2996 const Tp diff = f - f0;
2997 if (std::abs(diff) > max_abs_diff)
2998 max_abs_diff = std::abs(diff);
2999 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3000 {
3001 const Tp frac = diff / f0;
3002 if (std::abs(frac) > max_abs_frac)
3003 max_abs_frac = std::abs(frac);
3004 }
3005 }
3006 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3007}
3008
3009// Test data for a=0.50000000000000000, b=0.50000000000000000, c=8.0000000000000000.
3010testcase_hyperg<double> data044[] = {
f92ab29f 3011 { 0.97456073259047449, 0.50000000000000000, 0.50000000000000000,
7c62b943 3012 8.0000000000000000, -0.90000000000000002 },
f92ab29f 3013 { 0.97715689327833344, 0.50000000000000000, 0.50000000000000000,
7c62b943 3014 8.0000000000000000, -0.80000000000000004 },
f92ab29f 3015 { 0.97980416868943099, 0.50000000000000000, 0.50000000000000000,
7c62b943 3016 8.0000000000000000, -0.69999999999999996 },
f92ab29f 3017 { 0.98250498942832509, 0.50000000000000000, 0.50000000000000000,
7c62b943 3018 8.0000000000000000, -0.59999999999999998 },
f92ab29f 3019 { 0.98526199049760832, 0.50000000000000000, 0.50000000000000000,
7c62b943 3020 8.0000000000000000, -0.50000000000000000 },
f92ab29f 3021 { 0.98807803762902813, 0.50000000000000000, 0.50000000000000000,
7c62b943 3022 8.0000000000000000, -0.40000000000000002 },
f92ab29f 3023 { 0.99095625840920332, 0.50000000000000000, 0.50000000000000000,
7c62b943 3024 8.0000000000000000, -0.30000000000000004 },
f92ab29f 3025 { 0.99390007937387959, 0.50000000000000000, 0.50000000000000000,
7c62b943 3026 8.0000000000000000, -0.19999999999999996 },
f92ab29f 3027 { 0.99691327061866730, 0.50000000000000000, 0.50000000000000000,
7c62b943 3028 8.0000000000000000, -0.099999999999999978 },
f92ab29f 3029 { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
7c62b943 3030 8.0000000000000000, 0.0000000000000000 },
f92ab29f 3031 { 1.0031648997547440, 0.50000000000000000, 0.50000000000000000,
7c62b943 3032 8.0000000000000000, 0.10000000000000009 },
f92ab29f 3033 { 1.0064131494767281, 0.50000000000000000, 0.50000000000000000,
7c62b943 3034 8.0000000000000000, 0.19999999999999996 },
f92ab29f 3035 { 1.0097505810668461, 0.50000000000000000, 0.50000000000000000,
7c62b943 3036 8.0000000000000000, 0.30000000000000004 },
f92ab29f 3037 { 1.0131838138968663, 0.50000000000000000, 0.50000000000000000,
7c62b943 3038 8.0000000000000000, 0.39999999999999991 },
f92ab29f 3039 { 1.0167204326938339, 0.50000000000000000, 0.50000000000000000,
7c62b943 3040 8.0000000000000000, 0.50000000000000000 },
f92ab29f 3041 { 1.0203692279382193, 0.50000000000000000, 0.50000000000000000,
7c62b943 3042 8.0000000000000000, 0.60000000000000009 },
f92ab29f 3043 { 1.0241405318057402, 0.50000000000000000, 0.50000000000000000,
7c62b943 3044 8.0000000000000000, 0.69999999999999996 },
f92ab29f 3045 { 1.0280467087844301, 0.50000000000000000, 0.50000000000000000,
7c62b943 3046 8.0000000000000000, 0.80000000000000004 },
f92ab29f 3047 { 1.0321029179180026, 0.50000000000000000, 0.50000000000000000,
7c62b943
BK
3048 8.0000000000000000, 0.89999999999999991 },
3049};
3050
3051// Test function for a=0.50000000000000000, b=0.50000000000000000, c=8.0000000000000000.
3052template <typename Tp>
3053void test044()
3054{
3055 const Tp eps = std::numeric_limits<Tp>::epsilon();
3056 Tp max_abs_diff = -Tp(1);
3057 Tp max_abs_frac = -Tp(1);
3058 unsigned int num_datum = sizeof(data044)
3059 / sizeof(testcase_hyperg<double>);
3060 for (unsigned int i = 0; i < num_datum; ++i)
3061 {
3062 const Tp f = std::tr1::hyperg(Tp(data044[i].a), Tp(data044[i].b),
3063 Tp(data044[i].c), Tp(data044[i].x));
3064 const Tp f0 = data044[i].f0;
3065 const Tp diff = f - f0;
3066 if (std::abs(diff) > max_abs_diff)
3067 max_abs_diff = std::abs(diff);
3068 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3069 {
3070 const Tp frac = diff / f0;
3071 if (std::abs(frac) > max_abs_frac)
3072 max_abs_frac = std::abs(frac);
3073 }
3074 }
3075 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3076}
3077
3078// Test data for a=0.50000000000000000, b=0.50000000000000000, c=10.000000000000000.
3079testcase_hyperg<double> data045[] = {
f92ab29f 3080 { 0.97930223035212161, 0.50000000000000000, 0.50000000000000000,
7c62b943 3081 10.000000000000000, -0.90000000000000002 },
f92ab29f 3082 { 0.98144406855076416, 0.50000000000000000, 0.50000000000000000,
7c62b943 3083 10.000000000000000, -0.80000000000000004 },
f92ab29f 3084 { 0.98362155940297302, 0.50000000000000000, 0.50000000000000000,
7c62b943 3085 10.000000000000000, -0.69999999999999996 },
f92ab29f 3086 { 0.98583616201745805, 0.50000000000000000, 0.50000000000000000,
7c62b943 3087 10.000000000000000, -0.59999999999999998 },
f92ab29f 3088 { 0.98808944235385077, 0.50000000000000000, 0.50000000000000000,
7c62b943 3089 10.000000000000000, -0.50000000000000000 },
f92ab29f 3090 { 0.99038308530635433, 0.50000000000000000, 0.50000000000000000,
7c62b943 3091 10.000000000000000, -0.40000000000000002 },
f92ab29f 3092 { 0.99271890872975732, 0.50000000000000000, 0.50000000000000000,
7c62b943 3093 10.000000000000000, -0.30000000000000004 },
f92ab29f 3094 { 0.99509887982916734, 0.50000000000000000, 0.50000000000000000,
7c62b943 3095 10.000000000000000, -0.19999999999999996 },
f92ab29f 3096 { 0.99752513445413604, 0.50000000000000000, 0.50000000000000000,
7c62b943 3097 10.000000000000000, -0.099999999999999978 },
f92ab29f 3098 { 1.0000000000000000, 0.50000000000000000, 0.50000000000000000,
7c62b943 3099 10.000000000000000, 0.0000000000000000 },
f92ab29f 3100 { 1.0025260228440118, 0.50000000000000000, 0.50000000000000000,
7c62b943 3101 10.000000000000000, 0.10000000000000009 },
f92ab29f 3102 { 1.0051060015613384, 0.50000000000000000, 0.50000000000000000,
7c62b943 3103 10.000000000000000, 0.19999999999999996 },
f92ab29f 3104 { 1.0077430276253163, 0.50000000000000000, 0.50000000000000000,
7c62b943 3105 10.000000000000000, 0.30000000000000004 },
f92ab29f 3106 { 1.0104405359789990, 0.50000000000000000, 0.50000000000000000,
7c62b943 3107 10.000000000000000, 0.39999999999999991 },
f92ab29f 3108 { 1.0132023689128868, 0.50000000000000000, 0.50000000000000000,
7c62b943 3109 10.000000000000000, 0.50000000000000000 },
f92ab29f 3110 { 1.0160328583559475, 0.50000000000000000, 0.50000000000000000,
7c62b943 3111 10.000000000000000, 0.60000000000000009 },
f92ab29f 3112 { 1.0189369344885053, 0.50000000000000000, 0.50000000000000000,
7c62b943 3113 10.000000000000000, 0.69999999999999996 },
f92ab29f 3114 { 1.0219202735809589, 0.50000000000000000, 0.50000000000000000,
7c62b943 3115 10.000000000000000, 0.80000000000000004 },
f92ab29f 3116 { 1.0249895076611382, 0.50000000000000000, 0.50000000000000000,
7c62b943
BK
3117 10.000000000000000, 0.89999999999999991 },
3118};
3119
3120// Test function for a=0.50000000000000000, b=0.50000000000000000, c=10.000000000000000.
3121template <typename Tp>
3122void test045()
3123{
3124 const Tp eps = std::numeric_limits<Tp>::epsilon();
3125 Tp max_abs_diff = -Tp(1);
3126 Tp max_abs_frac = -Tp(1);
3127 unsigned int num_datum = sizeof(data045)
3128 / sizeof(testcase_hyperg<double>);
3129 for (unsigned int i = 0; i < num_datum; ++i)
3130 {
3131 const Tp f = std::tr1::hyperg(Tp(data045[i].a), Tp(data045[i].b),
3132 Tp(data045[i].c), Tp(data045[i].x));
3133 const Tp f0 = data045[i].f0;
3134 const Tp diff = f - f0;
3135 if (std::abs(diff) > max_abs_diff)
3136 max_abs_diff = std::abs(diff);
3137 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3138 {
3139 const Tp frac = diff / f0;
3140 if (std::abs(frac) > max_abs_frac)
3141 max_abs_frac = std::abs(frac);
3142 }
3143 }
3144 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3145}
3146
3147// Test data for a=0.50000000000000000, b=1.0000000000000000, c=2.0000000000000000.
3148testcase_hyperg<double> data046[] = {
f92ab29f 3149 { 0.84089972268671609, 0.50000000000000000, 1.0000000000000000,
7c62b943 3150 2.0000000000000000, -0.90000000000000002 },
f92ab29f 3151 { 0.85410196624968437, 0.50000000000000000, 1.0000000000000000,
7c62b943 3152 2.0000000000000000, -0.80000000000000004 },
f92ab29f 3153 { 0.86811566011579933, 0.50000000000000000, 1.0000000000000000,
7c62b943 3154 2.0000000000000000, -0.69999999999999996 },
f92ab29f 3155 { 0.88303688022450544, 0.50000000000000000, 1.0000000000000000,
7c62b943 3156 2.0000000000000000, -0.59999999999999998 },
f92ab29f 3157 { 0.89897948556635565, 0.50000000000000000, 1.0000000000000000,
7c62b943 3158 2.0000000000000000, -0.50000000000000000 },
f92ab29f 3159 { 0.91607978309961580, 0.50000000000000000, 1.0000000000000000,
7c62b943 3160 2.0000000000000000, -0.40000000000000002 },
f92ab29f 3161 { 0.93450283399425305, 0.50000000000000000, 1.0000000000000000,
7c62b943 3162 2.0000000000000000, -0.30000000000000004 },
f92ab29f 3163 { 0.95445115010332193, 0.50000000000000000, 1.0000000000000000,
7c62b943 3164 2.0000000000000000, -0.19999999999999996 },
f92ab29f 3165 { 0.97617696340303095, 0.50000000000000000, 1.0000000000000000,
7c62b943 3166 2.0000000000000000, -0.099999999999999978 },
f92ab29f 3167 { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
7c62b943 3168 2.0000000000000000, 0.0000000000000000 },
f92ab29f 3169 { 1.0263340389897240, 0.50000000000000000, 1.0000000000000000,
7c62b943 3170 2.0000000000000000, 0.10000000000000009 },
f92ab29f 3171 { 1.0557280900008410, 0.50000000000000000, 1.0000000000000000,
7c62b943 3172 2.0000000000000000, 0.19999999999999996 },
f92ab29f 3173 { 1.0889331564394962, 0.50000000000000000, 1.0000000000000000,
7c62b943 3174 2.0000000000000000, 0.30000000000000004 },
f92ab29f 3175 { 1.1270166537925830, 0.50000000000000000, 1.0000000000000000,
7c62b943 3176 2.0000000000000000, 0.39999999999999991 },
f92ab29f 3177 { 1.1715728752538095, 0.50000000000000000, 1.0000000000000000,
7c62b943 3178 2.0000000000000000, 0.50000000000000000 },
f92ab29f 3179 { 1.2251482265544145, 0.50000000000000000, 1.0000000000000000,
7c62b943 3180 2.0000000000000000, 0.60000000000000009 },
f92ab29f 3181 { 1.2922212642709541, 0.50000000000000000, 1.0000000000000000,
7c62b943 3182 2.0000000000000000, 0.69999999999999996 },
f92ab29f 3183 { 1.3819660112501042, 0.50000000000000000, 1.0000000000000000,
7c62b943 3184 2.0000000000000000, 0.80000000000000004 },
f92ab29f 3185 { 1.5194938532959119, 0.50000000000000000, 1.0000000000000000,
7c62b943
BK
3186 2.0000000000000000, 0.89999999999999991 },
3187};
3188
3189// Test function for a=0.50000000000000000, b=1.0000000000000000, c=2.0000000000000000.
3190template <typename Tp>
3191void test046()
3192{
3193 const Tp eps = std::numeric_limits<Tp>::epsilon();
3194 Tp max_abs_diff = -Tp(1);
3195 Tp max_abs_frac = -Tp(1);
3196 unsigned int num_datum = sizeof(data046)
3197 / sizeof(testcase_hyperg<double>);
3198 for (unsigned int i = 0; i < num_datum; ++i)
3199 {
3200 const Tp f = std::tr1::hyperg(Tp(data046[i].a), Tp(data046[i].b),
3201 Tp(data046[i].c), Tp(data046[i].x));
3202 const Tp f0 = data046[i].f0;
3203 const Tp diff = f - f0;
3204 if (std::abs(diff) > max_abs_diff)
3205 max_abs_diff = std::abs(diff);
3206 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3207 {
3208 const Tp frac = diff / f0;
3209 if (std::abs(frac) > max_abs_frac)
3210 max_abs_frac = std::abs(frac);
3211 }
3212 }
3213 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3214}
3215
3216// Test data for a=0.50000000000000000, b=1.0000000000000000, c=4.0000000000000000.
3217testcase_hyperg<double> data047[] = {
f92ab29f 3218 { 0.90992197313391499, 0.50000000000000000, 1.0000000000000000,
7c62b943 3219 4.0000000000000000, -0.90000000000000002 },
f92ab29f 3220 { 0.91822592662244507, 0.50000000000000000, 1.0000000000000000,
7c62b943 3221 4.0000000000000000, -0.80000000000000004 },
f92ab29f 3222 { 0.92687104566419531, 0.50000000000000000, 1.0000000000000000,
7c62b943 3223 4.0000000000000000, -0.69999999999999996 },
f92ab29f 3224 { 0.93588628166548815, 0.50000000000000000, 1.0000000000000000,
7c62b943 3225 4.0000000000000000, -0.59999999999999998 },
f92ab29f 3226 { 0.94530459215552909, 0.50000000000000000, 1.0000000000000000,
7c62b943 3227 4.0000000000000000, -0.50000000000000000 },
f92ab29f 3228 { 0.95516374875247467, 0.50000000000000000, 1.0000000000000000,
7c62b943 3229 4.0000000000000000, -0.40000000000000002 },
f92ab29f 3230 { 0.96550736800511827, 0.50000000000000000, 1.0000000000000000,
7c62b943 3231 4.0000000000000000, -0.30000000000000004 },
f92ab29f 3232 { 0.97638624595136270, 0.50000000000000000, 1.0000000000000000,
7c62b943 3233 4.0000000000000000, -0.19999999999999996 },
f92ab29f 3234 { 0.98786011482678993, 0.50000000000000000, 1.0000000000000000,
7c62b943 3235 4.0000000000000000, -0.099999999999999978 },
f92ab29f 3236 { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
7c62b943 3237 4.0000000000000000, 0.0000000000000000 },
f92ab29f 3238 { 1.0128914530682316, 0.50000000000000000, 1.0000000000000000,
7c62b943 3239 4.0000000000000000, 0.10000000000000009 },
f92ab29f 3240 { 1.0266391040215350, 0.50000000000000000, 1.0000000000000000,
7c62b943 3241 4.0000000000000000, 0.19999999999999996 },
f92ab29f 3242 { 1.0413732738729464, 0.50000000000000000, 1.0000000000000000,
7c62b943 3243 4.0000000000000000, 0.30000000000000004 },
f92ab29f 3244 { 1.0572599536532992, 0.50000000000000000, 1.0000000000000000,
7c62b943 3245 4.0000000000000000, 0.39999999999999991 },
f92ab29f 3246 { 1.0745166004060953, 0.50000000000000000, 1.0000000000000000,
7c62b943 3247 4.0000000000000000, 0.50000000000000000 },
f92ab29f 3248 { 1.0934387388831386, 0.50000000000000000, 1.0000000000000000,
7c62b943 3249 4.0000000000000000, 0.60000000000000009 },
f92ab29f 3250 { 1.1144486980714641, 0.50000000000000000, 1.0000000000000000,
7c62b943 3251 4.0000000000000000, 0.69999999999999996 },
f92ab29f 3252 { 1.1381966011250106, 0.50000000000000000, 1.0000000000000000,
7c62b943 3253 4.0000000000000000, 0.80000000000000004 },
f92ab29f 3254 { 1.1658171625342397, 0.50000000000000000, 1.0000000000000000,
7c62b943
BK
3255 4.0000000000000000, 0.89999999999999991 },
3256};
3257
3258// Test function for a=0.50000000000000000, b=1.0000000000000000, c=4.0000000000000000.
3259template <typename Tp>
3260void test047()
3261{
3262 const Tp eps = std::numeric_limits<Tp>::epsilon();
3263 Tp max_abs_diff = -Tp(1);
3264 Tp max_abs_frac = -Tp(1);
3265 unsigned int num_datum = sizeof(data047)
3266 / sizeof(testcase_hyperg<double>);
3267 for (unsigned int i = 0; i < num_datum; ++i)
3268 {
3269 const Tp f = std::tr1::hyperg(Tp(data047[i].a), Tp(data047[i].b),
3270 Tp(data047[i].c), Tp(data047[i].x));
3271 const Tp f0 = data047[i].f0;
3272 const Tp diff = f - f0;
3273 if (std::abs(diff) > max_abs_diff)
3274 max_abs_diff = std::abs(diff);
3275 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3276 {
3277 const Tp frac = diff / f0;
3278 if (std::abs(frac) > max_abs_frac)
3279 max_abs_frac = std::abs(frac);
3280 }
3281 }
3282 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3283}
3284
3285// Test data for a=0.50000000000000000, b=1.0000000000000000, c=6.0000000000000000.
3286testcase_hyperg<double> data048[] = {
f92ab29f 3287 { 0.93641908369732885, 0.50000000000000000, 1.0000000000000000,
7c62b943 3288 6.0000000000000000, -0.90000000000000002 },
f92ab29f 3289 { 0.94256349654111315, 0.50000000000000000, 1.0000000000000000,
7c62b943 3290 6.0000000000000000, -0.80000000000000004 },
f92ab29f 3291 { 0.94890138508461319, 0.50000000000000000, 1.0000000000000000,
7c62b943 3292 6.0000000000000000, -0.69999999999999996 },
f92ab29f 3293 { 0.95544578858430007, 0.50000000000000000, 1.0000000000000000,
7c62b943 3294 6.0000000000000000, -0.59999999999999998 },
f92ab29f 3295 { 0.96221121193620718, 0.50000000000000000, 1.0000000000000000,
7c62b943 3296 6.0000000000000000, -0.50000000000000000 },
f92ab29f 3297 { 0.96921386948293542, 0.50000000000000000, 1.0000000000000000,
7c62b943 3298 6.0000000000000000, -0.40000000000000002 },
f92ab29f 3299 { 0.97647198488394704, 0.50000000000000000, 1.0000000000000000,
7c62b943 3300 6.0000000000000000, -0.30000000000000004 },
f92ab29f 3301 { 0.98400616412578656, 0.50000000000000000, 1.0000000000000000,
7c62b943 3302 6.0000000000000000, -0.19999999999999996 },
f92ab29f 3303 { 0.99183986544963032, 0.50000000000000000, 1.0000000000000000,
7c62b943 3304 6.0000000000000000, -0.099999999999999978 },
f92ab29f 3305 { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
7c62b943 3306 6.0000000000000000, 0.0000000000000000 },
f92ab29f 3307 { 1.0085177124149158, 0.50000000000000000, 1.0000000000000000,
7c62b943 3308 6.0000000000000000, 0.10000000000000009 },
f92ab29f 3309 { 1.0174294150407122, 0.50000000000000000, 1.0000000000000000,
7c62b943 3310 6.0000000000000000, 0.19999999999999996 },
f92ab29f 3311 { 1.0267781897388850, 0.50000000000000000, 1.0000000000000000,
7c62b943 3312 6.0000000000000000, 0.30000000000000004 },
f92ab29f 3313 { 1.0366157405967285, 0.50000000000000000, 1.0000000000000000,
7c62b943 3314 6.0000000000000000, 0.39999999999999991 },
f92ab29f 3315 { 1.0470052068648839, 0.50000000000000000, 1.0000000000000000,
7c62b943 3316 6.0000000000000000, 0.50000000000000000 },
f92ab29f 3317 { 1.0580253905513313, 0.50000000000000000, 1.0000000000000000,
7c62b943 3318 6.0000000000000000, 0.60000000000000009 },
f92ab29f 3319 { 1.0697774741209765, 0.50000000000000000, 1.0000000000000000,
7c62b943 3320 6.0000000000000000, 0.69999999999999996 },
f92ab29f 3321 { 1.0823965556448414, 0.50000000000000000, 1.0000000000000000,
7c62b943 3322 6.0000000000000000, 0.80000000000000004 },
f92ab29f 3323 { 1.0960739512057103, 0.50000000000000000, 1.0000000000000000,
7c62b943
BK
3324 6.0000000000000000, 0.89999999999999991 },
3325};
3326
3327// Test function for a=0.50000000000000000, b=1.0000000000000000, c=6.0000000000000000.
3328template <typename Tp>
3329void test048()
3330{
3331 const Tp eps = std::numeric_limits<Tp>::epsilon();
3332 Tp max_abs_diff = -Tp(1);
3333 Tp max_abs_frac = -Tp(1);
3334 unsigned int num_datum = sizeof(data048)
3335 / sizeof(testcase_hyperg<double>);
3336 for (unsigned int i = 0; i < num_datum; ++i)
3337 {
3338 const Tp f = std::tr1::hyperg(Tp(data048[i].a), Tp(data048[i].b),
3339 Tp(data048[i].c), Tp(data048[i].x));
3340 const Tp f0 = data048[i].f0;
3341 const Tp diff = f - f0;
3342 if (std::abs(diff) > max_abs_diff)
3343 max_abs_diff = std::abs(diff);
3344 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3345 {
3346 const Tp frac = diff / f0;
3347 if (std::abs(frac) > max_abs_frac)
3348 max_abs_frac = std::abs(frac);
3349 }
3350 }
3351 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3352}
3353
3354// Test data for a=0.50000000000000000, b=1.0000000000000000, c=8.0000000000000000.
3355testcase_hyperg<double> data049[] = {
f92ab29f 3356 { 0.95069883346936235, 0.50000000000000000, 1.0000000000000000,
7c62b943 3357 8.0000000000000000, -0.90000000000000002 },
f92ab29f 3358 { 0.95559618047704165, 0.50000000000000000, 1.0000000000000000,
7c62b943 3359 8.0000000000000000, -0.80000000000000004 },
f92ab29f 3360 { 0.96061938755931653, 0.50000000000000000, 1.0000000000000000,
7c62b943 3361 8.0000000000000000, -0.69999999999999996 },
f92ab29f 3362 { 0.96577553912851344, 0.50000000000000000, 1.0000000000000000,
7c62b943 3363 8.0000000000000000, -0.59999999999999998 },
f92ab29f 3364 { 0.97107239473807716, 0.50000000000000000, 1.0000000000000000,
7c62b943 3365 8.0000000000000000, -0.50000000000000000 },
f92ab29f 3366 { 0.97651848528588503, 0.50000000000000000, 1.0000000000000000,
7c62b943 3367 8.0000000000000000, -0.40000000000000002 },
f92ab29f 3368 { 0.98212322830227139, 0.50000000000000000, 1.0000000000000000,
7c62b943 3369 8.0000000000000000, -0.30000000000000004 },
f92ab29f 3370 { 0.98789706736195781, 0.50000000000000000, 1.0000000000000000,
7c62b943 3371 8.0000000000000000, -0.19999999999999996 },
f92ab29f 3372 { 0.99385164237825074, 0.50000000000000000, 1.0000000000000000,
7c62b943 3373 8.0000000000000000, -0.099999999999999978 },
f92ab29f 3374 { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
7c62b943 3375 8.0000000000000000, 0.0000000000000000 },
f92ab29f 3376 { 1.0063568569383123, 0.50000000000000000, 1.0000000000000000,
7c62b943 3377 8.0000000000000000, 0.10000000000000009 },
f92ab29f 3378 { 1.0129389344715818, 0.50000000000000000, 1.0000000000000000,
7c62b943 3379 8.0000000000000000, 0.19999999999999996 },
f92ab29f 3380 { 1.0197653907773940, 0.50000000000000000, 1.0000000000000000,
7c62b943 3381 8.0000000000000000, 0.30000000000000004 },
f92ab29f 3382 { 1.0268583912277143, 0.50000000000000000, 1.0000000000000000,
7c62b943 3383 8.0000000000000000, 0.39999999999999991 },
f92ab29f 3384 { 1.0342438793937092, 0.50000000000000000, 1.0000000000000000,
7c62b943 3385 8.0000000000000000, 0.50000000000000000 },
f92ab29f 3386 { 1.0419526514766855, 0.50000000000000000, 1.0000000000000000,
7c62b943 3387 8.0000000000000000, 0.60000000000000009 },
f92ab29f 3388 { 1.0500219124976327, 0.50000000000000000, 1.0000000000000000,
7c62b943 3389 8.0000000000000000, 0.69999999999999996 },
f92ab29f 3390 { 1.0584976491907043, 0.50000000000000000, 1.0000000000000000,
7c62b943 3391 8.0000000000000000, 0.80000000000000004 },
f92ab29f 3392 { 1.0674385240268101, 0.50000000000000000, 1.0000000000000000,
7c62b943
BK
3393 8.0000000000000000, 0.89999999999999991 },
3394};
3395
3396// Test function for a=0.50000000000000000, b=1.0000000000000000, c=8.0000000000000000.
3397template <typename Tp>
3398void test049()
3399{
3400 const Tp eps = std::numeric_limits<Tp>::epsilon();
3401 Tp max_abs_diff = -Tp(1);
3402 Tp max_abs_frac = -Tp(1);
3403 unsigned int num_datum = sizeof(data049)
3404 / sizeof(testcase_hyperg<double>);
3405 for (unsigned int i = 0; i < num_datum; ++i)
3406 {
3407 const Tp f = std::tr1::hyperg(Tp(data049[i].a), Tp(data049[i].b),
3408 Tp(data049[i].c), Tp(data049[i].x));
3409 const Tp f0 = data049[i].f0;
3410 const Tp diff = f - f0;
3411 if (std::abs(diff) > max_abs_diff)
3412 max_abs_diff = std::abs(diff);
3413 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3414 {
3415 const Tp frac = diff / f0;
3416 if (std::abs(frac) > max_abs_frac)
3417 max_abs_frac = std::abs(frac);
3418 }
3419 }
3420 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3421}
3422
3423// Test data for a=0.50000000000000000, b=1.0000000000000000, c=10.000000000000000.
3424testcase_hyperg<double> data050[] = {
f92ab29f 3425 { 0.95968319138913893, 0.50000000000000000, 1.0000000000000000,
7c62b943 3426 10.000000000000000, -0.90000000000000002 },
f92ab29f 3427 { 0.96376169072755768, 0.50000000000000000, 1.0000000000000000,
7c62b943 3428 10.000000000000000, -0.80000000000000004 },
f92ab29f 3429 { 0.96792900082729316, 0.50000000000000000, 1.0000000000000000,
7c62b943 3430 10.000000000000000, -0.69999999999999996 },
f92ab29f 3431 { 0.97218942798115737, 0.50000000000000000, 1.0000000000000000,
7c62b943 3432 10.000000000000000, -0.59999999999999998 },
f92ab29f 3433 { 0.97654763592586857, 0.50000000000000000, 1.0000000000000000,
7c62b943 3434 10.000000000000000, -0.50000000000000000 },
f92ab29f 3435 { 0.98100869054353856, 0.50000000000000000, 1.0000000000000000,
7c62b943 3436 10.000000000000000, -0.40000000000000002 },
f92ab29f 3437 { 0.98557811238699278, 0.50000000000000000, 1.0000000000000000,
7c62b943 3438 10.000000000000000, -0.30000000000000004 },
f92ab29f 3439 { 0.99026193885795544, 0.50000000000000000, 1.0000000000000000,
7c62b943 3440 10.000000000000000, -0.19999999999999996 },
f92ab29f 3441 { 0.99506679842072221, 0.50000000000000000, 1.0000000000000000,
7c62b943 3442 10.000000000000000, -0.099999999999999978 },
f92ab29f 3443 { 1.0000000000000000, 0.50000000000000000, 1.0000000000000000,
7c62b943 3444 10.000000000000000, 0.0000000000000000 },
f92ab29f 3445 { 1.0050696417919618, 0.50000000000000000, 1.0000000000000000,
7c62b943 3446 10.000000000000000, 0.10000000000000009 },
f92ab29f 3447 { 1.0102847452747090, 0.50000000000000000, 1.0000000000000000,
7c62b943 3448 10.000000000000000, 0.19999999999999996 },
f92ab29f 3449 { 1.0156554225057022, 0.50000000000000000, 1.0000000000000000,
7c62b943 3450 10.000000000000000, 0.30000000000000004 },
f92ab29f 3451 { 1.0211930882963096, 0.50000000000000000, 1.0000000000000000,
7c62b943 3452 10.000000000000000, 0.39999999999999991 },
f92ab29f 3453 { 1.0269107343740711, 0.50000000000000000, 1.0000000000000000,
7c62b943 3454 10.000000000000000, 0.50000000000000000 },
f92ab29f 3455 { 1.0328232917216298, 0.50000000000000000, 1.0000000000000000,
7c62b943 3456 10.000000000000000, 0.60000000000000009 },
f92ab29f 3457 { 1.0389481230247195, 0.50000000000000000, 1.0000000000000000,
7c62b943 3458 10.000000000000000, 0.69999999999999996 },
f92ab29f 3459 { 1.0453057164134614, 0.50000000000000000, 1.0000000000000000,
7c62b943 3460 10.000000000000000, 0.80000000000000004 },
f92ab29f 3461 { 1.0519207114461246, 0.50000000000000000, 1.0000000000000000,
7c62b943
BK
3462 10.000000000000000, 0.89999999999999991 },
3463};
3464
3465// Test function for a=0.50000000000000000, b=1.0000000000000000, c=10.000000000000000.
3466template <typename Tp>
3467void test050()
3468{
3469 const Tp eps = std::numeric_limits<Tp>::epsilon();
3470 Tp max_abs_diff = -Tp(1);
3471 Tp max_abs_frac = -Tp(1);
3472 unsigned int num_datum = sizeof(data050)
3473 / sizeof(testcase_hyperg<double>);
3474 for (unsigned int i = 0; i < num_datum; ++i)
3475 {
3476 const Tp f = std::tr1::hyperg(Tp(data050[i].a), Tp(data050[i].b),
3477 Tp(data050[i].c), Tp(data050[i].x));
3478 const Tp f0 = data050[i].f0;
3479 const Tp diff = f - f0;
3480 if (std::abs(diff) > max_abs_diff)
3481 max_abs_diff = std::abs(diff);
3482 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3483 {
3484 const Tp frac = diff / f0;
3485 if (std::abs(frac) > max_abs_frac)
3486 max_abs_frac = std::abs(frac);
3487 }
3488 }
3489 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3490}
3491
3492// Test data for a=0.50000000000000000, b=2.0000000000000000, c=2.0000000000000000.
3493testcase_hyperg<double> data051[] = {
f92ab29f 3494 { 0.72547625011001171, 0.50000000000000000, 2.0000000000000000,
7c62b943 3495 2.0000000000000000, -0.90000000000000002 },
f92ab29f 3496 { 0.74535599249992990, 0.50000000000000000, 2.0000000000000000,
7c62b943 3497 2.0000000000000000, -0.80000000000000004 },
f92ab29f 3498 { 0.76696498884737041, 0.50000000000000000, 2.0000000000000000,
7c62b943 3499 2.0000000000000000, -0.69999999999999996 },
f92ab29f 3500 { 0.79056941504209477, 0.50000000000000000, 2.0000000000000000,
7c62b943 3501 2.0000000000000000, -0.59999999999999998 },
f92ab29f 3502 { 0.81649658092772603, 0.50000000000000000, 2.0000000000000000,
7c62b943 3503 2.0000000000000000, -0.50000000000000000 },
f92ab29f 3504 { 0.84515425472851657, 0.50000000000000000, 2.0000000000000000,
7c62b943 3505 2.0000000000000000, -0.40000000000000002 },
f92ab29f 3506 { 0.87705801930702920, 0.50000000000000000, 2.0000000000000000,
7c62b943 3507 2.0000000000000000, -0.30000000000000004 },
f92ab29f 3508 { 0.91287092917527690, 0.50000000000000000, 2.0000000000000000,
7c62b943 3509 2.0000000000000000, -0.19999999999999996 },
f92ab29f 3510 { 0.95346258924559224, 0.50000000000000000, 2.0000000000000000,
7c62b943 3511 2.0000000000000000, -0.099999999999999978 },
f92ab29f 3512 { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
7c62b943 3513 2.0000000000000000, 0.0000000000000000 },
f92ab29f 3514 { 1.0540925533894598, 0.50000000000000000, 2.0000000000000000,
7c62b943 3515 2.0000000000000000, 0.10000000000000009 },
f92ab29f 3516 { 1.1180339887498949, 0.50000000000000000, 2.0000000000000000,
7c62b943 3517 2.0000000000000000, 0.19999999999999996 },
f92ab29f 3518 { 1.1952286093343938, 0.50000000000000000, 2.0000000000000000,
7c62b943 3519 2.0000000000000000, 0.30000000000000004 },
f92ab29f 3520 { 1.2909944487358056, 0.50000000000000000, 2.0000000000000000,
7c62b943 3521 2.0000000000000000, 0.39999999999999991 },
f92ab29f 3522 { 1.4142135623730949, 0.50000000000000000, 2.0000000000000000,
7c62b943 3523 2.0000000000000000, 0.50000000000000000 },
f92ab29f 3524 { 1.5811388300841900, 0.50000000000000000, 2.0000000000000000,
7c62b943 3525 2.0000000000000000, 0.60000000000000009 },
f92ab29f 3526 { 1.8257418583505536, 0.50000000000000000, 2.0000000000000000,
7c62b943 3527 2.0000000000000000, 0.69999999999999996 },
f92ab29f 3528 { 2.2360679774997898, 0.50000000000000000, 2.0000000000000000,
7c62b943 3529 2.0000000000000000, 0.80000000000000004 },
f92ab29f 3530 { 3.1622776601683782, 0.50000000000000000, 2.0000000000000000,
7c62b943
BK
3531 2.0000000000000000, 0.89999999999999991 },
3532};
3533
3534// Test function for a=0.50000000000000000, b=2.0000000000000000, c=2.0000000000000000.
3535template <typename Tp>
3536void test051()
3537{
3538 const Tp eps = std::numeric_limits<Tp>::epsilon();
3539 Tp max_abs_diff = -Tp(1);
3540 Tp max_abs_frac = -Tp(1);
3541 unsigned int num_datum = sizeof(data051)
3542 / sizeof(testcase_hyperg<double>);
3543 for (unsigned int i = 0; i < num_datum; ++i)
3544 {
3545 const Tp f = std::tr1::hyperg(Tp(data051[i].a), Tp(data051[i].b),
3546 Tp(data051[i].c), Tp(data051[i].x));
3547 const Tp f0 = data051[i].f0;
3548 const Tp diff = f - f0;
3549 if (std::abs(diff) > max_abs_diff)
3550 max_abs_diff = std::abs(diff);
3551 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3552 {
3553 const Tp frac = diff / f0;
3554 if (std::abs(frac) > max_abs_frac)
3555 max_abs_frac = std::abs(frac);
3556 }
3557 }
3558 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3559}
3560
3561// Test data for a=0.50000000000000000, b=2.0000000000000000, c=4.0000000000000000.
3562testcase_hyperg<double> data052[] = {
f92ab29f 3563 { 0.83664260086443798, 0.50000000000000000, 2.0000000000000000,
7c62b943 3564 4.0000000000000000, -0.90000000000000002 },
f92ab29f 3565 { 0.85046584300227146, 0.50000000000000000, 2.0000000000000000,
7c62b943 3566 4.0000000000000000, -0.80000000000000004 },
f92ab29f 3567 { 0.86509574979651593, 0.50000000000000000, 2.0000000000000000,
7c62b943 3568 4.0000000000000000, -0.69999999999999996 },
f92ab29f 3569 { 0.88062082573041867, 0.50000000000000000, 2.0000000000000000,
7c62b943 3570 4.0000000000000000, -0.59999999999999998 },
f92ab29f 3571 { 0.89714464248521586, 0.50000000000000000, 2.0000000000000000,
7c62b943 3572 4.0000000000000000, -0.50000000000000000 },
f92ab29f 3573 { 0.91478946588967558, 0.50000000000000000, 2.0000000000000000,
7c62b943 3574 4.0000000000000000, -0.40000000000000002 },
f92ab29f 3575 { 0.93370105322348573, 0.50000000000000000, 2.0000000000000000,
7c62b943 3576 4.0000000000000000, -0.30000000000000004 },
f92ab29f 3577 { 0.95405511057700887, 0.50000000000000000, 2.0000000000000000,
7c62b943 3578 4.0000000000000000, -0.19999999999999996 },
f92ab29f 3579 { 0.97606616007978142, 0.50000000000000000, 2.0000000000000000,
7c62b943 3580 4.0000000000000000, -0.099999999999999978 },
f92ab29f 3581 { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
7c62b943 3582 4.0000000000000000, 0.0000000000000000 },
f92ab29f 3583 { 1.0261916902334731, 0.50000000000000000, 2.0000000000000000,
7c62b943 3584 4.0000000000000000, 0.10000000000000009 },
f92ab29f 3585 { 1.0550723519434702, 0.50000000000000000, 2.0000000000000000,
7c62b943 3586 4.0000000000000000, 0.19999999999999996 },
f92ab29f 3587 { 1.0872106588188091, 0.50000000000000000, 2.0000000000000000,
7c62b943 3588 4.0000000000000000, 0.30000000000000004 },
f92ab29f 3589 { 1.1233801699379020, 0.50000000000000000, 2.0000000000000000,
7c62b943 3590 4.0000000000000000, 0.39999999999999991 },
f92ab29f 3591 { 1.1646752981725688, 0.50000000000000000, 2.0000000000000000,
7c62b943 3592 4.0000000000000000, 0.50000000000000000 },
f92ab29f 3593 { 1.2127272514219511, 0.50000000000000000, 2.0000000000000000,
7c62b943 3594 4.0000000000000000, 0.60000000000000009 },
f92ab29f 3595 { 1.2701518651068637, 0.50000000000000000, 2.0000000000000000,
7c62b943 3596 4.0000000000000000, 0.69999999999999996 },
f92ab29f 3597 { 1.3416407864998725, 0.50000000000000000, 2.0000000000000000,
7c62b943 3598 4.0000000000000000, 0.80000000000000004 },
f92ab29f 3599 { 1.4374795179111102, 0.50000000000000000, 2.0000000000000000,
7c62b943
BK
3600 4.0000000000000000, 0.89999999999999991 },
3601};
3602
3603// Test function for a=0.50000000000000000, b=2.0000000000000000, c=4.0000000000000000.
3604template <typename Tp>
3605void test052()
3606{
3607 const Tp eps = std::numeric_limits<Tp>::epsilon();
3608 Tp max_abs_diff = -Tp(1);
3609 Tp max_abs_frac = -Tp(1);
3610 unsigned int num_datum = sizeof(data052)
3611 / sizeof(testcase_hyperg<double>);
3612 for (unsigned int i = 0; i < num_datum; ++i)
3613 {
3614 const Tp f = std::tr1::hyperg(Tp(data052[i].a), Tp(data052[i].b),
3615 Tp(data052[i].c), Tp(data052[i].x));
3616 const Tp f0 = data052[i].f0;
3617 const Tp diff = f - f0;
3618 if (std::abs(diff) > max_abs_diff)
3619 max_abs_diff = std::abs(diff);
3620 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3621 {
3622 const Tp frac = diff / f0;
3623 if (std::abs(frac) > max_abs_frac)
3624 max_abs_frac = std::abs(frac);
3625 }
3626 }
3627 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3628}
3629
3630// Test data for a=0.50000000000000000, b=2.0000000000000000, c=6.0000000000000000.
3631testcase_hyperg<double> data053[] = {
f92ab29f 3632 { 0.88195381730235833, 0.50000000000000000, 2.0000000000000000,
7c62b943 3633 6.0000000000000000, -0.90000000000000002 },
f92ab29f 3634 { 0.89265078469555093, 0.50000000000000000, 2.0000000000000000,
7c62b943 3635 6.0000000000000000, -0.80000000000000004 },
f92ab29f 3636 { 0.90382937908303707, 0.50000000000000000, 2.0000000000000000,
7c62b943 3637 6.0000000000000000, -0.69999999999999996 },
f92ab29f 3638 { 0.91553161389880577, 0.50000000000000000, 2.0000000000000000,
7c62b943 3639 6.0000000000000000, -0.59999999999999998 },
f92ab29f 3640 { 0.92780530349281576, 0.50000000000000000, 2.0000000000000000,
7c62b943 3641 6.0000000000000000, -0.50000000000000000 },
f92ab29f 3642 { 0.94070521140346042, 0.50000000000000000, 2.0000000000000000,
7c62b943 3643 6.0000000000000000, -0.40000000000000002 },
f92ab29f 3644 { 0.95429450630523349, 0.50000000000000000, 2.0000000000000000,
7c62b943 3645 6.0000000000000000, -0.30000000000000004 },
f92ab29f 3646 { 0.96864663325785849, 0.50000000000000000, 2.0000000000000000,
7c62b943 3647 6.0000000000000000, -0.19999999999999996 },
f92ab29f 3648 { 0.98384775588541795, 0.50000000000000000, 2.0000000000000000,
7c62b943 3649 6.0000000000000000, -0.099999999999999978 },
f92ab29f 3650 { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
7c62b943 3651 6.0000000000000000, 0.0000000000000000 },
f92ab29f 3652 { 1.0172258496884334, 0.50000000000000000, 2.0000000000000000,
7c62b943 3653 6.0000000000000000, 0.10000000000000009 },
f92ab29f 3654 { 1.0356742479163459, 0.50000000000000000, 2.0000000000000000,
7c62b943 3655 6.0000000000000000, 0.19999999999999996 },
f92ab29f 3656 { 1.0555293036908924, 0.50000000000000000, 2.0000000000000000,
7c62b943 3657 6.0000000000000000, 0.30000000000000004 },
f92ab29f 3658 { 1.0770231491562379, 0.50000000000000000, 2.0000000000000000,
7c62b943 3659 6.0000000000000000, 0.39999999999999991 },
f92ab29f 3660 { 1.1004557416484888, 0.50000000000000000, 2.0000000000000000,
7c62b943 3661 6.0000000000000000, 0.50000000000000000 },
f92ab29f 3662 { 1.1262270515731978, 0.50000000000000000, 2.0000000000000000,
7c62b943 3663 6.0000000000000000, 0.60000000000000009 },
f92ab29f 3664 { 1.1548932919125086, 0.50000000000000000, 2.0000000000000000,
7c62b943 3665 6.0000000000000000, 0.69999999999999996 },
f92ab29f 3666 { 1.1872757758134724, 0.50000000000000000, 2.0000000000000000,
7c62b943 3667 6.0000000000000000, 0.80000000000000004 },
f92ab29f 3668 { 1.2247091713458949, 0.50000000000000000, 2.0000000000000000,
7c62b943
BK
3669 6.0000000000000000, 0.89999999999999991 },
3670};
3671
3672// Test function for a=0.50000000000000000, b=2.0000000000000000, c=6.0000000000000000.
3673template <typename Tp>
3674void test053()
3675{
3676 const Tp eps = std::numeric_limits<Tp>::epsilon();
3677 Tp max_abs_diff = -Tp(1);
3678 Tp max_abs_frac = -Tp(1);
3679 unsigned int num_datum = sizeof(data053)
3680 / sizeof(testcase_hyperg<double>);
3681 for (unsigned int i = 0; i < num_datum; ++i)
3682 {
3683 const Tp f = std::tr1::hyperg(Tp(data053[i].a), Tp(data053[i].b),
3684 Tp(data053[i].c), Tp(data053[i].x));
3685 const Tp f0 = data053[i].f0;
3686 const Tp diff = f - f0;
3687 if (std::abs(diff) > max_abs_diff)
3688 max_abs_diff = std::abs(diff);
3689 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3690 {
3691 const Tp frac = diff / f0;
3692 if (std::abs(frac) > max_abs_frac)
3693 max_abs_frac = std::abs(frac);
3694 }
3695 }
3696 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3697}
3698
3699// Test data for a=0.50000000000000000, b=2.0000000000000000, c=8.0000000000000000.
3700testcase_hyperg<double> data054[] = {
f92ab29f 3701 { 0.90716919697107301, 0.50000000000000000, 2.0000000000000000,
7c62b943 3702 8.0000000000000000, -0.90000000000000002 },
f92ab29f 3703 { 0.91592299407142519, 0.50000000000000000, 2.0000000000000000,
7c62b943 3704 8.0000000000000000, -0.80000000000000004 },
f92ab29f 3705 { 0.92500027075874236, 0.50000000000000000, 2.0000000000000000,
7c62b943 3706 8.0000000000000000, -0.69999999999999996 },
f92ab29f 3707 { 0.93442464185467167, 0.50000000000000000, 2.0000000000000000,
7c62b943 3708 8.0000000000000000, -0.59999999999999998 },
f92ab29f 3709 { 0.94422248683737009, 0.50000000000000000, 2.0000000000000000,
7c62b943 3710 8.0000000000000000, -0.50000000000000000 },
f92ab29f 3711 { 0.95442341810133347, 0.50000000000000000, 2.0000000000000000,
7c62b943 3712 8.0000000000000000, -0.40000000000000002 },
f92ab29f 3713 { 0.96506085725516400, 0.50000000000000000, 2.0000000000000000,
7c62b943 3714 8.0000000000000000, -0.30000000000000004 },
f92ab29f 3715 { 0.97617275213704069, 0.50000000000000000, 2.0000000000000000,
7c62b943 3716 8.0000000000000000, -0.19999999999999996 },
f92ab29f 3717 { 0.98780247986309799, 0.50000000000000000, 2.0000000000000000,
7c62b943 3718 8.0000000000000000, -0.099999999999999978 },
f92ab29f 3719 { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
7c62b943 3720 8.0000000000000000, 0.0000000000000000 },
f92ab29f 3721 { 1.0128233505813447, 0.50000000000000000, 2.0000000000000000,
7c62b943 3722 8.0000000000000000, 0.10000000000000009 },
f92ab29f 3723 { 1.0263406246541855, 0.50000000000000000, 2.0000000000000000,
7c62b943 3724 8.0000000000000000, 0.19999999999999996 },
f92ab29f 3725 { 1.0406326381700366, 0.50000000000000000, 2.0000000000000000,
7c62b943 3726 8.0000000000000000, 0.30000000000000004 },
f92ab29f 3727 { 1.0557966239802845, 0.50000000000000000, 2.0000000000000000,
7c62b943 3728 8.0000000000000000, 0.39999999999999991 },
f92ab29f 3729 { 1.0719515075786321, 0.50000000000000000, 2.0000000000000000,
7c62b943 3730 8.0000000000000000, 0.50000000000000000 },
f92ab29f 3731 { 1.0892457392422055, 0.50000000000000000, 2.0000000000000000,
7c62b943 3732 8.0000000000000000, 0.60000000000000009 },
f92ab29f 3733 { 1.1078695188000958, 0.50000000000000000, 2.0000000000000000,
7c62b943 3734 8.0000000000000000, 0.69999999999999996 },
f92ab29f 3735 { 1.1280752258974340, 0.50000000000000000, 2.0000000000000000,
7c62b943 3736 8.0000000000000000, 0.80000000000000004 },
f92ab29f 3737 { 1.1502152002706476, 0.50000000000000000, 2.0000000000000000,
7c62b943
BK
3738 8.0000000000000000, 0.89999999999999991 },
3739};
3740
3741// Test function for a=0.50000000000000000, b=2.0000000000000000, c=8.0000000000000000.
3742template <typename Tp>
3743void test054()
3744{
3745 const Tp eps = std::numeric_limits<Tp>::epsilon();
3746 Tp max_abs_diff = -Tp(1);
3747 Tp max_abs_frac = -Tp(1);
3748 unsigned int num_datum = sizeof(data054)
3749 / sizeof(testcase_hyperg<double>);
3750 for (unsigned int i = 0; i < num_datum; ++i)
3751 {
3752 const Tp f = std::tr1::hyperg(Tp(data054[i].a), Tp(data054[i].b),
3753 Tp(data054[i].c), Tp(data054[i].x));
3754 const Tp f0 = data054[i].f0;
3755 const Tp diff = f - f0;
3756 if (std::abs(diff) > max_abs_diff)
3757 max_abs_diff = std::abs(diff);
3758 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3759 {
3760 const Tp frac = diff / f0;
3761 if (std::abs(frac) > max_abs_frac)
3762 max_abs_frac = std::abs(frac);
3763 }
3764 }
3765 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3766}
3767
3768// Test data for a=0.50000000000000000, b=2.0000000000000000, c=10.000000000000000.
3769testcase_hyperg<double> data055[] = {
f92ab29f 3770 { 0.92336416053263093, 0.50000000000000000, 2.0000000000000000,
7c62b943 3771 10.000000000000000, -0.90000000000000002 },
f92ab29f 3772 { 0.93078397248364519, 0.50000000000000000, 2.0000000000000000,
7c62b943 3773 10.000000000000000, -0.80000000000000004 },
f92ab29f 3774 { 0.93843714333600226, 0.50000000000000000, 2.0000000000000000,
7c62b943 3775 10.000000000000000, -0.69999999999999996 },
f92ab29f 3776 { 0.94633837784068076, 0.50000000000000000, 2.0000000000000000,
7c62b943 3777 10.000000000000000, -0.59999999999999998 },
f92ab29f 3778 { 0.95450388104967909, 0.50000000000000000, 2.0000000000000000,
7c62b943 3779 10.000000000000000, -0.50000000000000000 },
f92ab29f 3780 { 0.96295158125742764, 0.50000000000000000, 2.0000000000000000,
7c62b943 3781 10.000000000000000, -0.40000000000000002 },
f92ab29f 3782 { 0.97170139827854296, 0.50000000000000000, 2.0000000000000000,
7c62b943 3783 10.000000000000000, -0.30000000000000004 },
f92ab29f 3784 { 0.98077556918512687, 0.50000000000000000, 2.0000000000000000,
7c62b943 3785 10.000000000000000, -0.19999999999999996 },
f92ab29f 3786 { 0.99019904777750845, 0.50000000000000000, 2.0000000000000000,
7c62b943 3787 10.000000000000000, -0.099999999999999978 },
f92ab29f 3788 { 1.0000000000000000, 0.50000000000000000, 2.0000000000000000,
7c62b943 3789 10.000000000000000, 0.0000000000000000 },
f92ab29f 3790 { 1.0102104261941198, 0.50000000000000000, 2.0000000000000000,
7c62b943 3791 10.000000000000000, 0.10000000000000009 },
f92ab29f 3792 { 1.0208669540935695, 0.50000000000000000, 2.0000000000000000,
7c62b943 3793 10.000000000000000, 0.19999999999999996 },
f92ab29f 3794 { 1.0320118665407505, 0.50000000000000000, 2.0000000000000000,
7c62b943 3795 10.000000000000000, 0.30000000000000004 },
f92ab29f 3796 { 1.0436944599504387, 0.50000000000000000, 2.0000000000000000,
7c62b943 3797 10.000000000000000, 0.39999999999999991 },
f92ab29f 3798 { 1.0559728828278145, 0.50000000000000000, 2.0000000000000000,
7c62b943 3799 10.000000000000000, 0.50000000000000000 },
f92ab29f 3800 { 1.0689166967761712, 0.50000000000000000, 2.0000000000000000,
7c62b943 3801 10.000000000000000, 0.60000000000000009 },
f92ab29f 3802 { 1.0826105758119842, 0.50000000000000000, 2.0000000000000000,
7c62b943 3803 10.000000000000000, 0.69999999999999996 },
f92ab29f 3804 { 1.0971599106346146, 0.50000000000000000, 2.0000000000000000,
7c62b943 3805 10.000000000000000, 0.80000000000000004 },
f92ab29f 3806 { 1.1126998828023964, 0.50000000000000000, 2.0000000000000000,
7c62b943
BK
3807 10.000000000000000, 0.89999999999999991 },
3808};
3809
3810// Test function for a=0.50000000000000000, b=2.0000000000000000, c=10.000000000000000.
3811template <typename Tp>
3812void test055()
3813{
3814 const Tp eps = std::numeric_limits<Tp>::epsilon();
3815 Tp max_abs_diff = -Tp(1);
3816 Tp max_abs_frac = -Tp(1);
3817 unsigned int num_datum = sizeof(data055)
3818 / sizeof(testcase_hyperg<double>);
3819 for (unsigned int i = 0; i < num_datum; ++i)
3820 {
3821 const Tp f = std::tr1::hyperg(Tp(data055[i].a), Tp(data055[i].b),
3822 Tp(data055[i].c), Tp(data055[i].x));
3823 const Tp f0 = data055[i].f0;
3824 const Tp diff = f - f0;
3825 if (std::abs(diff) > max_abs_diff)
3826 max_abs_diff = std::abs(diff);
3827 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3828 {
3829 const Tp frac = diff / f0;
3830 if (std::abs(frac) > max_abs_frac)
3831 max_abs_frac = std::abs(frac);
3832 }
3833 }
3834 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3835}
3836
3837// Test data for a=0.50000000000000000, b=5.0000000000000000, c=2.0000000000000000.
3838testcase_hyperg<double> data056[] = {
f92ab29f 3839 { 0.52275983209457511, 0.50000000000000000, 5.0000000000000000,
7c62b943 3840 2.0000000000000000, -0.90000000000000002 },
f92ab29f 3841 { 0.54700336898142965, 0.50000000000000000, 5.0000000000000000,
7c62b943 3842 2.0000000000000000, -0.80000000000000004 },
f92ab29f 3843 { 0.57468955512601971, 0.50000000000000000, 5.0000000000000000,
7c62b943 3844 2.0000000000000000, -0.69999999999999996 },
f92ab29f 3845 { 0.60665490543315015, 0.50000000000000000, 5.0000000000000000,
7c62b943 3846 2.0000000000000000, -0.59999999999999998 },
f92ab29f 3847 { 0.64403057859056123, 0.50000000000000000, 5.0000000000000000,
7c62b943 3848 2.0000000000000000, -0.50000000000000000 },
f92ab29f 3849 { 0.68838183648623719, 0.50000000000000000, 5.0000000000000000,
7c62b943 3850 2.0000000000000000, -0.40000000000000002 },
f92ab29f 3851 { 0.74193265039311085, 0.50000000000000000, 5.0000000000000000,
7c62b943 3852 2.0000000000000000, -0.30000000000000004 },
f92ab29f 3853 { 0.80794095908995300, 0.50000000000000000, 5.0000000000000000,
7c62b943 3854 2.0000000000000000, -0.19999999999999996 },
f92ab29f 3855 { 0.89135275749639320, 0.50000000000000000, 5.0000000000000000,
7c62b943 3856 2.0000000000000000, -0.099999999999999978 },
f92ab29f 3857 { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
7c62b943 3858 2.0000000000000000, 0.0000000000000000 },
f92ab29f 3859 { 1.1469266219310688, 0.50000000000000000, 5.0000000000000000,
7c62b943 3860 2.0000000000000000, 0.10000000000000009 },
f92ab29f 3861 { 1.3552340708357489, 0.50000000000000000, 5.0000000000000000,
7c62b943 3862 2.0000000000000000, 0.19999999999999996 },
f92ab29f 3863 { 1.6690840478838305, 0.50000000000000000, 5.0000000000000000,
7c62b943 3864 2.0000000000000000, 0.30000000000000004 },
f92ab29f 3865 { 2.1815415453174483, 0.50000000000000000, 5.0000000000000000,
7c62b943 3866 2.0000000000000000, 0.39999999999999991 },
f92ab29f 3867 { 3.1156892546032235, 0.50000000000000000, 5.0000000000000000,
7c62b943 3868 2.0000000000000000, 0.50000000000000000 },
f92ab29f 3869 { 5.1109077417760416, 0.50000000000000000, 5.0000000000000000,
7c62b943 3870 2.0000000000000000, 0.60000000000000009 },
f92ab29f 3871 { 10.560352936466296, 0.50000000000000000, 5.0000000000000000,
7c62b943 3872 2.0000000000000000, 0.69999999999999996 },
f92ab29f 3873 { 33.541019662496815, 0.50000000000000000, 5.0000000000000000,
7c62b943 3874 2.0000000000000000, 0.80000000000000004 },
f92ab29f 3875 { 300.66343065819501, 0.50000000000000000, 5.0000000000000000,
7c62b943
BK
3876 2.0000000000000000, 0.89999999999999991 },
3877};
3878
3879// Test function for a=0.50000000000000000, b=5.0000000000000000, c=2.0000000000000000.
3880template <typename Tp>
3881void test056()
3882{
3883 const Tp eps = std::numeric_limits<Tp>::epsilon();
3884 Tp max_abs_diff = -Tp(1);
3885 Tp max_abs_frac = -Tp(1);
3886 unsigned int num_datum = sizeof(data056)
3887 / sizeof(testcase_hyperg<double>);
3888 for (unsigned int i = 0; i < num_datum; ++i)
3889 {
3890 const Tp f = std::tr1::hyperg(Tp(data056[i].a), Tp(data056[i].b),
3891 Tp(data056[i].c), Tp(data056[i].x));
3892 const Tp f0 = data056[i].f0;
3893 const Tp diff = f - f0;
3894 if (std::abs(diff) > max_abs_diff)
3895 max_abs_diff = std::abs(diff);
3896 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3897 {
3898 const Tp frac = diff / f0;
3899 if (std::abs(frac) > max_abs_frac)
3900 max_abs_frac = std::abs(frac);
3901 }
3902 }
3903 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3904}
3905
3906// Test data for a=0.50000000000000000, b=5.0000000000000000, c=4.0000000000000000.
3907testcase_hyperg<double> data057[] = {
f92ab29f 3908 { 0.68252041951139264, 0.50000000000000000, 5.0000000000000000,
7c62b943 3909 4.0000000000000000, -0.90000000000000002 },
f92ab29f 3910 { 0.70394732624993395, 0.50000000000000000, 5.0000000000000000,
7c62b943 3911 4.0000000000000000, -0.80000000000000004 },
f92ab29f 3912 { 0.72748884971552041, 0.50000000000000000, 5.0000000000000000,
7c62b943 3913 4.0000000000000000, -0.69999999999999996 },
f92ab29f 3914 { 0.75351147371199689, 0.50000000000000000, 5.0000000000000000,
7c62b943 3915 4.0000000000000000, -0.59999999999999998 },
f92ab29f 3916 { 0.78247589005573748, 0.50000000000000000, 5.0000000000000000,
7c62b943 3917 4.0000000000000000, -0.50000000000000000 },
f92ab29f 3918 { 0.81497017420249818, 0.50000000000000000, 5.0000000000000000,
7c62b943 3919 4.0000000000000000, -0.40000000000000002 },
f92ab29f 3920 { 0.85175826875009564, 0.50000000000000000, 5.0000000000000000,
7c62b943 3921 4.0000000000000000, -0.30000000000000004 },
f92ab29f 3922 { 0.89385278481745867, 0.50000000000000000, 5.0000000000000000,
7c62b943 3923 4.0000000000000000, -0.19999999999999996 },
f92ab29f 3924 { 0.94262778709507411, 0.50000000000000000, 5.0000000000000000,
7c62b943 3925 4.0000000000000000, -0.099999999999999978 },
f92ab29f 3926 { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
7c62b943 3927 4.0000000000000000, 0.0000000000000000 },
f92ab29f 3928 { 1.0687327277420910, 0.50000000000000000, 5.0000000000000000,
7c62b943 3929 4.0000000000000000, 0.10000000000000009 },
f92ab29f 3930 { 1.1529725508983291, 0.50000000000000000, 5.0000000000000000,
7c62b943 3931 4.0000000000000000, 0.19999999999999996 },
f92ab29f 3932 { 1.2592587134058799, 0.50000000000000000, 5.0000000000000000,
7c62b943 3933 4.0000000000000000, 0.30000000000000004 },
f92ab29f 3934 { 1.3985773194637892, 0.50000000000000000, 5.0000000000000000,
7c62b943 3935 4.0000000000000000, 0.39999999999999991 },
f92ab29f 3936 { 1.5909902576697317, 0.50000000000000000, 5.0000000000000000,
7c62b943 3937 4.0000000000000000, 0.50000000000000000 },
f92ab29f 3938 { 1.8776023607249752, 0.50000000000000000, 5.0000000000000000,
7c62b943 3939 4.0000000000000000, 0.60000000000000009 },
f92ab29f 3940 { 2.3582499003694646, 0.50000000000000000, 5.0000000000000000,
7c62b943 3941 4.0000000000000000, 0.69999999999999996 },
f92ab29f 3942 { 3.3541019662496838, 0.50000000000000000, 5.0000000000000000,
7c62b943 3943 4.0000000000000000, 0.80000000000000004 },
f92ab29f 3944 { 6.7198400278577859, 0.50000000000000000, 5.0000000000000000,
7c62b943
BK
3945 4.0000000000000000, 0.89999999999999991 },
3946};
3947
3948// Test function for a=0.50000000000000000, b=5.0000000000000000, c=4.0000000000000000.
3949template <typename Tp>
3950void test057()
3951{
3952 const Tp eps = std::numeric_limits<Tp>::epsilon();
3953 Tp max_abs_diff = -Tp(1);
3954 Tp max_abs_frac = -Tp(1);
3955 unsigned int num_datum = sizeof(data057)
3956 / sizeof(testcase_hyperg<double>);
3957 for (unsigned int i = 0; i < num_datum; ++i)
3958 {
3959 const Tp f = std::tr1::hyperg(Tp(data057[i].a), Tp(data057[i].b),
3960 Tp(data057[i].c), Tp(data057[i].x));
3961 const Tp f0 = data057[i].f0;
3962 const Tp diff = f - f0;
3963 if (std::abs(diff) > max_abs_diff)
3964 max_abs_diff = std::abs(diff);
3965 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
3966 {
3967 const Tp frac = diff / f0;
3968 if (std::abs(frac) > max_abs_frac)
3969 max_abs_frac = std::abs(frac);
3970 }
3971 }
3972 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
3973}
3974
3975// Test data for a=0.50000000000000000, b=5.0000000000000000, c=6.0000000000000000.
3976testcase_hyperg<double> data058[] = {
f92ab29f 3977 { 0.75755211927082589, 0.50000000000000000, 5.0000000000000000,
7c62b943 3978 6.0000000000000000, -0.90000000000000002 },
f92ab29f 3979 { 0.77603550233010998, 0.50000000000000000, 5.0000000000000000,
7c62b943 3980 6.0000000000000000, -0.80000000000000004 },
f92ab29f 3981 { 0.79596241913438492, 0.50000000000000000, 5.0000000000000000,
7c62b943 3982 6.0000000000000000, -0.69999999999999996 },
f92ab29f 3983 { 0.81753360792105201, 0.50000000000000000, 5.0000000000000000,
7c62b943 3984 6.0000000000000000, -0.59999999999999998 },
f92ab29f 3985 { 0.84099165409805521, 0.50000000000000000, 5.0000000000000000,
7c62b943 3986 6.0000000000000000, -0.50000000000000000 },
f92ab29f 3987 { 0.86663303852180873, 0.50000000000000000, 5.0000000000000000,
7c62b943 3988 6.0000000000000000, -0.40000000000000002 },
f92ab29f 3989 { 0.89482475828629970, 0.50000000000000000, 5.0000000000000000,
7c62b943 3990 6.0000000000000000, -0.30000000000000004 },
f92ab29f 3991 { 0.92602774279590350, 0.50000000000000000, 5.0000000000000000,
7c62b943 3992 6.0000000000000000, -0.19999999999999996 },
f92ab29f 3993 { 0.96083064727087386, 0.50000000000000000, 5.0000000000000000,
7c62b943 3994 6.0000000000000000, -0.099999999999999978 },
f92ab29f 3995 { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
7c62b943 3996 6.0000000000000000, 0.0000000000000000 },
f92ab29f 3997 { 1.0445570841313008, 0.50000000000000000, 5.0000000000000000,
7c62b943 3998 6.0000000000000000, 0.10000000000000009 },
f92ab29f 3999 { 1.0959004638926031, 0.50000000000000000, 5.0000000000000000,
7c62b943 4000 6.0000000000000000, 0.19999999999999996 },
f92ab29f 4001 { 1.1560106261370562, 0.50000000000000000, 5.0000000000000000,
7c62b943 4002 6.0000000000000000, 0.30000000000000004 },
f92ab29f 4003 { 1.2278121770678145, 0.50000000000000000, 5.0000000000000000,
7c62b943 4004 6.0000000000000000, 0.39999999999999991 },
f92ab29f 4005 { 1.3158640214709998, 0.50000000000000000, 5.0000000000000000,
7c62b943 4006 6.0000000000000000, 0.50000000000000000 },
f92ab29f 4007 { 1.4278095344155000, 0.50000000000000000, 5.0000000000000000,
7c62b943 4008 6.0000000000000000, 0.60000000000000009 },
f92ab29f 4009 { 1.5778700502946612, 0.50000000000000000, 5.0000000000000000,
7c62b943 4010 6.0000000000000000, 0.69999999999999996 },
f92ab29f 4011 { 1.7972173289196469, 0.50000000000000000, 5.0000000000000000,
7c62b943 4012 6.0000000000000000, 0.80000000000000004 },
f92ab29f 4013 { 2.1789970569269732, 0.50000000000000000, 5.0000000000000000,
7c62b943
BK
4014 6.0000000000000000, 0.89999999999999991 },
4015};
4016
4017// Test function for a=0.50000000000000000, b=5.0000000000000000, c=6.0000000000000000.
4018template <typename Tp>
4019void test058()
4020{
4021 const Tp eps = std::numeric_limits<Tp>::epsilon();
4022 Tp max_abs_diff = -Tp(1);
4023 Tp max_abs_frac = -Tp(1);
4024 unsigned int num_datum = sizeof(data058)
4025 / sizeof(testcase_hyperg<double>);
4026 for (unsigned int i = 0; i < num_datum; ++i)
4027 {
4028 const Tp f = std::tr1::hyperg(Tp(data058[i].a), Tp(data058[i].b),
4029 Tp(data058[i].c), Tp(data058[i].x));
4030 const Tp f0 = data058[i].f0;
4031 const Tp diff = f - f0;
4032 if (std::abs(diff) > max_abs_diff)
4033 max_abs_diff = std::abs(diff);
4034 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4035 {
4036 const Tp frac = diff / f0;
4037 if (std::abs(frac) > max_abs_frac)
4038 max_abs_frac = std::abs(frac);
4039 }
4040 }
4041 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4042}
4043
4044// Test data for a=0.50000000000000000, b=5.0000000000000000, c=8.0000000000000000.
4045testcase_hyperg<double> data059[] = {
f92ab29f 4046 { 0.80270093579329471, 0.50000000000000000, 5.0000000000000000,
7c62b943 4047 8.0000000000000000, -0.90000000000000002 },
f92ab29f 4048 { 0.81884974572462788, 0.50000000000000000, 5.0000000000000000,
7c62b943 4049 8.0000000000000000, -0.80000000000000004 },
f92ab29f 4050 { 0.83605266330015271, 0.50000000000000000, 5.0000000000000000,
7c62b943 4051 8.0000000000000000, -0.69999999999999996 },
f92ab29f 4052 { 0.85443340762795972, 0.50000000000000000, 5.0000000000000000,
7c62b943 4053 8.0000000000000000, -0.59999999999999998 },
f92ab29f 4054 { 0.87413762182790655, 0.50000000000000000, 5.0000000000000000,
7c62b943 4055 8.0000000000000000, -0.50000000000000000 },
f92ab29f 4056 { 0.89533826626907331, 0.50000000000000000, 5.0000000000000000,
7c62b943 4057 8.0000000000000000, -0.40000000000000002 },
f92ab29f 4058 { 0.91824276674115268, 0.50000000000000000, 5.0000000000000000,
7c62b943 4059 8.0000000000000000, -0.30000000000000004 },
f92ab29f 4060 { 0.94310265050720576, 0.50000000000000000, 5.0000000000000000,
7c62b943 4061 8.0000000000000000, -0.19999999999999996 },
f92ab29f 4062 { 0.97022678857609712, 0.50000000000000000, 5.0000000000000000,
7c62b943 4063 8.0000000000000000, -0.099999999999999978 },
f92ab29f 4064 { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
7c62b943 4065 8.0000000000000000, 0.0000000000000000 },
f92ab29f 4066 { 1.0329098673199812, 0.50000000000000000, 5.0000000000000000,
7c62b943 4067 8.0000000000000000, 0.10000000000000009 },
f92ab29f 4068 { 1.0695865684573389, 0.50000000000000000, 5.0000000000000000,
7c62b943 4069 8.0000000000000000, 0.19999999999999996 },
f92ab29f 4070 { 1.1108642103944570, 0.50000000000000000, 5.0000000000000000,
7c62b943 4071 8.0000000000000000, 0.30000000000000004 },
f92ab29f 4072 { 1.1578795055970506, 0.50000000000000000, 5.0000000000000000,
7c62b943 4073 8.0000000000000000, 0.39999999999999991 },
f92ab29f 4074 { 1.2122394794169442, 0.50000000000000000, 5.0000000000000000,
7c62b943 4075 8.0000000000000000, 0.50000000000000000 },
f92ab29f 4076 { 1.2763274721556934, 0.50000000000000000, 5.0000000000000000,
7c62b943 4077 8.0000000000000000, 0.60000000000000009 },
f92ab29f 4078 { 1.3539179650251021, 0.50000000000000000, 5.0000000000000000,
7c62b943 4079 8.0000000000000000, 0.69999999999999996 },
f92ab29f 4080 { 1.4515986118197148, 0.50000000000000000, 5.0000000000000000,
7c62b943 4081 8.0000000000000000, 0.80000000000000004 },
f92ab29f 4082 { 1.5829284571614219, 0.50000000000000000, 5.0000000000000000,
7c62b943
BK
4083 8.0000000000000000, 0.89999999999999991 },
4084};
4085
4086// Test function for a=0.50000000000000000, b=5.0000000000000000, c=8.0000000000000000.
4087template <typename Tp>
4088void test059()
4089{
4090 const Tp eps = std::numeric_limits<Tp>::epsilon();
4091 Tp max_abs_diff = -Tp(1);
4092 Tp max_abs_frac = -Tp(1);
4093 unsigned int num_datum = sizeof(data059)
4094 / sizeof(testcase_hyperg<double>);
4095 for (unsigned int i = 0; i < num_datum; ++i)
4096 {
4097 const Tp f = std::tr1::hyperg(Tp(data059[i].a), Tp(data059[i].b),
4098 Tp(data059[i].c), Tp(data059[i].x));
4099 const Tp f0 = data059[i].f0;
4100 const Tp diff = f - f0;
4101 if (std::abs(diff) > max_abs_diff)
4102 max_abs_diff = std::abs(diff);
4103 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4104 {
4105 const Tp frac = diff / f0;
4106 if (std::abs(frac) > max_abs_frac)
4107 max_abs_frac = std::abs(frac);
4108 }
4109 }
4110 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4111}
4112
4113// Test data for a=0.50000000000000000, b=5.0000000000000000, c=10.000000000000000.
4114testcase_hyperg<double> data060[] = {
f92ab29f 4115 { 0.83322694172301959, 0.50000000000000000, 5.0000000000000000,
7c62b943 4116 10.000000000000000, -0.90000000000000002 },
f92ab29f 4117 { 0.84753931604765664, 0.50000000000000000, 5.0000000000000000,
7c62b943 4118 10.000000000000000, -0.80000000000000004 },
f92ab29f 4119 { 0.86265784532195022, 0.50000000000000000, 5.0000000000000000,
7c62b943 4120 10.000000000000000, -0.69999999999999996 },
f92ab29f 4121 { 0.87866479300707079, 0.50000000000000000, 5.0000000000000000,
7c62b943 4122 10.000000000000000, -0.59999999999999998 },
f92ab29f 4123 { 0.89565516540263501, 0.50000000000000000, 5.0000000000000000,
7c62b943 4124 10.000000000000000, -0.50000000000000000 },
f92ab29f 4125 { 0.91373946207610557, 0.50000000000000000, 5.0000000000000000,
7c62b943 4126 10.000000000000000, -0.40000000000000002 },
f92ab29f 4127 { 0.93304721345881891, 0.50000000000000000, 5.0000000000000000,
7c62b943 4128 10.000000000000000, -0.30000000000000004 },
f92ab29f 4129 { 0.95373159512905148, 0.50000000000000000, 5.0000000000000000,
7c62b943 4130 10.000000000000000, -0.19999999999999996 },
f92ab29f 4131 { 0.97597554238828121, 0.50000000000000000, 5.0000000000000000,
7c62b943 4132 10.000000000000000, -0.099999999999999978 },
f92ab29f 4133 { 1.0000000000000000, 0.50000000000000000, 5.0000000000000000,
7c62b943 4134 10.000000000000000, 0.0000000000000000 },
f92ab29f 4135 { 1.0260752851887982, 0.50000000000000000, 5.0000000000000000,
7c62b943 4136 10.000000000000000, 0.10000000000000009 },
f92ab29f 4137 { 1.0545371197996178, 0.50000000000000000, 5.0000000000000000,
7c62b943 4138 10.000000000000000, 0.19999999999999996 },
f92ab29f 4139 { 1.0858099017045830, 0.50000000000000000, 5.0000000000000000,
7c62b943 4140 10.000000000000000, 0.30000000000000004 },
f92ab29f 4141 { 1.1204416568688709, 0.50000000000000000, 5.0000000000000000,
7c62b943 4142 10.000000000000000, 0.39999999999999991 },
f92ab29f 4143 { 1.1591587835964847, 0.50000000000000000, 5.0000000000000000,
7c62b943 4144 10.000000000000000, 0.50000000000000000 },
f92ab29f 4145 { 1.2029564720303347, 0.50000000000000000, 5.0000000000000000,
7c62b943 4146 10.000000000000000, 0.60000000000000009 },
f92ab29f 4147 { 1.2532588722007874, 0.50000000000000000, 5.0000000000000000,
7c62b943 4148 10.000000000000000, 0.69999999999999996 },
f92ab29f 4149 { 1.3122319926925459, 0.50000000000000000, 5.0000000000000000,
7c62b943 4150 10.000000000000000, 0.80000000000000004 },
f92ab29f 4151 { 1.3834948587364100, 0.50000000000000000, 5.0000000000000000,
7c62b943
BK
4152 10.000000000000000, 0.89999999999999991 },
4153};
4154
4155// Test function for a=0.50000000000000000, b=5.0000000000000000, c=10.000000000000000.
4156template <typename Tp>
4157void test060()
4158{
4159 const Tp eps = std::numeric_limits<Tp>::epsilon();
4160 Tp max_abs_diff = -Tp(1);
4161 Tp max_abs_frac = -Tp(1);
4162 unsigned int num_datum = sizeof(data060)
4163 / sizeof(testcase_hyperg<double>);
4164 for (unsigned int i = 0; i < num_datum; ++i)
4165 {
4166 const Tp f = std::tr1::hyperg(Tp(data060[i].a), Tp(data060[i].b),
4167 Tp(data060[i].c), Tp(data060[i].x));
4168 const Tp f0 = data060[i].f0;
4169 const Tp diff = f - f0;
4170 if (std::abs(diff) > max_abs_diff)
4171 max_abs_diff = std::abs(diff);
4172 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4173 {
4174 const Tp frac = diff / f0;
4175 if (std::abs(frac) > max_abs_frac)
4176 max_abs_frac = std::abs(frac);
4177 }
4178 }
4179 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4180}
4181
4182// Test data for a=0.50000000000000000, b=10.000000000000000, c=2.0000000000000000.
4183testcase_hyperg<double> data061[] = {
f92ab29f 4184 { 0.37727530159464628, 0.50000000000000000, 10.000000000000000,
7c62b943 4185 2.0000000000000000, -0.90000000000000002 },
f92ab29f 4186 { 0.39816010922169010, 0.50000000000000000, 10.000000000000000,
7c62b943 4187 2.0000000000000000, -0.80000000000000004 },
f92ab29f 4188 { 0.42283703041362453, 0.50000000000000000, 10.000000000000000,
7c62b943 4189 2.0000000000000000, -0.69999999999999996 },
f92ab29f 4190 { 0.45255640448730505, 0.50000000000000000, 10.000000000000000,
7c62b943 4191 2.0000000000000000, -0.59999999999999998 },
f92ab29f 4192 { 0.48919507154431141, 0.50000000000000000, 10.000000000000000,
7c62b943 4193 2.0000000000000000, -0.50000000000000000 },
f92ab29f 4194 { 0.53569358917731880, 0.50000000000000000, 10.000000000000000,
7c62b943 4195 2.0000000000000000, -0.40000000000000002 },
f92ab29f 4196 { 0.59689778897029566, 0.50000000000000000, 10.000000000000000,
7c62b943 4197 2.0000000000000000, -0.30000000000000004 },
f92ab29f 4198 { 0.68128587569875731, 0.50000000000000000, 10.000000000000000,
7c62b943 4199 2.0000000000000000, -0.19999999999999996 },
f92ab29f 4200 { 0.80478739308790359, 0.50000000000000000, 10.000000000000000,
7c62b943 4201 2.0000000000000000, -0.099999999999999978 },
f92ab29f 4202 { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
7c62b943 4203 2.0000000000000000, 0.0000000000000000 },
f92ab29f 4204 { 1.3408664196153621, 0.50000000000000000, 10.000000000000000,
7c62b943 4205 2.0000000000000000, 0.10000000000000009 },
f92ab29f 4206 { 2.0175364359923860, 0.50000000000000000, 10.000000000000000,
7c62b943 4207 2.0000000000000000, 0.19999999999999996 },
f92ab29f 4208 { 3.6011214553736646, 0.50000000000000000, 10.000000000000000,
7c62b943 4209 2.0000000000000000, 0.30000000000000004 },
f92ab29f 4210 { 8.1799429939495312, 0.50000000000000000, 10.000000000000000,
7c62b943 4211 2.0000000000000000, 0.39999999999999991 },
f92ab29f 4212 { 25.644834637536000, 0.50000000000000000, 10.000000000000000,
7c62b943 4213 2.0000000000000000, 0.50000000000000000 },
f92ab29f 4214 { 123.13738891597615, 0.50000000000000000, 10.000000000000000,
7c62b943 4215 2.0000000000000000, 0.60000000000000009 },
f92ab29f 4216 { 1088.7122410321333, 0.50000000000000000, 10.000000000000000,
7c62b943 4217 2.0000000000000000, 0.69999999999999996 },
f92ab29f 4218 { 27358.291704709951, 0.50000000000000000, 10.000000000000000,
7c62b943 4219 2.0000000000000000, 0.80000000000000004 },
f92ab29f 4220 { 8174369.0266731177, 0.50000000000000000, 10.000000000000000,
7c62b943
BK
4221 2.0000000000000000, 0.89999999999999991 },
4222};
4223
4224// Test function for a=0.50000000000000000, b=10.000000000000000, c=2.0000000000000000.
4225template <typename Tp>
4226void test061()
4227{
4228 const Tp eps = std::numeric_limits<Tp>::epsilon();
4229 Tp max_abs_diff = -Tp(1);
4230 Tp max_abs_frac = -Tp(1);
4231 unsigned int num_datum = sizeof(data061)
4232 / sizeof(testcase_hyperg<double>);
4233 for (unsigned int i = 0; i < num_datum; ++i)
4234 {
4235 const Tp f = std::tr1::hyperg(Tp(data061[i].a), Tp(data061[i].b),
4236 Tp(data061[i].c), Tp(data061[i].x));
4237 const Tp f0 = data061[i].f0;
4238 const Tp diff = f - f0;
4239 if (std::abs(diff) > max_abs_diff)
4240 max_abs_diff = std::abs(diff);
4241 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4242 {
4243 const Tp frac = diff / f0;
4244 if (std::abs(frac) > max_abs_frac)
4245 max_abs_frac = std::abs(frac);
4246 }
4247 }
4248 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4249}
4250
4251// Test data for a=0.50000000000000000, b=10.000000000000000, c=4.0000000000000000.
4252testcase_hyperg<double> data062[] = {
f92ab29f 4253 { 0.53905528308450834, 0.50000000000000000, 10.000000000000000,
7c62b943 4254 4.0000000000000000, -0.90000000000000002 },
f92ab29f 4255 { 0.56235533974376162, 0.50000000000000000, 10.000000000000000,
7c62b943 4256 4.0000000000000000, -0.80000000000000004 },
f92ab29f 4257 { 0.58887657983263575, 0.50000000000000000, 10.000000000000000,
7c62b943 4258 4.0000000000000000, -0.69999999999999996 },
f92ab29f 4259 { 0.61941227047262915, 0.50000000000000000, 10.000000000000000,
7c62b943 4260 4.0000000000000000, -0.59999999999999998 },
f92ab29f 4261 { 0.65504896640793853, 0.50000000000000000, 10.000000000000000,
7c62b943 4262 4.0000000000000000, -0.50000000000000000 },
f92ab29f 4263 { 0.69731666644529999, 0.50000000000000000, 10.000000000000000,
7c62b943 4264 4.0000000000000000, -0.40000000000000002 },
f92ab29f 4265 { 0.74844073299399128, 0.50000000000000000, 10.000000000000000,
7c62b943 4266 4.0000000000000000, -0.30000000000000004 },
f92ab29f 4267 { 0.81178446800105752, 0.50000000000000000, 10.000000000000000,
7c62b943 4268 4.0000000000000000, -0.19999999999999996 },
f92ab29f 4269 { 0.89266981277598023, 0.50000000000000000, 10.000000000000000,
7c62b943 4270 4.0000000000000000, -0.099999999999999978 },
f92ab29f 4271 { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
7c62b943 4272 4.0000000000000000, 0.0000000000000000 },
f92ab29f 4273 { 1.1497248473106778, 0.50000000000000000, 10.000000000000000,
7c62b943 4274 4.0000000000000000, 0.10000000000000009 },
f92ab29f 4275 { 1.3729717112654571, 0.50000000000000000, 10.000000000000000,
7c62b943 4276 4.0000000000000000, 0.19999999999999996 },
f92ab29f 4277 { 1.7374982340374392, 0.50000000000000000, 10.000000000000000,
7c62b943 4278 4.0000000000000000, 0.30000000000000004 },
f92ab29f 4279 { 2.4134479340960580, 0.50000000000000000, 10.000000000000000,
7c62b943 4280 4.0000000000000000, 0.39999999999999991 },
f92ab29f 4281 { 3.9191255240471192, 0.50000000000000000, 10.000000000000000,
7c62b943 4282 4.0000000000000000, 0.50000000000000000 },
f92ab29f 4283 { 8.3316373077761270, 0.50000000000000000, 10.000000000000000,
7c62b943 4284 4.0000000000000000, 0.60000000000000009 },
f92ab29f 4285 { 28.323020339843335, 0.50000000000000000, 10.000000000000000,
7c62b943 4286 4.0000000000000000, 0.69999999999999996 },
f92ab29f 4287 { 225.84286572747891, 0.50000000000000000, 10.000000000000000,
7c62b943 4288 4.0000000000000000, 0.80000000000000004 },
f92ab29f 4289 { 12757.127591286655, 0.50000000000000000, 10.000000000000000,
7c62b943
BK
4290 4.0000000000000000, 0.89999999999999991 },
4291};
4292
4293// Test function for a=0.50000000000000000, b=10.000000000000000, c=4.0000000000000000.
4294template <typename Tp>
4295void test062()
4296{
4297 const Tp eps = std::numeric_limits<Tp>::epsilon();
4298 Tp max_abs_diff = -Tp(1);
4299 Tp max_abs_frac = -Tp(1);
4300 unsigned int num_datum = sizeof(data062)
4301 / sizeof(testcase_hyperg<double>);
4302 for (unsigned int i = 0; i < num_datum; ++i)
4303 {
4304 const Tp f = std::tr1::hyperg(Tp(data062[i].a), Tp(data062[i].b),
4305 Tp(data062[i].c), Tp(data062[i].x));
4306 const Tp f0 = data062[i].f0;
4307 const Tp diff = f - f0;
4308 if (std::abs(diff) > max_abs_diff)
4309 max_abs_diff = std::abs(diff);
4310 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4311 {
4312 const Tp frac = diff / f0;
4313 if (std::abs(frac) > max_abs_frac)
4314 max_abs_frac = std::abs(frac);
4315 }
4316 }
4317 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4318}
4319
4320// Test data for a=0.50000000000000000, b=10.000000000000000, c=6.0000000000000000.
4321testcase_hyperg<double> data063[] = {
f92ab29f 4322 { 0.62672622092226071, 0.50000000000000000, 10.000000000000000,
7c62b943 4323 6.0000000000000000, -0.90000000000000002 },
f92ab29f 4324 { 0.64931010269769829, 0.50000000000000000, 10.000000000000000,
7c62b943 4325 6.0000000000000000, -0.80000000000000004 },
f92ab29f 4326 { 0.67448067519076316, 0.50000000000000000, 10.000000000000000,
7c62b943 4327 6.0000000000000000, -0.69999999999999996 },
f92ab29f 4328 { 0.70276306239803676, 0.50000000000000000, 10.000000000000000,
7c62b943 4329 6.0000000000000000, -0.59999999999999998 },
f92ab29f 4330 { 0.73484179773087555, 0.50000000000000000, 10.000000000000000,
7c62b943 4331 6.0000000000000000, -0.50000000000000000 },
f92ab29f 4332 { 0.77162761412743897, 0.50000000000000000, 10.000000000000000,
7c62b943 4333 6.0000000000000000, -0.40000000000000002 },
f92ab29f 4334 { 0.81436116844816531, 0.50000000000000000, 10.000000000000000,
7c62b943 4335 6.0000000000000000, -0.30000000000000004 },
f92ab29f 4336 { 0.86477994787944557, 0.50000000000000000, 10.000000000000000,
7c62b943 4337 6.0000000000000000, -0.19999999999999996 },
f92ab29f 4338 { 0.92539820516603888, 0.50000000000000000, 10.000000000000000,
7c62b943 4339 6.0000000000000000, -0.099999999999999978 },
f92ab29f 4340 { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
7c62b943 4341 6.0000000000000000, 0.0000000000000000 },
f92ab29f 4342 { 1.0945599448210315, 0.50000000000000000, 10.000000000000000,
7c62b943 4343 6.0000000000000000, 0.10000000000000009 },
f92ab29f 4344 { 1.2190897395597264, 0.50000000000000000, 10.000000000000000,
7c62b943 4345 6.0000000000000000, 0.19999999999999996 },
f92ab29f 4346 { 1.3916844336856475, 0.50000000000000000, 10.000000000000000,
7c62b943 4347 6.0000000000000000, 0.30000000000000004 },
f92ab29f 4348 { 1.6484497630432013, 0.50000000000000000, 10.000000000000000,
7c62b943 4349 6.0000000000000000, 0.39999999999999991 },
f92ab29f 4350 { 2.0717772717131155, 0.50000000000000000, 10.000000000000000,
7c62b943 4351 6.0000000000000000, 0.50000000000000000 },
f92ab29f 4352 { 2.8893613630810924, 0.50000000000000000, 10.000000000000000,
7c62b943 4353 6.0000000000000000, 0.60000000000000009 },
f92ab29f 4354 { 4.9459404075413529, 0.50000000000000000, 10.000000000000000,
7c62b943 4355 6.0000000000000000, 0.69999999999999996 },
f92ab29f 4356 { 13.487394149998716, 0.50000000000000000, 10.000000000000000,
7c62b943 4357 6.0000000000000000, 0.80000000000000004 },
f92ab29f 4358 { 136.57616044013972, 0.50000000000000000, 10.000000000000000,
7c62b943
BK
4359 6.0000000000000000, 0.89999999999999991 },
4360};
4361
4362// Test function for a=0.50000000000000000, b=10.000000000000000, c=6.0000000000000000.
4363template <typename Tp>
4364void test063()
4365{
4366 const Tp eps = std::numeric_limits<Tp>::epsilon();
4367 Tp max_abs_diff = -Tp(1);
4368 Tp max_abs_frac = -Tp(1);
4369 unsigned int num_datum = sizeof(data063)
4370 / sizeof(testcase_hyperg<double>);
4371 for (unsigned int i = 0; i < num_datum; ++i)
4372 {
4373 const Tp f = std::tr1::hyperg(Tp(data063[i].a), Tp(data063[i].b),
4374 Tp(data063[i].c), Tp(data063[i].x));
4375 const Tp f0 = data063[i].f0;
4376 const Tp diff = f - f0;
4377 if (std::abs(diff) > max_abs_diff)
4378 max_abs_diff = std::abs(diff);
4379 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4380 {
4381 const Tp frac = diff / f0;
4382 if (std::abs(frac) > max_abs_frac)
4383 max_abs_frac = std::abs(frac);
4384 }
4385 }
4386 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4387}
4388
4389// Test data for a=0.50000000000000000, b=10.000000000000000, c=8.0000000000000000.
4390testcase_hyperg<double> data064[] = {
f92ab29f 4391 { 0.68421604440344341, 0.50000000000000000, 10.000000000000000,
7c62b943 4392 8.0000000000000000, -0.90000000000000002 },
f92ab29f 4393 { 0.70548098055548891, 0.50000000000000000, 10.000000000000000,
7c62b943 4394 8.0000000000000000, -0.80000000000000004 },
f92ab29f 4395 { 0.72884342311710348, 0.50000000000000000, 10.000000000000000,
7c62b943 4396 8.0000000000000000, -0.69999999999999996 },
f92ab29f 4397 { 0.75466953437856243, 0.50000000000000000, 10.000000000000000,
7c62b943 4398 8.0000000000000000, -0.59999999999999998 },
f92ab29f 4399 { 0.78342090924662600, 0.50000000000000000, 10.000000000000000,
7c62b943 4400 8.0000000000000000, -0.50000000000000000 },
f92ab29f 4401 { 0.81568884278645049, 0.50000000000000000, 10.000000000000000,
7c62b943 4402 8.0000000000000000, -0.40000000000000002 },
f92ab29f 4403 { 0.85224480241465206, 0.50000000000000000, 10.000000000000000,
7c62b943 4404 8.0000000000000000, -0.30000000000000004 },
f92ab29f 4405 { 0.89411692571131696, 0.50000000000000000, 10.000000000000000,
7c62b943 4406 8.0000000000000000, -0.19999999999999996 },
f92ab29f 4407 { 0.94270986892954756, 0.50000000000000000, 10.000000000000000,
7c62b943 4408 8.0000000000000000, -0.099999999999999978 },
f92ab29f 4409 { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
7c62b943 4410 8.0000000000000000, 0.0000000000000000 },
f92ab29f 4411 { 1.0688682849120232, 0.50000000000000000, 10.000000000000000,
7c62b943 4412 8.0000000000000000, 0.10000000000000009 },
f92ab29f 4413 { 1.1537004376097553, 0.50000000000000000, 10.000000000000000,
7c62b943 4414 8.0000000000000000, 0.19999999999999996 },
f92ab29f 4415 { 1.2615455028370031, 0.50000000000000000, 10.000000000000000,
7c62b943 4416 8.0000000000000000, 0.30000000000000004 },
f92ab29f 4417 { 1.4045541456153436, 0.50000000000000000, 10.000000000000000,
7c62b943 4418 8.0000000000000000, 0.39999999999999991 },
f92ab29f 4419 { 1.6057216489444517, 0.50000000000000000, 10.000000000000000,
7c62b943 4420 8.0000000000000000, 0.50000000000000000 },
f92ab29f 4421 { 1.9146603020550739, 0.50000000000000000, 10.000000000000000,
7c62b943 4422 8.0000000000000000, 0.60000000000000009 },
f92ab29f 4423 { 2.4617931307620298, 0.50000000000000000, 10.000000000000000,
7c62b943 4424 8.0000000000000000, 0.69999999999999996 },
f92ab29f 4425 { 3.7267799624996498, 0.50000000000000000, 10.000000000000000,
7c62b943 4426 8.0000000000000000, 0.80000000000000004 },
f92ab29f 4427 { 9.3880118036248401, 0.50000000000000000, 10.000000000000000,
7c62b943
BK
4428 8.0000000000000000, 0.89999999999999991 },
4429};
4430
4431// Test function for a=0.50000000000000000, b=10.000000000000000, c=8.0000000000000000.
4432template <typename Tp>
4433void test064()
4434{
4435 const Tp eps = std::numeric_limits<Tp>::epsilon();
4436 Tp max_abs_diff = -Tp(1);
4437 Tp max_abs_frac = -Tp(1);
4438 unsigned int num_datum = sizeof(data064)
4439 / sizeof(testcase_hyperg<double>);
4440 for (unsigned int i = 0; i < num_datum; ++i)
4441 {
4442 const Tp f = std::tr1::hyperg(Tp(data064[i].a), Tp(data064[i].b),
4443 Tp(data064[i].c), Tp(data064[i].x));
4444 const Tp f0 = data064[i].f0;
4445 const Tp diff = f - f0;
4446 if (std::abs(diff) > max_abs_diff)
4447 max_abs_diff = std::abs(diff);
4448 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4449 {
4450 const Tp frac = diff / f0;
4451 if (std::abs(frac) > max_abs_frac)
4452 max_abs_frac = std::abs(frac);
4453 }
4454 }
4455 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4456}
4457
4458// Test data for a=0.50000000000000000, b=10.000000000000000, c=10.000000000000000.
4459testcase_hyperg<double> data065[] = {
f92ab29f 4460 { 0.72547625011001171, 0.50000000000000000, 10.000000000000000,
7c62b943 4461 10.000000000000000, -0.90000000000000002 },
f92ab29f 4462 { 0.74535599249992990, 0.50000000000000000, 10.000000000000000,
7c62b943 4463 10.000000000000000, -0.80000000000000004 },
f92ab29f 4464 { 0.76696498884737041, 0.50000000000000000, 10.000000000000000,
7c62b943 4465 10.000000000000000, -0.69999999999999996 },
f92ab29f 4466 { 0.79056941504209477, 0.50000000000000000, 10.000000000000000,
7c62b943 4467 10.000000000000000, -0.59999999999999998 },
f92ab29f 4468 { 0.81649658092772603, 0.50000000000000000, 10.000000000000000,
7c62b943 4469 10.000000000000000, -0.50000000000000000 },
f92ab29f 4470 { 0.84515425472851657, 0.50000000000000000, 10.000000000000000,
7c62b943 4471 10.000000000000000, -0.40000000000000002 },
f92ab29f 4472 { 0.87705801930702920, 0.50000000000000000, 10.000000000000000,
7c62b943 4473 10.000000000000000, -0.30000000000000004 },
f92ab29f 4474 { 0.91287092917527690, 0.50000000000000000, 10.000000000000000,
7c62b943 4475 10.000000000000000, -0.19999999999999996 },
f92ab29f 4476 { 0.95346258924559224, 0.50000000000000000, 10.000000000000000,
7c62b943 4477 10.000000000000000, -0.099999999999999978 },
f92ab29f 4478 { 1.0000000000000000, 0.50000000000000000, 10.000000000000000,
7c62b943 4479 10.000000000000000, 0.0000000000000000 },
f92ab29f 4480 { 1.0540925533894598, 0.50000000000000000, 10.000000000000000,
7c62b943 4481 10.000000000000000, 0.10000000000000009 },
f92ab29f 4482 { 1.1180339887498949, 0.50000000000000000, 10.000000000000000,
7c62b943 4483 10.000000000000000, 0.19999999999999996 },
f92ab29f 4484 { 1.1952286093343938, 0.50000000000000000, 10.000000000000000,
7c62b943 4485 10.000000000000000, 0.30000000000000004 },
f92ab29f 4486 { 1.2909944487358056, 0.50000000000000000, 10.000000000000000,
7c62b943 4487 10.000000000000000, 0.39999999999999991 },
f92ab29f 4488 { 1.4142135623730949, 0.50000000000000000, 10.000000000000000,
7c62b943 4489 10.000000000000000, 0.50000000000000000 },
f92ab29f 4490 { 1.5811388300841900, 0.50000000000000000, 10.000000000000000,
7c62b943 4491 10.000000000000000, 0.60000000000000009 },
f92ab29f 4492 { 1.8257418583505536, 0.50000000000000000, 10.000000000000000,
7c62b943 4493 10.000000000000000, 0.69999999999999996 },
f92ab29f 4494 { 2.2360679774997898, 0.50000000000000000, 10.000000000000000,
7c62b943 4495 10.000000000000000, 0.80000000000000004 },
f92ab29f 4496 { 3.1622776601683782, 0.50000000000000000, 10.000000000000000,
7c62b943
BK
4497 10.000000000000000, 0.89999999999999991 },
4498};
4499
4500// Test function for a=0.50000000000000000, b=10.000000000000000, c=10.000000000000000.
4501template <typename Tp>
4502void test065()
4503{
4504 const Tp eps = std::numeric_limits<Tp>::epsilon();
4505 Tp max_abs_diff = -Tp(1);
4506 Tp max_abs_frac = -Tp(1);
4507 unsigned int num_datum = sizeof(data065)
4508 / sizeof(testcase_hyperg<double>);
4509 for (unsigned int i = 0; i < num_datum; ++i)
4510 {
4511 const Tp f = std::tr1::hyperg(Tp(data065[i].a), Tp(data065[i].b),
4512 Tp(data065[i].c), Tp(data065[i].x));
4513 const Tp f0 = data065[i].f0;
4514 const Tp diff = f - f0;
4515 if (std::abs(diff) > max_abs_diff)
4516 max_abs_diff = std::abs(diff);
4517 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4518 {
4519 const Tp frac = diff / f0;
4520 if (std::abs(frac) > max_abs_frac)
4521 max_abs_frac = std::abs(frac);
4522 }
4523 }
4524 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4525}
4526
4527// Test data for a=0.50000000000000000, b=20.000000000000000, c=2.0000000000000000.
4528testcase_hyperg<double> data066[] = {
f92ab29f 4529 { 0.26690449940521566, 0.50000000000000000, 20.000000000000000,
7c62b943 4530 2.0000000000000000, -0.90000000000000002 },
f92ab29f 4531 { 0.28252302866181805, 0.50000000000000000, 20.000000000000000,
7c62b943 4532 2.0000000000000000, -0.80000000000000004 },
f92ab29f 4533 { 0.30123616141153819, 0.50000000000000000, 20.000000000000000,
7c62b943 4534 2.0000000000000000, -0.69999999999999996 },
f92ab29f 4535 { 0.32421384687602628, 0.50000000000000000, 20.000000000000000,
7c62b943 4536 2.0000000000000000, -0.59999999999999998 },
f92ab29f 4537 { 0.35334630811776752, 0.50000000000000000, 20.000000000000000,
7c62b943 4538 2.0000000000000000, -0.50000000000000000 },
f92ab29f 4539 { 0.39191793127467034, 0.50000000000000000, 20.000000000000000,
7c62b943 4540 2.0000000000000000, -0.40000000000000002 },
f92ab29f 4541 { 0.44620488618129206, 0.50000000000000000, 20.000000000000000,
7c62b943 4542 2.0000000000000000, -0.30000000000000004 },
f92ab29f 4543 { 0.52980896919265685, 0.50000000000000000, 20.000000000000000,
7c62b943 4544 2.0000000000000000, -0.19999999999999996 },
f92ab29f 4545 { 0.67754711477562357, 0.50000000000000000, 20.000000000000000,
7c62b943 4546 2.0000000000000000, -0.099999999999999978 },
f92ab29f 4547 { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
7c62b943 4548 2.0000000000000000, 0.0000000000000000 },
f92ab29f 4549 { 1.9567557771780317, 0.50000000000000000, 20.000000000000000,
7c62b943 4550 2.0000000000000000, 0.10000000000000009 },
f92ab29f 4551 { 6.1816042148333086, 0.50000000000000000, 20.000000000000000,
7c62b943 4552 2.0000000000000000, 0.19999999999999996 },
f92ab29f 4553 { 35.653088618561227, 0.50000000000000000, 20.000000000000000,
7c62b943 4554 2.0000000000000000, 0.30000000000000004 },
f92ab29f 4555 { 377.51482843179906, 0.50000000000000000, 20.000000000000000,
7c62b943 4556 2.0000000000000000, 0.39999999999999991 },
f92ab29f 4557 { 7645.8816551195359, 0.50000000000000000, 20.000000000000000,
7c62b943 4558 2.0000000000000000, 0.50000000000000000 },
f92ab29f 4559 { 354791.74537980522, 0.50000000000000000, 20.000000000000000,
7c62b943 4560 2.0000000000000000, 0.60000000000000009 },
f92ab29f 4561 { 57009889.966638684, 0.50000000000000000, 20.000000000000000,
7c62b943 4562 2.0000000000000000, 0.69999999999999996 },
f92ab29f 4563 { 83771357024.863937, 0.50000000000000000, 20.000000000000000,
7c62b943 4564 2.0000000000000000, 0.80000000000000004 },
f92ab29f 4565 { 25866972896376408., 0.50000000000000000, 20.000000000000000,
7c62b943
BK
4566 2.0000000000000000, 0.89999999999999991 },
4567};
4568
4569// Test function for a=0.50000000000000000, b=20.000000000000000, c=2.0000000000000000.
4570template <typename Tp>
4571void test066()
4572{
4573 const Tp eps = std::numeric_limits<Tp>::epsilon();
4574 Tp max_abs_diff = -Tp(1);
4575 Tp max_abs_frac = -Tp(1);
4576 unsigned int num_datum = sizeof(data066)
4577 / sizeof(testcase_hyperg<double>);
4578 for (unsigned int i = 0; i < num_datum; ++i)
4579 {
4580 const Tp f = std::tr1::hyperg(Tp(data066[i].a), Tp(data066[i].b),
4581 Tp(data066[i].c), Tp(data066[i].x));
4582 const Tp f0 = data066[i].f0;
4583 const Tp diff = f - f0;
4584 if (std::abs(diff) > max_abs_diff)
4585 max_abs_diff = std::abs(diff);
4586 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4587 {
4588 const Tp frac = diff / f0;
4589 if (std::abs(frac) > max_abs_frac)
4590 max_abs_frac = std::abs(frac);
4591 }
4592 }
4593 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4594}
4595
4596// Test data for a=0.50000000000000000, b=20.000000000000000, c=4.0000000000000000.
4597testcase_hyperg<double> data067[] = {
f92ab29f 4598 { 0.40342659436153405, 0.50000000000000000, 20.000000000000000,
7c62b943 4599 4.0000000000000000, -0.90000000000000002 },
f92ab29f 4600 { 0.42420571192034318, 0.50000000000000000, 20.000000000000000,
7c62b943 4601 4.0000000000000000, -0.80000000000000004 },
f92ab29f 4602 { 0.44852768286073008, 0.50000000000000000, 20.000000000000000,
7c62b943 4603 4.0000000000000000, -0.69999999999999996 },
f92ab29f 4604 { 0.47751245808592863, 0.50000000000000000, 20.000000000000000,
7c62b943 4605 4.0000000000000000, -0.59999999999999998 },
f92ab29f 4606 { 0.51283632632707754, 0.50000000000000000, 20.000000000000000,
7c62b943 4607 4.0000000000000000, -0.50000000000000000 },
f92ab29f 4608 { 0.55713468814894307, 0.50000000000000000, 20.000000000000000,
7c62b943 4609 4.0000000000000000, -0.40000000000000002 },
f92ab29f 4610 { 0.61481320817757312, 0.50000000000000000, 20.000000000000000,
7c62b943 4611 4.0000000000000000, -0.30000000000000004 },
f92ab29f 4612 { 0.69383483410097202, 0.50000000000000000, 20.000000000000000,
7c62b943 4613 4.0000000000000000, -0.19999999999999996 },
f92ab29f 4614 { 0.81012002526006033, 0.50000000000000000, 20.000000000000000,
7c62b943 4615 4.0000000000000000, -0.099999999999999978 },
f92ab29f 4616 { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
7c62b943 4617 4.0000000000000000, 0.0000000000000000 },
f92ab29f 4618 { 1.3622225506603911, 0.50000000000000000, 20.000000000000000,
7c62b943 4619 4.0000000000000000, 0.10000000000000009 },
f92ab29f 4620 { 2.2349513086109001, 0.50000000000000000, 20.000000000000000,
7c62b943 4621 4.0000000000000000, 0.19999999999999996 },
f92ab29f 4622 { 5.1864917536761723, 0.50000000000000000, 20.000000000000000,
7c62b943 4623 4.0000000000000000, 0.30000000000000004 },
f92ab29f 4624 { 21.020560423779411, 0.50000000000000000, 20.000000000000000,
7c62b943 4625 4.0000000000000000, 0.39999999999999991 },
f92ab29f 4626 { 175.19649997100612, 0.50000000000000000, 20.000000000000000,
7c62b943 4627 4.0000000000000000, 0.50000000000000000 },
f92ab29f 4628 { 3467.1587803688708, 0.50000000000000000, 20.000000000000000,
7c62b943 4629 4.0000000000000000, 0.60000000000000009 },
f92ab29f 4630 { 225003.88683445856, 0.50000000000000000, 20.000000000000000,
7c62b943 4631 4.0000000000000000, 0.69999999999999996 },
f92ab29f 4632 { 110837674.65652709, 0.50000000000000000, 20.000000000000000,
7c62b943 4633 4.0000000000000000, 0.80000000000000004 },
f92ab29f 4634 { 6688966964170.6807, 0.50000000000000000, 20.000000000000000,
7c62b943
BK
4635 4.0000000000000000, 0.89999999999999991 },
4636};
4637
4638// Test function for a=0.50000000000000000, b=20.000000000000000, c=4.0000000000000000.
4639template <typename Tp>
4640void test067()
4641{
4642 const Tp eps = std::numeric_limits<Tp>::epsilon();
4643 Tp max_abs_diff = -Tp(1);
4644 Tp max_abs_frac = -Tp(1);
4645 unsigned int num_datum = sizeof(data067)
4646 / sizeof(testcase_hyperg<double>);
4647 for (unsigned int i = 0; i < num_datum; ++i)
4648 {
4649 const Tp f = std::tr1::hyperg(Tp(data067[i].a), Tp(data067[i].b),
4650 Tp(data067[i].c), Tp(data067[i].x));
4651 const Tp f0 = data067[i].f0;
4652 const Tp diff = f - f0;
4653 if (std::abs(diff) > max_abs_diff)
4654 max_abs_diff = std::abs(diff);
4655 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4656 {
4657 const Tp frac = diff / f0;
4658 if (std::abs(frac) > max_abs_frac)
4659 max_abs_frac = std::abs(frac);
4660 }
4661 }
4662 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4663}
4664
4665// Test data for a=0.50000000000000000, b=20.000000000000000, c=6.0000000000000000.
4666testcase_hyperg<double> data068[] = {
f92ab29f 4667 { 0.48716309885816761, 0.50000000000000000, 20.000000000000000,
7c62b943 4668 6.0000000000000000, -0.90000000000000002 },
f92ab29f 4669 { 0.50965859152542281, 0.50000000000000000, 20.000000000000000,
7c62b943 4670 6.0000000000000000, -0.80000000000000004 },
f92ab29f 4671 { 0.53554809210658971, 0.50000000000000000, 20.000000000000000,
7c62b943 4672 6.0000000000000000, -0.69999999999999996 },
f92ab29f 4673 { 0.56576689207507136, 0.50000000000000000, 20.000000000000000,
7c62b943 4674 6.0000000000000000, -0.59999999999999998 },
f92ab29f 4675 { 0.60164849637133688, 0.50000000000000000, 20.000000000000000,
7c62b943 4676 6.0000000000000000, -0.50000000000000000 },
f92ab29f 4677 { 0.64516711595404375, 0.50000000000000000, 20.000000000000000,
7c62b943 4678 6.0000000000000000, -0.40000000000000002 },
f92ab29f 4679 { 0.69938278735493542, 0.50000000000000000, 20.000000000000000,
7c62b943 4680 6.0000000000000000, -0.30000000000000004 },
f92ab29f 4681 { 0.76931621518401860, 0.50000000000000000, 20.000000000000000,
7c62b943 4682 6.0000000000000000, -0.19999999999999996 },
f92ab29f 4683 { 0.86381808725530695, 0.50000000000000000, 20.000000000000000,
7c62b943 4684 6.0000000000000000, -0.099999999999999978 },
f92ab29f 4685 { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
7c62b943 4686 6.0000000000000000, 0.0000000000000000 },
f92ab29f 4687 { 1.2152051956815531, 0.50000000000000000, 20.000000000000000,
7c62b943 4688 6.0000000000000000, 0.10000000000000009 },
f92ab29f 4689 { 1.6052546785425543, 0.50000000000000000, 20.000000000000000,
7c62b943 4690 6.0000000000000000, 0.19999999999999996 },
f92ab29f 4691 { 2.4765586046012635, 0.50000000000000000, 20.000000000000000,
7c62b943 4692 6.0000000000000000, 0.30000000000000004 },
f92ab29f 4693 { 5.1564492216997486, 0.50000000000000000, 20.000000000000000,
7c62b943 4694 6.0000000000000000, 0.39999999999999991 },
f92ab29f 4695 { 18.446158392136365, 0.50000000000000000, 20.000000000000000,
7c62b943 4696 6.0000000000000000, 0.50000000000000000 },
f92ab29f 4697 { 150.44577670123971, 0.50000000000000000, 20.000000000000000,
7c62b943 4698 6.0000000000000000, 0.60000000000000009 },
f92ab29f 4699 { 3862.6317400115768, 0.50000000000000000, 20.000000000000000,
7c62b943 4700 6.0000000000000000, 0.69999999999999996 },
f92ab29f 4701 { 632428.34833625401, 0.50000000000000000, 20.000000000000000,
7c62b943 4702 6.0000000000000000, 0.80000000000000004 },
f92ab29f 4703 { 7426927663.3808765, 0.50000000000000000, 20.000000000000000,
7c62b943
BK
4704 6.0000000000000000, 0.89999999999999991 },
4705};
4706
4707// Test function for a=0.50000000000000000, b=20.000000000000000, c=6.0000000000000000.
4708template <typename Tp>
4709void test068()
4710{
4711 const Tp eps = std::numeric_limits<Tp>::epsilon();
4712 Tp max_abs_diff = -Tp(1);
4713 Tp max_abs_frac = -Tp(1);
4714 unsigned int num_datum = sizeof(data068)
4715 / sizeof(testcase_hyperg<double>);
4716 for (unsigned int i = 0; i < num_datum; ++i)
4717 {
4718 const Tp f = std::tr1::hyperg(Tp(data068[i].a), Tp(data068[i].b),
4719 Tp(data068[i].c), Tp(data068[i].x));
4720 const Tp f0 = data068[i].f0;
4721 const Tp diff = f - f0;
4722 if (std::abs(diff) > max_abs_diff)
4723 max_abs_diff = std::abs(diff);
4724 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4725 {
4726 const Tp frac = diff / f0;
4727 if (std::abs(frac) > max_abs_frac)
4728 max_abs_frac = std::abs(frac);
4729 }
4730 }
4731 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4732}
4733
4734// Test data for a=0.50000000000000000, b=20.000000000000000, c=8.0000000000000000.
4735testcase_hyperg<double> data069[] = {
f92ab29f 4736 { 0.54703266209548362, 0.50000000000000000, 20.000000000000000,
7c62b943 4737 8.0000000000000000, -0.90000000000000002 },
f92ab29f 4738 { 0.56997321774144971, 0.50000000000000000, 20.000000000000000,
7c62b943 4739 8.0000000000000000, -0.80000000000000004 },
f92ab29f 4740 { 0.59603026159654970, 0.50000000000000000, 20.000000000000000,
7c62b943 4741 8.0000000000000000, -0.69999999999999996 },
f92ab29f 4742 { 0.62596978851120511, 0.50000000000000000, 20.000000000000000,
7c62b943 4743 8.0000000000000000, -0.59999999999999998 },
f92ab29f 4744 { 0.66084565876898926, 0.50000000000000000, 20.000000000000000,
7c62b943 4745 8.0000000000000000, -0.50000000000000000 },
f92ab29f 4746 { 0.70215256667232839, 0.50000000000000000, 20.000000000000000,
7c62b943 4747 8.0000000000000000, -0.40000000000000002 },
f92ab29f 4748 { 0.75208916592008568, 0.50000000000000000, 20.000000000000000,
7c62b943 4749 8.0000000000000000, -0.30000000000000004 },
f92ab29f 4750 { 0.81403631111658648, 0.50000000000000000, 20.000000000000000,
7c62b943 4751 8.0000000000000000, -0.19999999999999996 },
f92ab29f 4752 { 0.89348608489854608, 0.50000000000000000, 20.000000000000000,
7c62b943 4753 8.0000000000000000, -0.099999999999999978 },
f92ab29f 4754 { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
7c62b943 4755 8.0000000000000000, 0.0000000000000000 },
f92ab29f 4756 { 1.1517793185139173, 0.50000000000000000, 20.000000000000000,
7c62b943 4757 8.0000000000000000, 0.10000000000000009 },
f92ab29f 4758 { 1.3878110313656598, 0.50000000000000000, 20.000000000000000,
7c62b943 4759 8.0000000000000000, 0.19999999999999996 },
f92ab29f 4760 { 1.8061071794572381, 0.50000000000000000, 20.000000000000000,
7c62b943 4761 8.0000000000000000, 0.30000000000000004 },
f92ab29f 4762 { 2.7148594517859586, 0.50000000000000000, 20.000000000000000,
7c62b943 4763 8.0000000000000000, 0.39999999999999991 },
f92ab29f 4764 { 5.4529435709049361, 0.50000000000000000, 20.000000000000000,
7c62b943 4765 8.0000000000000000, 0.50000000000000000 },
f92ab29f 4766 { 19.487310275377109, 0.50000000000000000, 20.000000000000000,
7c62b943 4767 8.0000000000000000, 0.60000000000000009 },
f92ab29f 4768 { 191.69079165937470, 0.50000000000000000, 20.000000000000000,
7c62b943 4769 8.0000000000000000, 0.69999999999999996 },
f92ab29f 4770 { 10218.543981792311, 0.50000000000000000, 20.000000000000000,
7c62b943 4771 8.0000000000000000, 0.80000000000000004 },
f92ab29f 4772 { 23160836.646583911, 0.50000000000000000, 20.000000000000000,
7c62b943
BK
4773 8.0000000000000000, 0.89999999999999991 },
4774};
4775
4776// Test function for a=0.50000000000000000, b=20.000000000000000, c=8.0000000000000000.
4777template <typename Tp>
4778void test069()
4779{
4780 const Tp eps = std::numeric_limits<Tp>::epsilon();
4781 Tp max_abs_diff = -Tp(1);
4782 Tp max_abs_frac = -Tp(1);
4783 unsigned int num_datum = sizeof(data069)
4784 / sizeof(testcase_hyperg<double>);
4785 for (unsigned int i = 0; i < num_datum; ++i)
4786 {
4787 const Tp f = std::tr1::hyperg(Tp(data069[i].a), Tp(data069[i].b),
4788 Tp(data069[i].c), Tp(data069[i].x));
4789 const Tp f0 = data069[i].f0;
4790 const Tp diff = f - f0;
4791 if (std::abs(diff) > max_abs_diff)
4792 max_abs_diff = std::abs(diff);
4793 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4794 {
4795 const Tp frac = diff / f0;
4796 if (std::abs(frac) > max_abs_frac)
4797 max_abs_frac = std::abs(frac);
4798 }
4799 }
4800 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4801}
4802
4803// Test data for a=0.50000000000000000, b=20.000000000000000, c=10.000000000000000.
4804testcase_hyperg<double> data070[] = {
f92ab29f 4805 { 0.59292067298616002, 0.50000000000000000, 20.000000000000000,
7c62b943 4806 10.000000000000000, -0.90000000000000002 },
f92ab29f 4807 { 0.61572496720679915, 0.50000000000000000, 20.000000000000000,
7c62b943 4808 10.000000000000000, -0.80000000000000004 },
f92ab29f 4809 { 0.64135339122875623, 0.50000000000000000, 20.000000000000000,
7c62b943 4810 10.000000000000000, -0.69999999999999996 },
f92ab29f 4811 { 0.67043457419280483, 0.50000000000000000, 20.000000000000000,
7c62b943 4812 10.000000000000000, -0.59999999999999998 },
f92ab29f 4813 { 0.70380956268170980, 0.50000000000000000, 20.000000000000000,
7c62b943 4814 10.000000000000000, -0.50000000000000000 },
f92ab29f 4815 { 0.74263251901495231, 0.50000000000000000, 20.000000000000000,
7c62b943 4816 10.000000000000000, -0.40000000000000002 },
f92ab29f 4817 { 0.78853555445528278, 0.50000000000000000, 20.000000000000000,
7c62b943 4818 10.000000000000000, -0.30000000000000004 },
f92ab29f 4819 { 0.84391122775673766, 0.50000000000000000, 20.000000000000000,
7c62b943 4820 10.000000000000000, -0.19999999999999996 },
f92ab29f 4821 { 0.91242401018807406, 0.50000000000000000, 20.000000000000000,
7c62b943 4822 10.000000000000000, -0.099999999999999978 },
f92ab29f 4823 { 1.0000000000000000, 0.50000000000000000, 20.000000000000000,
7c62b943 4824 10.000000000000000, 0.0000000000000000 },
f92ab29f 4825 { 1.1169059681274873, 0.50000000000000000, 20.000000000000000,
7c62b943 4826 10.000000000000000, 0.10000000000000009 },
f92ab29f 4827 { 1.2825928301302667, 0.50000000000000000, 20.000000000000000,
7c62b943 4828 10.000000000000000, 0.19999999999999996 },
f92ab29f 4829 { 1.5385937789924939, 0.50000000000000000, 20.000000000000000,
7c62b943 4830 10.000000000000000, 0.30000000000000004 },
f92ab29f 4831 { 1.9895771187893898, 0.50000000000000000, 20.000000000000000,
7c62b943 4832 10.000000000000000, 0.39999999999999991 },
f92ab29f 4833 { 2.9707335806970168, 0.50000000000000000, 20.000000000000000,
7c62b943 4834 10.000000000000000, 0.50000000000000000 },
f92ab29f 4835 { 6.0299506157180467, 0.50000000000000000, 20.000000000000000,
7c62b943 4836 10.000000000000000, 0.60000000000000009 },
f92ab29f 4837 { 24.259090336955577, 0.50000000000000000, 20.000000000000000,
7c62b943 4838 10.000000000000000, 0.69999999999999996 },
f92ab29f 4839 { 406.27267173257223, 0.50000000000000000, 20.000000000000000,
7c62b943 4840 10.000000000000000, 0.80000000000000004 },
f92ab29f 4841 { 174330.03997220192, 0.50000000000000000, 20.000000000000000,
7c62b943
BK
4842 10.000000000000000, 0.89999999999999991 },
4843};
4844
4845// Test function for a=0.50000000000000000, b=20.000000000000000, c=10.000000000000000.
4846template <typename Tp>
4847void test070()
4848{
4849 const Tp eps = std::numeric_limits<Tp>::epsilon();
4850 Tp max_abs_diff = -Tp(1);
4851 Tp max_abs_frac = -Tp(1);
4852 unsigned int num_datum = sizeof(data070)
4853 / sizeof(testcase_hyperg<double>);
4854 for (unsigned int i = 0; i < num_datum; ++i)
4855 {
4856 const Tp f = std::tr1::hyperg(Tp(data070[i].a), Tp(data070[i].b),
4857 Tp(data070[i].c), Tp(data070[i].x));
4858 const Tp f0 = data070[i].f0;
4859 const Tp diff = f - f0;
4860 if (std::abs(diff) > max_abs_diff)
4861 max_abs_diff = std::abs(diff);
4862 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4863 {
4864 const Tp frac = diff / f0;
4865 if (std::abs(frac) > max_abs_frac)
4866 max_abs_frac = std::abs(frac);
4867 }
4868 }
4869 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4870}
4871
4872// Test data for a=1.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
4873testcase_hyperg<double> data071[] = {
f92ab29f 4874 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4875 2.0000000000000000, -0.90000000000000002 },
f92ab29f 4876 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4877 2.0000000000000000, -0.80000000000000004 },
f92ab29f 4878 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4879 2.0000000000000000, -0.69999999999999996 },
f92ab29f 4880 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4881 2.0000000000000000, -0.59999999999999998 },
f92ab29f 4882 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4883 2.0000000000000000, -0.50000000000000000 },
f92ab29f 4884 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4885 2.0000000000000000, -0.40000000000000002 },
f92ab29f 4886 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4887 2.0000000000000000, -0.30000000000000004 },
f92ab29f 4888 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4889 2.0000000000000000, -0.19999999999999996 },
f92ab29f 4890 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4891 2.0000000000000000, -0.099999999999999978 },
f92ab29f 4892 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4893 2.0000000000000000, 0.0000000000000000 },
f92ab29f 4894 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4895 2.0000000000000000, 0.10000000000000009 },
f92ab29f 4896 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4897 2.0000000000000000, 0.19999999999999996 },
f92ab29f 4898 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4899 2.0000000000000000, 0.30000000000000004 },
f92ab29f 4900 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4901 2.0000000000000000, 0.39999999999999991 },
f92ab29f 4902 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4903 2.0000000000000000, 0.50000000000000000 },
f92ab29f 4904 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4905 2.0000000000000000, 0.60000000000000009 },
f92ab29f 4906 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4907 2.0000000000000000, 0.69999999999999996 },
f92ab29f 4908 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4909 2.0000000000000000, 0.80000000000000004 },
f92ab29f 4910 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943
BK
4911 2.0000000000000000, 0.89999999999999991 },
4912};
4913
4914// Test function for a=1.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
4915template <typename Tp>
4916void test071()
4917{
4918 const Tp eps = std::numeric_limits<Tp>::epsilon();
4919 Tp max_abs_diff = -Tp(1);
4920 Tp max_abs_frac = -Tp(1);
4921 unsigned int num_datum = sizeof(data071)
4922 / sizeof(testcase_hyperg<double>);
4923 for (unsigned int i = 0; i < num_datum; ++i)
4924 {
4925 const Tp f = std::tr1::hyperg(Tp(data071[i].a), Tp(data071[i].b),
4926 Tp(data071[i].c), Tp(data071[i].x));
4927 const Tp f0 = data071[i].f0;
4928 const Tp diff = f - f0;
4929 if (std::abs(diff) > max_abs_diff)
4930 max_abs_diff = std::abs(diff);
4931 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
4932 {
4933 const Tp frac = diff / f0;
4934 if (std::abs(frac) > max_abs_frac)
4935 max_abs_frac = std::abs(frac);
4936 }
4937 }
4938 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
4939}
4940
4941// Test data for a=1.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
4942testcase_hyperg<double> data072[] = {
f92ab29f 4943 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4944 4.0000000000000000, -0.90000000000000002 },
f92ab29f 4945 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4946 4.0000000000000000, -0.80000000000000004 },
f92ab29f 4947 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4948 4.0000000000000000, -0.69999999999999996 },
f92ab29f 4949 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4950 4.0000000000000000, -0.59999999999999998 },
f92ab29f 4951 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4952 4.0000000000000000, -0.50000000000000000 },
f92ab29f 4953 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4954 4.0000000000000000, -0.40000000000000002 },
f92ab29f 4955 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4956 4.0000000000000000, -0.30000000000000004 },
f92ab29f 4957 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4958 4.0000000000000000, -0.19999999999999996 },
f92ab29f 4959 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4960 4.0000000000000000, -0.099999999999999978 },
f92ab29f 4961 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4962 4.0000000000000000, 0.0000000000000000 },
f92ab29f 4963 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4964 4.0000000000000000, 0.10000000000000009 },
f92ab29f 4965 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4966 4.0000000000000000, 0.19999999999999996 },
f92ab29f 4967 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4968 4.0000000000000000, 0.30000000000000004 },
f92ab29f 4969 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4970 4.0000000000000000, 0.39999999999999991 },
f92ab29f 4971 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4972 4.0000000000000000, 0.50000000000000000 },
f92ab29f 4973 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4974 4.0000000000000000, 0.60000000000000009 },
f92ab29f 4975 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4976 4.0000000000000000, 0.69999999999999996 },
f92ab29f 4977 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 4978 4.0000000000000000, 0.80000000000000004 },
f92ab29f 4979 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943
BK
4980 4.0000000000000000, 0.89999999999999991 },
4981};
4982
4983// Test function for a=1.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
4984template <typename Tp>
4985void test072()
4986{
4987 const Tp eps = std::numeric_limits<Tp>::epsilon();
4988 Tp max_abs_diff = -Tp(1);
4989 Tp max_abs_frac = -Tp(1);
4990 unsigned int num_datum = sizeof(data072)
4991 / sizeof(testcase_hyperg<double>);
4992 for (unsigned int i = 0; i < num_datum; ++i)
4993 {
4994 const Tp f = std::tr1::hyperg(Tp(data072[i].a), Tp(data072[i].b),
4995 Tp(data072[i].c), Tp(data072[i].x));
4996 const Tp f0 = data072[i].f0;
4997 const Tp diff = f - f0;
4998 if (std::abs(diff) > max_abs_diff)
4999 max_abs_diff = std::abs(diff);
5000 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5001 {
5002 const Tp frac = diff / f0;
5003 if (std::abs(frac) > max_abs_frac)
5004 max_abs_frac = std::abs(frac);
5005 }
5006 }
5007 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5008}
5009
5010// Test data for a=1.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
5011testcase_hyperg<double> data073[] = {
f92ab29f 5012 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5013 6.0000000000000000, -0.90000000000000002 },
f92ab29f 5014 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5015 6.0000000000000000, -0.80000000000000004 },
f92ab29f 5016 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5017 6.0000000000000000, -0.69999999999999996 },
f92ab29f 5018 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5019 6.0000000000000000, -0.59999999999999998 },
f92ab29f 5020 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5021 6.0000000000000000, -0.50000000000000000 },
f92ab29f 5022 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5023 6.0000000000000000, -0.40000000000000002 },
f92ab29f 5024 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5025 6.0000000000000000, -0.30000000000000004 },
f92ab29f 5026 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5027 6.0000000000000000, -0.19999999999999996 },
f92ab29f 5028 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5029 6.0000000000000000, -0.099999999999999978 },
f92ab29f 5030 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5031 6.0000000000000000, 0.0000000000000000 },
f92ab29f 5032 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5033 6.0000000000000000, 0.10000000000000009 },
f92ab29f 5034 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5035 6.0000000000000000, 0.19999999999999996 },
f92ab29f 5036 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5037 6.0000000000000000, 0.30000000000000004 },
f92ab29f 5038 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5039 6.0000000000000000, 0.39999999999999991 },
f92ab29f 5040 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5041 6.0000000000000000, 0.50000000000000000 },
f92ab29f 5042 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5043 6.0000000000000000, 0.60000000000000009 },
f92ab29f 5044 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5045 6.0000000000000000, 0.69999999999999996 },
f92ab29f 5046 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5047 6.0000000000000000, 0.80000000000000004 },
f92ab29f 5048 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943
BK
5049 6.0000000000000000, 0.89999999999999991 },
5050};
5051
5052// Test function for a=1.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
5053template <typename Tp>
5054void test073()
5055{
5056 const Tp eps = std::numeric_limits<Tp>::epsilon();
5057 Tp max_abs_diff = -Tp(1);
5058 Tp max_abs_frac = -Tp(1);
5059 unsigned int num_datum = sizeof(data073)
5060 / sizeof(testcase_hyperg<double>);
5061 for (unsigned int i = 0; i < num_datum; ++i)
5062 {
5063 const Tp f = std::tr1::hyperg(Tp(data073[i].a), Tp(data073[i].b),
5064 Tp(data073[i].c), Tp(data073[i].x));
5065 const Tp f0 = data073[i].f0;
5066 const Tp diff = f - f0;
5067 if (std::abs(diff) > max_abs_diff)
5068 max_abs_diff = std::abs(diff);
5069 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5070 {
5071 const Tp frac = diff / f0;
5072 if (std::abs(frac) > max_abs_frac)
5073 max_abs_frac = std::abs(frac);
5074 }
5075 }
5076 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5077}
5078
5079// Test data for a=1.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
5080testcase_hyperg<double> data074[] = {
f92ab29f 5081 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5082 8.0000000000000000, -0.90000000000000002 },
f92ab29f 5083 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5084 8.0000000000000000, -0.80000000000000004 },
f92ab29f 5085 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5086 8.0000000000000000, -0.69999999999999996 },
f92ab29f 5087 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5088 8.0000000000000000, -0.59999999999999998 },
f92ab29f 5089 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5090 8.0000000000000000, -0.50000000000000000 },
f92ab29f 5091 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5092 8.0000000000000000, -0.40000000000000002 },
f92ab29f 5093 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5094 8.0000000000000000, -0.30000000000000004 },
f92ab29f 5095 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5096 8.0000000000000000, -0.19999999999999996 },
f92ab29f 5097 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5098 8.0000000000000000, -0.099999999999999978 },
f92ab29f 5099 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5100 8.0000000000000000, 0.0000000000000000 },
f92ab29f 5101 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5102 8.0000000000000000, 0.10000000000000009 },
f92ab29f 5103 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5104 8.0000000000000000, 0.19999999999999996 },
f92ab29f 5105 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5106 8.0000000000000000, 0.30000000000000004 },
f92ab29f 5107 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5108 8.0000000000000000, 0.39999999999999991 },
f92ab29f 5109 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5110 8.0000000000000000, 0.50000000000000000 },
f92ab29f 5111 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5112 8.0000000000000000, 0.60000000000000009 },
f92ab29f 5113 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5114 8.0000000000000000, 0.69999999999999996 },
f92ab29f 5115 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5116 8.0000000000000000, 0.80000000000000004 },
f92ab29f 5117 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943
BK
5118 8.0000000000000000, 0.89999999999999991 },
5119};
5120
5121// Test function for a=1.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
5122template <typename Tp>
5123void test074()
5124{
5125 const Tp eps = std::numeric_limits<Tp>::epsilon();
5126 Tp max_abs_diff = -Tp(1);
5127 Tp max_abs_frac = -Tp(1);
5128 unsigned int num_datum = sizeof(data074)
5129 / sizeof(testcase_hyperg<double>);
5130 for (unsigned int i = 0; i < num_datum; ++i)
5131 {
5132 const Tp f = std::tr1::hyperg(Tp(data074[i].a), Tp(data074[i].b),
5133 Tp(data074[i].c), Tp(data074[i].x));
5134 const Tp f0 = data074[i].f0;
5135 const Tp diff = f - f0;
5136 if (std::abs(diff) > max_abs_diff)
5137 max_abs_diff = std::abs(diff);
5138 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5139 {
5140 const Tp frac = diff / f0;
5141 if (std::abs(frac) > max_abs_frac)
5142 max_abs_frac = std::abs(frac);
5143 }
5144 }
5145 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5146}
5147
5148// Test data for a=1.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
5149testcase_hyperg<double> data075[] = {
f92ab29f 5150 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5151 10.000000000000000, -0.90000000000000002 },
f92ab29f 5152 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5153 10.000000000000000, -0.80000000000000004 },
f92ab29f 5154 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5155 10.000000000000000, -0.69999999999999996 },
f92ab29f 5156 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5157 10.000000000000000, -0.59999999999999998 },
f92ab29f 5158 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5159 10.000000000000000, -0.50000000000000000 },
f92ab29f 5160 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5161 10.000000000000000, -0.40000000000000002 },
f92ab29f 5162 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5163 10.000000000000000, -0.30000000000000004 },
f92ab29f 5164 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5165 10.000000000000000, -0.19999999999999996 },
f92ab29f 5166 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5167 10.000000000000000, -0.099999999999999978 },
f92ab29f 5168 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5169 10.000000000000000, 0.0000000000000000 },
f92ab29f 5170 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5171 10.000000000000000, 0.10000000000000009 },
f92ab29f 5172 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5173 10.000000000000000, 0.19999999999999996 },
f92ab29f 5174 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5175 10.000000000000000, 0.30000000000000004 },
f92ab29f 5176 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5177 10.000000000000000, 0.39999999999999991 },
f92ab29f 5178 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5179 10.000000000000000, 0.50000000000000000 },
f92ab29f 5180 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5181 10.000000000000000, 0.60000000000000009 },
f92ab29f 5182 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5183 10.000000000000000, 0.69999999999999996 },
f92ab29f 5184 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943 5185 10.000000000000000, 0.80000000000000004 },
f92ab29f 5186 { 1.0000000000000000, 1.0000000000000000, 0.0000000000000000,
7c62b943
BK
5187 10.000000000000000, 0.89999999999999991 },
5188};
5189
5190// Test function for a=1.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
5191template <typename Tp>
5192void test075()
5193{
5194 const Tp eps = std::numeric_limits<Tp>::epsilon();
5195 Tp max_abs_diff = -Tp(1);
5196 Tp max_abs_frac = -Tp(1);
5197 unsigned int num_datum = sizeof(data075)
5198 / sizeof(testcase_hyperg<double>);
5199 for (unsigned int i = 0; i < num_datum; ++i)
5200 {
5201 const Tp f = std::tr1::hyperg(Tp(data075[i].a), Tp(data075[i].b),
5202 Tp(data075[i].c), Tp(data075[i].x));
5203 const Tp f0 = data075[i].f0;
5204 const Tp diff = f - f0;
5205 if (std::abs(diff) > max_abs_diff)
5206 max_abs_diff = std::abs(diff);
5207 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5208 {
5209 const Tp frac = diff / f0;
5210 if (std::abs(frac) > max_abs_frac)
5211 max_abs_frac = std::abs(frac);
5212 }
5213 }
5214 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5215}
5216
5217// Test data for a=1.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
5218testcase_hyperg<double> data076[] = {
f92ab29f 5219 { 0.84089972268671609, 1.0000000000000000, 0.50000000000000000,
7c62b943 5220 2.0000000000000000, -0.90000000000000002 },
f92ab29f 5221 { 0.85410196624968437, 1.0000000000000000, 0.50000000000000000,
7c62b943 5222 2.0000000000000000, -0.80000000000000004 },
f92ab29f 5223 { 0.86811566011579933, 1.0000000000000000, 0.50000000000000000,
7c62b943 5224 2.0000000000000000, -0.69999999999999996 },
f92ab29f 5225 { 0.88303688022450544, 1.0000000000000000, 0.50000000000000000,
7c62b943 5226 2.0000000000000000, -0.59999999999999998 },
f92ab29f 5227 { 0.89897948556635565, 1.0000000000000000, 0.50000000000000000,
7c62b943 5228 2.0000000000000000, -0.50000000000000000 },
f92ab29f 5229 { 0.91607978309961580, 1.0000000000000000, 0.50000000000000000,
7c62b943 5230 2.0000000000000000, -0.40000000000000002 },
f92ab29f 5231 { 0.93450283399425305, 1.0000000000000000, 0.50000000000000000,
7c62b943 5232 2.0000000000000000, -0.30000000000000004 },
f92ab29f 5233 { 0.95445115010332193, 1.0000000000000000, 0.50000000000000000,
7c62b943 5234 2.0000000000000000, -0.19999999999999996 },
f92ab29f 5235 { 0.97617696340303095, 1.0000000000000000, 0.50000000000000000,
7c62b943 5236 2.0000000000000000, -0.099999999999999978 },
f92ab29f 5237 { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
7c62b943 5238 2.0000000000000000, 0.0000000000000000 },
f92ab29f 5239 { 1.0263340389897240, 1.0000000000000000, 0.50000000000000000,
7c62b943 5240 2.0000000000000000, 0.10000000000000009 },
f92ab29f 5241 { 1.0557280900008410, 1.0000000000000000, 0.50000000000000000,
7c62b943 5242 2.0000000000000000, 0.19999999999999996 },
f92ab29f 5243 { 1.0889331564394962, 1.0000000000000000, 0.50000000000000000,
7c62b943 5244 2.0000000000000000, 0.30000000000000004 },
f92ab29f 5245 { 1.1270166537925830, 1.0000000000000000, 0.50000000000000000,
7c62b943 5246 2.0000000000000000, 0.39999999999999991 },
f92ab29f 5247 { 1.1715728752538095, 1.0000000000000000, 0.50000000000000000,
7c62b943 5248 2.0000000000000000, 0.50000000000000000 },
f92ab29f 5249 { 1.2251482265544145, 1.0000000000000000, 0.50000000000000000,
7c62b943 5250 2.0000000000000000, 0.60000000000000009 },
f92ab29f 5251 { 1.2922212642709541, 1.0000000000000000, 0.50000000000000000,
7c62b943 5252 2.0000000000000000, 0.69999999999999996 },
f92ab29f 5253 { 1.3819660112501042, 1.0000000000000000, 0.50000000000000000,
7c62b943 5254 2.0000000000000000, 0.80000000000000004 },
f92ab29f 5255 { 1.5194938532959119, 1.0000000000000000, 0.50000000000000000,
7c62b943
BK
5256 2.0000000000000000, 0.89999999999999991 },
5257};
5258
5259// Test function for a=1.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
5260template <typename Tp>
5261void test076()
5262{
5263 const Tp eps = std::numeric_limits<Tp>::epsilon();
5264 Tp max_abs_diff = -Tp(1);
5265 Tp max_abs_frac = -Tp(1);
5266 unsigned int num_datum = sizeof(data076)
5267 / sizeof(testcase_hyperg<double>);
5268 for (unsigned int i = 0; i < num_datum; ++i)
5269 {
5270 const Tp f = std::tr1::hyperg(Tp(data076[i].a), Tp(data076[i].b),
5271 Tp(data076[i].c), Tp(data076[i].x));
5272 const Tp f0 = data076[i].f0;
5273 const Tp diff = f - f0;
5274 if (std::abs(diff) > max_abs_diff)
5275 max_abs_diff = std::abs(diff);
5276 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5277 {
5278 const Tp frac = diff / f0;
5279 if (std::abs(frac) > max_abs_frac)
5280 max_abs_frac = std::abs(frac);
5281 }
5282 }
5283 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5284}
5285
5286// Test data for a=1.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
5287testcase_hyperg<double> data077[] = {
f92ab29f 5288 { 0.90992197313391499, 1.0000000000000000, 0.50000000000000000,
7c62b943 5289 4.0000000000000000, -0.90000000000000002 },
f92ab29f 5290 { 0.91822592662244507, 1.0000000000000000, 0.50000000000000000,
7c62b943 5291 4.0000000000000000, -0.80000000000000004 },
f92ab29f 5292 { 0.92687104566419531, 1.0000000000000000, 0.50000000000000000,
7c62b943 5293 4.0000000000000000, -0.69999999999999996 },
f92ab29f 5294 { 0.93588628166548815, 1.0000000000000000, 0.50000000000000000,
7c62b943 5295 4.0000000000000000, -0.59999999999999998 },
f92ab29f 5296 { 0.94530459215552909, 1.0000000000000000, 0.50000000000000000,
7c62b943 5297 4.0000000000000000, -0.50000000000000000 },
f92ab29f 5298 { 0.95516374875247467, 1.0000000000000000, 0.50000000000000000,
7c62b943 5299 4.0000000000000000, -0.40000000000000002 },
f92ab29f 5300 { 0.96550736800511827, 1.0000000000000000, 0.50000000000000000,
7c62b943 5301 4.0000000000000000, -0.30000000000000004 },
f92ab29f 5302 { 0.97638624595136270, 1.0000000000000000, 0.50000000000000000,
7c62b943 5303 4.0000000000000000, -0.19999999999999996 },
f92ab29f 5304 { 0.98786011482678993, 1.0000000000000000, 0.50000000000000000,
7c62b943 5305 4.0000000000000000, -0.099999999999999978 },
f92ab29f 5306 { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
7c62b943 5307 4.0000000000000000, 0.0000000000000000 },
f92ab29f 5308 { 1.0128914530682316, 1.0000000000000000, 0.50000000000000000,
7c62b943 5309 4.0000000000000000, 0.10000000000000009 },
f92ab29f 5310 { 1.0266391040215350, 1.0000000000000000, 0.50000000000000000,
7c62b943 5311 4.0000000000000000, 0.19999999999999996 },
f92ab29f 5312 { 1.0413732738729464, 1.0000000000000000, 0.50000000000000000,
7c62b943 5313 4.0000000000000000, 0.30000000000000004 },
f92ab29f 5314 { 1.0572599536532992, 1.0000000000000000, 0.50000000000000000,
7c62b943 5315 4.0000000000000000, 0.39999999999999991 },
f92ab29f 5316 { 1.0745166004060953, 1.0000000000000000, 0.50000000000000000,
7c62b943 5317 4.0000000000000000, 0.50000000000000000 },
f92ab29f 5318 { 1.0934387388831386, 1.0000000000000000, 0.50000000000000000,
7c62b943 5319 4.0000000000000000, 0.60000000000000009 },
f92ab29f 5320 { 1.1144486980714641, 1.0000000000000000, 0.50000000000000000,
7c62b943 5321 4.0000000000000000, 0.69999999999999996 },
f92ab29f 5322 { 1.1381966011250106, 1.0000000000000000, 0.50000000000000000,
7c62b943 5323 4.0000000000000000, 0.80000000000000004 },
f92ab29f 5324 { 1.1658171625342397, 1.0000000000000000, 0.50000000000000000,
7c62b943
BK
5325 4.0000000000000000, 0.89999999999999991 },
5326};
5327
5328// Test function for a=1.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
5329template <typename Tp>
5330void test077()
5331{
5332 const Tp eps = std::numeric_limits<Tp>::epsilon();
5333 Tp max_abs_diff = -Tp(1);
5334 Tp max_abs_frac = -Tp(1);
5335 unsigned int num_datum = sizeof(data077)
5336 / sizeof(testcase_hyperg<double>);
5337 for (unsigned int i = 0; i < num_datum; ++i)
5338 {
5339 const Tp f = std::tr1::hyperg(Tp(data077[i].a), Tp(data077[i].b),
5340 Tp(data077[i].c), Tp(data077[i].x));
5341 const Tp f0 = data077[i].f0;
5342 const Tp diff = f - f0;
5343 if (std::abs(diff) > max_abs_diff)
5344 max_abs_diff = std::abs(diff);
5345 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5346 {
5347 const Tp frac = diff / f0;
5348 if (std::abs(frac) > max_abs_frac)
5349 max_abs_frac = std::abs(frac);
5350 }
5351 }
5352 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5353}
5354
5355// Test data for a=1.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
5356testcase_hyperg<double> data078[] = {
f92ab29f 5357 { 0.93641908369732885, 1.0000000000000000, 0.50000000000000000,
7c62b943 5358 6.0000000000000000, -0.90000000000000002 },
f92ab29f 5359 { 0.94256349654111315, 1.0000000000000000, 0.50000000000000000,
7c62b943 5360 6.0000000000000000, -0.80000000000000004 },
f92ab29f 5361 { 0.94890138508461319, 1.0000000000000000, 0.50000000000000000,
7c62b943 5362 6.0000000000000000, -0.69999999999999996 },
f92ab29f 5363 { 0.95544578858430007, 1.0000000000000000, 0.50000000000000000,
7c62b943 5364 6.0000000000000000, -0.59999999999999998 },
f92ab29f 5365 { 0.96221121193620718, 1.0000000000000000, 0.50000000000000000,
7c62b943 5366 6.0000000000000000, -0.50000000000000000 },
f92ab29f 5367 { 0.96921386948293542, 1.0000000000000000, 0.50000000000000000,
7c62b943 5368 6.0000000000000000, -0.40000000000000002 },
f92ab29f 5369 { 0.97647198488394704, 1.0000000000000000, 0.50000000000000000,
7c62b943 5370 6.0000000000000000, -0.30000000000000004 },
f92ab29f 5371 { 0.98400616412578656, 1.0000000000000000, 0.50000000000000000,
7c62b943 5372 6.0000000000000000, -0.19999999999999996 },
f92ab29f 5373 { 0.99183986544963032, 1.0000000000000000, 0.50000000000000000,
7c62b943 5374 6.0000000000000000, -0.099999999999999978 },
f92ab29f 5375 { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
7c62b943 5376 6.0000000000000000, 0.0000000000000000 },
f92ab29f 5377 { 1.0085177124149158, 1.0000000000000000, 0.50000000000000000,
7c62b943 5378 6.0000000000000000, 0.10000000000000009 },
f92ab29f 5379 { 1.0174294150407122, 1.0000000000000000, 0.50000000000000000,
7c62b943 5380 6.0000000000000000, 0.19999999999999996 },
f92ab29f 5381 { 1.0267781897388850, 1.0000000000000000, 0.50000000000000000,
7c62b943 5382 6.0000000000000000, 0.30000000000000004 },
f92ab29f 5383 { 1.0366157405967285, 1.0000000000000000, 0.50000000000000000,
7c62b943 5384 6.0000000000000000, 0.39999999999999991 },
f92ab29f 5385 { 1.0470052068648839, 1.0000000000000000, 0.50000000000000000,
7c62b943 5386 6.0000000000000000, 0.50000000000000000 },
f92ab29f 5387 { 1.0580253905513313, 1.0000000000000000, 0.50000000000000000,
7c62b943 5388 6.0000000000000000, 0.60000000000000009 },
f92ab29f 5389 { 1.0697774741209765, 1.0000000000000000, 0.50000000000000000,
7c62b943 5390 6.0000000000000000, 0.69999999999999996 },
f92ab29f 5391 { 1.0823965556448414, 1.0000000000000000, 0.50000000000000000,
7c62b943 5392 6.0000000000000000, 0.80000000000000004 },
f92ab29f 5393 { 1.0960739512057103, 1.0000000000000000, 0.50000000000000000,
7c62b943
BK
5394 6.0000000000000000, 0.89999999999999991 },
5395};
5396
5397// Test function for a=1.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
5398template <typename Tp>
5399void test078()
5400{
5401 const Tp eps = std::numeric_limits<Tp>::epsilon();
5402 Tp max_abs_diff = -Tp(1);
5403 Tp max_abs_frac = -Tp(1);
5404 unsigned int num_datum = sizeof(data078)
5405 / sizeof(testcase_hyperg<double>);
5406 for (unsigned int i = 0; i < num_datum; ++i)
5407 {
5408 const Tp f = std::tr1::hyperg(Tp(data078[i].a), Tp(data078[i].b),
5409 Tp(data078[i].c), Tp(data078[i].x));
5410 const Tp f0 = data078[i].f0;
5411 const Tp diff = f - f0;
5412 if (std::abs(diff) > max_abs_diff)
5413 max_abs_diff = std::abs(diff);
5414 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5415 {
5416 const Tp frac = diff / f0;
5417 if (std::abs(frac) > max_abs_frac)
5418 max_abs_frac = std::abs(frac);
5419 }
5420 }
5421 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5422}
5423
5424// Test data for a=1.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
5425testcase_hyperg<double> data079[] = {
f92ab29f 5426 { 0.95069883346936235, 1.0000000000000000, 0.50000000000000000,
7c62b943 5427 8.0000000000000000, -0.90000000000000002 },
f92ab29f 5428 { 0.95559618047704165, 1.0000000000000000, 0.50000000000000000,
7c62b943 5429 8.0000000000000000, -0.80000000000000004 },
f92ab29f 5430 { 0.96061938755931653, 1.0000000000000000, 0.50000000000000000,
7c62b943 5431 8.0000000000000000, -0.69999999999999996 },
f92ab29f 5432 { 0.96577553912851344, 1.0000000000000000, 0.50000000000000000,
7c62b943 5433 8.0000000000000000, -0.59999999999999998 },
f92ab29f 5434 { 0.97107239473807716, 1.0000000000000000, 0.50000000000000000,
7c62b943 5435 8.0000000000000000, -0.50000000000000000 },
f92ab29f 5436 { 0.97651848528588503, 1.0000000000000000, 0.50000000000000000,
7c62b943 5437 8.0000000000000000, -0.40000000000000002 },
f92ab29f 5438 { 0.98212322830227139, 1.0000000000000000, 0.50000000000000000,
7c62b943 5439 8.0000000000000000, -0.30000000000000004 },
f92ab29f 5440 { 0.98789706736195781, 1.0000000000000000, 0.50000000000000000,
7c62b943 5441 8.0000000000000000, -0.19999999999999996 },
f92ab29f 5442 { 0.99385164237825074, 1.0000000000000000, 0.50000000000000000,
7c62b943 5443 8.0000000000000000, -0.099999999999999978 },
f92ab29f 5444 { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
7c62b943 5445 8.0000000000000000, 0.0000000000000000 },
f92ab29f 5446 { 1.0063568569383123, 1.0000000000000000, 0.50000000000000000,
7c62b943 5447 8.0000000000000000, 0.10000000000000009 },
f92ab29f 5448 { 1.0129389344715818, 1.0000000000000000, 0.50000000000000000,
7c62b943 5449 8.0000000000000000, 0.19999999999999996 },
f92ab29f 5450 { 1.0197653907773940, 1.0000000000000000, 0.50000000000000000,
7c62b943 5451 8.0000000000000000, 0.30000000000000004 },
f92ab29f 5452 { 1.0268583912277143, 1.0000000000000000, 0.50000000000000000,
7c62b943 5453 8.0000000000000000, 0.39999999999999991 },
f92ab29f 5454 { 1.0342438793937092, 1.0000000000000000, 0.50000000000000000,
7c62b943 5455 8.0000000000000000, 0.50000000000000000 },
f92ab29f 5456 { 1.0419526514766855, 1.0000000000000000, 0.50000000000000000,
7c62b943 5457 8.0000000000000000, 0.60000000000000009 },
f92ab29f 5458 { 1.0500219124976327, 1.0000000000000000, 0.50000000000000000,
7c62b943 5459 8.0000000000000000, 0.69999999999999996 },
f92ab29f 5460 { 1.0584976491907043, 1.0000000000000000, 0.50000000000000000,
7c62b943 5461 8.0000000000000000, 0.80000000000000004 },
f92ab29f 5462 { 1.0674385240268101, 1.0000000000000000, 0.50000000000000000,
7c62b943
BK
5463 8.0000000000000000, 0.89999999999999991 },
5464};
5465
5466// Test function for a=1.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
5467template <typename Tp>
5468void test079()
5469{
5470 const Tp eps = std::numeric_limits<Tp>::epsilon();
5471 Tp max_abs_diff = -Tp(1);
5472 Tp max_abs_frac = -Tp(1);
5473 unsigned int num_datum = sizeof(data079)
5474 / sizeof(testcase_hyperg<double>);
5475 for (unsigned int i = 0; i < num_datum; ++i)
5476 {
5477 const Tp f = std::tr1::hyperg(Tp(data079[i].a), Tp(data079[i].b),
5478 Tp(data079[i].c), Tp(data079[i].x));
5479 const Tp f0 = data079[i].f0;
5480 const Tp diff = f - f0;
5481 if (std::abs(diff) > max_abs_diff)
5482 max_abs_diff = std::abs(diff);
5483 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5484 {
5485 const Tp frac = diff / f0;
5486 if (std::abs(frac) > max_abs_frac)
5487 max_abs_frac = std::abs(frac);
5488 }
5489 }
5490 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5491}
5492
5493// Test data for a=1.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
5494testcase_hyperg<double> data080[] = {
f92ab29f 5495 { 0.95968319138913893, 1.0000000000000000, 0.50000000000000000,
7c62b943 5496 10.000000000000000, -0.90000000000000002 },
f92ab29f 5497 { 0.96376169072755768, 1.0000000000000000, 0.50000000000000000,
7c62b943 5498 10.000000000000000, -0.80000000000000004 },
f92ab29f 5499 { 0.96792900082729316, 1.0000000000000000, 0.50000000000000000,
7c62b943 5500 10.000000000000000, -0.69999999999999996 },
f92ab29f 5501 { 0.97218942798115737, 1.0000000000000000, 0.50000000000000000,
7c62b943 5502 10.000000000000000, -0.59999999999999998 },
f92ab29f 5503 { 0.97654763592586857, 1.0000000000000000, 0.50000000000000000,
7c62b943 5504 10.000000000000000, -0.50000000000000000 },
f92ab29f 5505 { 0.98100869054353856, 1.0000000000000000, 0.50000000000000000,
7c62b943 5506 10.000000000000000, -0.40000000000000002 },
f92ab29f 5507 { 0.98557811238699278, 1.0000000000000000, 0.50000000000000000,
7c62b943 5508 10.000000000000000, -0.30000000000000004 },
f92ab29f 5509 { 0.99026193885795544, 1.0000000000000000, 0.50000000000000000,
7c62b943 5510 10.000000000000000, -0.19999999999999996 },
f92ab29f 5511 { 0.99506679842072221, 1.0000000000000000, 0.50000000000000000,
7c62b943 5512 10.000000000000000, -0.099999999999999978 },
f92ab29f 5513 { 1.0000000000000000, 1.0000000000000000, 0.50000000000000000,
7c62b943 5514 10.000000000000000, 0.0000000000000000 },
f92ab29f 5515 { 1.0050696417919618, 1.0000000000000000, 0.50000000000000000,
7c62b943 5516 10.000000000000000, 0.10000000000000009 },
f92ab29f 5517 { 1.0102847452747090, 1.0000000000000000, 0.50000000000000000,
7c62b943 5518 10.000000000000000, 0.19999999999999996 },
f92ab29f 5519 { 1.0156554225057022, 1.0000000000000000, 0.50000000000000000,
7c62b943 5520 10.000000000000000, 0.30000000000000004 },
f92ab29f 5521 { 1.0211930882963096, 1.0000000000000000, 0.50000000000000000,
7c62b943 5522 10.000000000000000, 0.39999999999999991 },
f92ab29f 5523 { 1.0269107343740711, 1.0000000000000000, 0.50000000000000000,
7c62b943 5524 10.000000000000000, 0.50000000000000000 },
f92ab29f 5525 { 1.0328232917216298, 1.0000000000000000, 0.50000000000000000,
7c62b943 5526 10.000000000000000, 0.60000000000000009 },
f92ab29f 5527 { 1.0389481230247195, 1.0000000000000000, 0.50000000000000000,
7c62b943 5528 10.000000000000000, 0.69999999999999996 },
f92ab29f 5529 { 1.0453057164134614, 1.0000000000000000, 0.50000000000000000,
7c62b943 5530 10.000000000000000, 0.80000000000000004 },
f92ab29f 5531 { 1.0519207114461246, 1.0000000000000000, 0.50000000000000000,
7c62b943
BK
5532 10.000000000000000, 0.89999999999999991 },
5533};
5534
5535// Test function for a=1.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
5536template <typename Tp>
5537void test080()
5538{
5539 const Tp eps = std::numeric_limits<Tp>::epsilon();
5540 Tp max_abs_diff = -Tp(1);
5541 Tp max_abs_frac = -Tp(1);
5542 unsigned int num_datum = sizeof(data080)
5543 / sizeof(testcase_hyperg<double>);
5544 for (unsigned int i = 0; i < num_datum; ++i)
5545 {
5546 const Tp f = std::tr1::hyperg(Tp(data080[i].a), Tp(data080[i].b),
5547 Tp(data080[i].c), Tp(data080[i].x));
5548 const Tp f0 = data080[i].f0;
5549 const Tp diff = f - f0;
5550 if (std::abs(diff) > max_abs_diff)
5551 max_abs_diff = std::abs(diff);
5552 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5553 {
5554 const Tp frac = diff / f0;
5555 if (std::abs(frac) > max_abs_frac)
5556 max_abs_frac = std::abs(frac);
5557 }
5558 }
5559 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5560}
5561
5562// Test data for a=1.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
5563testcase_hyperg<double> data081[] = {
f92ab29f 5564 { 0.71317098463599404, 1.0000000000000000, 1.0000000000000000,
7c62b943 5565 2.0000000000000000, -0.90000000000000002 },
f92ab29f 5566 { 0.73473333112764871, 1.0000000000000000, 1.0000000000000000,
7c62b943 5567 2.0000000000000000, -0.80000000000000004 },
f92ab29f 5568 { 0.75804035866024377, 1.0000000000000000, 1.0000000000000000,
7c62b943 5569 2.0000000000000000, -0.69999999999999996 },
f92ab29f 5570 { 0.78333938207622600, 1.0000000000000000, 1.0000000000000000,
7c62b943 5571 2.0000000000000000, -0.59999999999999998 },
f92ab29f 5572 { 0.81093021621632877, 1.0000000000000000, 1.0000000000000000,
7c62b943 5573 2.0000000000000000, -0.50000000000000000 },
f92ab29f 5574 { 0.84118059155303226, 1.0000000000000000, 1.0000000000000000,
7c62b943 5575 2.0000000000000000, -0.40000000000000002 },
f92ab29f 5576 { 0.87454754822497005, 1.0000000000000000, 1.0000000000000000,
7c62b943 5577 2.0000000000000000, -0.30000000000000004 },
f92ab29f 5578 { 0.91160778396977304, 1.0000000000000000, 1.0000000000000000,
7c62b943 5579 2.0000000000000000, -0.19999999999999996 },
f92ab29f 5580 { 0.95310179804324857, 1.0000000000000000, 1.0000000000000000,
7c62b943 5581 2.0000000000000000, -0.099999999999999978 },
f92ab29f 5582 { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
7c62b943 5583 2.0000000000000000, 0.0000000000000000 },
f92ab29f 5584 { 1.0536051565782629, 1.0000000000000000, 1.0000000000000000,
7c62b943 5585 2.0000000000000000, 0.10000000000000009 },
f92ab29f 5586 { 1.1157177565710485, 1.0000000000000000, 1.0000000000000000,
7c62b943 5587 2.0000000000000000, 0.19999999999999996 },
f92ab29f 5588 { 1.1889164797957747, 1.0000000000000000, 1.0000000000000000,
7c62b943 5589 2.0000000000000000, 0.30000000000000004 },
f92ab29f 5590 { 1.2770640594149765, 1.0000000000000000, 1.0000000000000000,
7c62b943 5591 2.0000000000000000, 0.39999999999999991 },
f92ab29f 5592 { 1.3862943611198899, 1.0000000000000000, 1.0000000000000000,
7c62b943 5593 2.0000000000000000, 0.50000000000000000 },
f92ab29f 5594 { 1.5271512197902593, 1.0000000000000000, 1.0000000000000000,
7c62b943 5595 2.0000000000000000, 0.60000000000000009 },
f92ab29f 5596 { 1.7199611490370503, 1.0000000000000000, 1.0000000000000000,
7c62b943 5597 2.0000000000000000, 0.69999999999999996 },
f92ab29f 5598 { 2.0117973905426232, 1.0000000000000000, 1.0000000000000000,
7c62b943 5599 2.0000000000000000, 0.80000000000000004 },
f92ab29f 5600 { 2.5584278811044912, 1.0000000000000000, 1.0000000000000000,
7c62b943
BK
5601 2.0000000000000000, 0.89999999999999991 },
5602};
5603
5604// Test function for a=1.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
5605template <typename Tp>
5606void test081()
5607{
5608 const Tp eps = std::numeric_limits<Tp>::epsilon();
5609 Tp max_abs_diff = -Tp(1);
5610 Tp max_abs_frac = -Tp(1);
5611 unsigned int num_datum = sizeof(data081)
5612 / sizeof(testcase_hyperg<double>);
5613 for (unsigned int i = 0; i < num_datum; ++i)
5614 {
5615 const Tp f = std::tr1::hyperg(Tp(data081[i].a), Tp(data081[i].b),
5616 Tp(data081[i].c), Tp(data081[i].x));
5617 const Tp f0 = data081[i].f0;
5618 const Tp diff = f - f0;
5619 if (std::abs(diff) > max_abs_diff)
5620 max_abs_diff = std::abs(diff);
5621 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5622 {
5623 const Tp frac = diff / f0;
5624 if (std::abs(frac) > max_abs_frac)
5625 max_abs_frac = std::abs(frac);
5626 }
5627 }
5628 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5629}
5630
5631// Test data for a=1.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
5632testcase_hyperg<double> data082[] = {
f92ab29f 5633 { 0.83165649828125576, 1.0000000000000000, 1.0000000000000000,
7c62b943 5634 4.0000000000000000, -0.90000000000000002 },
f92ab29f 5635 { 0.84626246650116577, 1.0000000000000000, 1.0000000000000000,
7c62b943 5636 4.0000000000000000, -0.80000000000000004 },
f92ab29f 5637 { 0.86165287670267410, 1.0000000000000000, 1.0000000000000000,
7c62b943 5638 4.0000000000000000, -0.69999999999999996 },
f92ab29f 5639 { 0.87790681762615241, 1.0000000000000000, 1.0000000000000000,
7c62b943 5640 4.0000000000000000, -0.59999999999999998 },
f92ab29f 5641 { 0.89511583784087689, 1.0000000000000000, 1.0000000000000000,
7c62b943 5642 4.0000000000000000, -0.50000000000000000 },
f92ab29f 5643 { 0.91338673957393823, 1.0000000000000000, 1.0000000000000000,
7c62b943 5644 4.0000000000000000, -0.40000000000000002 },
f92ab29f 5645 { 0.93284521667331954, 1.0000000000000000, 1.0000000000000000,
7c62b943 5646 4.0000000000000000, -0.30000000000000004 },
f92ab29f 5647 { 0.95364066873549813, 1.0000000000000000, 1.0000000000000000,
7c62b943 5648 4.0000000000000000, -0.19999999999999996 },
f92ab29f 5649 { 0.97595268969924187, 1.0000000000000000, 1.0000000000000000,
7c62b943 5650 4.0000000000000000, -0.099999999999999978 },
f92ab29f 5651 { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
7c62b943 5652 4.0000000000000000, 0.0000000000000000 },
f92ab29f 5653 { 1.0260530485179122, 1.0000000000000000, 1.0000000000000000,
7c62b943 5654 4.0000000000000000, 0.10000000000000009 },
f92ab29f 5655 { 1.0544523154103413, 1.0000000000000000, 1.0000000000000000,
7c62b943 5656 4.0000000000000000, 0.19999999999999996 },
f92ab29f 5657 { 1.0856358366643180, 1.0000000000000000, 1.0000000000000000,
7c62b943 5658 4.0000000000000000, 0.30000000000000004 },
f92ab29f 5659 { 1.1201824010510930, 1.0000000000000000, 1.0000000000000000,
7c62b943 5660 4.0000000000000000, 0.39999999999999991 },
f92ab29f 5661 { 1.1588830833596719, 1.0000000000000000, 1.0000000000000000,
7c62b943 5662 4.0000000000000000, 0.50000000000000000 },
f92ab29f 5663 { 1.2028682930536780, 1.0000000000000000, 1.0000000000000000,
7c62b943 5664 4.0000000000000000, 0.60000000000000009 },
f92ab29f 5665 { 1.2538561433469468, 1.0000000000000000, 1.0000000000000000,
7c62b943 5666 4.0000000000000000, 0.69999999999999996 },
f92ab29f 5667 { 1.3147120107267418, 1.0000000000000000, 1.0000000000000000,
7c62b943 5668 4.0000000000000000, 0.80000000000000004 },
f92ab29f 5669 { 1.3910528844853491, 1.0000000000000000, 1.0000000000000000,
7c62b943
BK
5670 4.0000000000000000, 0.89999999999999991 },
5671};
5672
5673// Test function for a=1.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
5674template <typename Tp>
5675void test082()
5676{
5677 const Tp eps = std::numeric_limits<Tp>::epsilon();
5678 Tp max_abs_diff = -Tp(1);
5679 Tp max_abs_frac = -Tp(1);
5680 unsigned int num_datum = sizeof(data082)
5681 / sizeof(testcase_hyperg<double>);
5682 for (unsigned int i = 0; i < num_datum; ++i)
5683 {
5684 const Tp f = std::tr1::hyperg(Tp(data082[i].a), Tp(data082[i].b),
5685 Tp(data082[i].c), Tp(data082[i].x));
5686 const Tp f0 = data082[i].f0;
5687 const Tp diff = f - f0;
5688 if (std::abs(diff) > max_abs_diff)
5689 max_abs_diff = std::abs(diff);
5690 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5691 {
5692 const Tp frac = diff / f0;
5693 if (std::abs(frac) > max_abs_frac)
5694 max_abs_frac = std::abs(frac);
5695 }
5696 }
5697 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5698}
5699
5700// Test data for a=1.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
5701testcase_hyperg<double> data083[] = {
f92ab29f 5702 { 0.87917686994924527, 1.0000000000000000, 1.0000000000000000,
7c62b943 5703 6.0000000000000000, -0.90000000000000002 },
f92ab29f 5704 { 0.89033956110358414, 1.0000000000000000, 1.0000000000000000,
7c62b943 5705 6.0000000000000000, -0.80000000000000004 },
f92ab29f 5706 { 0.90196195126098366, 1.0000000000000000, 1.0000000000000000,
7c62b943 5707 6.0000000000000000, -0.69999999999999996 },
f92ab29f 5708 { 0.91408080149514692, 1.0000000000000000, 1.0000000000000000,
7c62b943 5709 6.0000000000000000, -0.59999999999999998 },
f92ab29f 5710 { 0.92673756761314952, 1.0000000000000000, 1.0000000000000000,
7c62b943 5711 6.0000000000000000, -0.50000000000000000 },
f92ab29f 5712 { 0.93997926630123407, 1.0000000000000000, 1.0000000000000000,
7c62b943 5713 6.0000000000000000, -0.40000000000000002 },
f92ab29f 5714 { 0.95385955885019291, 1.0000000000000000, 1.0000000000000000,
7c62b943 5715 6.0000000000000000, -0.30000000000000004 },
f92ab29f 5716 { 0.96844012412988900, 1.0000000000000000, 1.0000000000000000,
7c62b943 5717 6.0000000000000000, -0.19999999999999996 },
f92ab29f 5718 { 0.98379242268046208, 1.0000000000000000, 1.0000000000000000,
7c62b943 5719 6.0000000000000000, -0.099999999999999978 },
f92ab29f 5720 { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
7c62b943 5721 6.0000000000000000, 0.0000000000000000 },
f92ab29f 5722 { 1.0171615499181177, 1.0000000000000000, 1.0000000000000000,
7c62b943 5723 6.0000000000000000, 0.10000000000000009 },
f92ab29f 5724 { 1.0353950776091037, 1.0000000000000000, 1.0000000000000000,
7c62b943 5725 6.0000000000000000, 0.19999999999999996 },
f92ab29f 5726 { 1.0548437030651112, 1.0000000000000000, 1.0000000000000000,
7c62b943 5727 6.0000000000000000, 0.30000000000000004 },
f92ab29f 5728 { 1.0756840039415978, 1.0000000000000000, 1.0000000000000000,
7c62b943 5729 6.0000000000000000, 0.39999999999999991 },
f92ab29f 5730 { 1.0981384722661196, 1.0000000000000000, 1.0000000000000000,
7c62b943 5731 6.0000000000000000, 0.50000000000000000 },
f92ab29f 5732 { 1.1224950318916129, 1.0000000000000000, 1.0000000000000000,
7c62b943 5733 6.0000000000000000, 0.60000000000000009 },
f92ab29f 5734 { 1.1491396357184527, 1.0000000000000000, 1.0000000000000000,
7c62b943 5735 6.0000000000000000, 0.69999999999999996 },
f92ab29f 5736 { 1.1786158344507012, 1.0000000000000000, 1.0000000000000000,
7c62b943 5737 6.0000000000000000, 0.80000000000000004 },
f92ab29f 5738 { 1.2117500593515478, 1.0000000000000000, 1.0000000000000000,
7c62b943
BK
5739 6.0000000000000000, 0.89999999999999991 },
5740};
5741
5742// Test function for a=1.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
5743template <typename Tp>
5744void test083()
5745{
5746 const Tp eps = std::numeric_limits<Tp>::epsilon();
5747 Tp max_abs_diff = -Tp(1);
5748 Tp max_abs_frac = -Tp(1);
5749 unsigned int num_datum = sizeof(data083)
5750 / sizeof(testcase_hyperg<double>);
5751 for (unsigned int i = 0; i < num_datum; ++i)
5752 {
5753 const Tp f = std::tr1::hyperg(Tp(data083[i].a), Tp(data083[i].b),
5754 Tp(data083[i].c), Tp(data083[i].x));
5755 const Tp f0 = data083[i].f0;
5756 const Tp diff = f - f0;
5757 if (std::abs(diff) > max_abs_diff)
5758 max_abs_diff = std::abs(diff);
5759 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5760 {
5761 const Tp frac = diff / f0;
5762 if (std::abs(frac) > max_abs_frac)
5763 max_abs_frac = std::abs(frac);
5764 }
5765 }
5766 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5767}
5768
5769// Test data for a=1.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
5770testcase_hyperg<double> data084[] = {
f92ab29f 5771 { 0.90538259348578409, 1.0000000000000000, 1.0000000000000000,
7c62b943 5772 8.0000000000000000, -0.90000000000000002 },
f92ab29f 5773 { 0.91444830598832050, 1.0000000000000000, 1.0000000000000000,
7c62b943 5774 8.0000000000000000, -0.80000000000000004 },
f92ab29f 5775 { 0.92381915945974002, 1.0000000000000000, 1.0000000000000000,
7c62b943 5776 8.0000000000000000, -0.69999999999999996 },
f92ab29f 5777 { 0.93351553488501815, 1.0000000000000000, 1.0000000000000000,
7c62b943 5778 8.0000000000000000, -0.59999999999999998 },
f92ab29f 5779 { 0.94356001859234884, 1.0000000000000000, 1.0000000000000000,
7c62b943 5780 8.0000000000000000, -0.50000000000000000 },
f92ab29f 5781 { 0.95397775039949584, 1.0000000000000000, 1.0000000000000000,
7c62b943 5782 8.0000000000000000, -0.40000000000000002 },
f92ab29f 5783 { 0.96479684710618019, 1.0000000000000000, 1.0000000000000000,
7c62b943 5784 8.0000000000000000, -0.30000000000000004 },
f92ab29f 5785 { 0.97604892281308531, 1.0000000000000000, 1.0000000000000000,
7c62b943 5786 8.0000000000000000, -0.19999999999999996 },
f92ab29f 5787 { 0.98776973540356938, 1.0000000000000000, 1.0000000000000000,
7c62b943 5788 8.0000000000000000, -0.099999999999999978 },
f92ab29f 5789 { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
7c62b943 5790 8.0000000000000000, 0.0000000000000000 },
f92ab29f 5791 { 1.0127864273812119, 1.0000000000000000, 1.0000000000000000,
7c62b943 5792 8.0000000000000000, 0.10000000000000009 },
f92ab29f 5793 { 1.0261830717772533, 1.0000000000000000, 1.0000000000000000,
7c62b943 5794 8.0000000000000000, 0.19999999999999996 },
f92ab29f 5795 { 1.0402531144740719, 1.0000000000000000, 1.0000000000000000,
7c62b943 5796 8.0000000000000000, 0.30000000000000004 },
f92ab29f 5797 { 1.0550712790827002, 1.0000000000000000, 1.0000000000000000,
7c62b943 5798 8.0000000000000000, 0.39999999999999991 },
f92ab29f 5799 { 1.0707271945059007, 1.0000000000000000, 1.0000000000000000,
7c62b943 5800 8.0000000000000000, 0.50000000000000000 },
f92ab29f 5801 { 1.0873302420658923, 1.0000000000000000, 1.0000000000000000,
7c62b943 5802 8.0000000000000000, 0.60000000000000009 },
f92ab29f 5803 { 1.1050168587085545, 1.0000000000000000, 1.0000000000000000,
7c62b943 5804 8.0000000000000000, 0.69999999999999996 },
f92ab29f 5805 { 1.1239622188477687, 1.0000000000000000, 1.0000000000000000,
7c62b943 5806 8.0000000000000000, 0.80000000000000004 },
f92ab29f 5807 { 1.1444006183097781, 1.0000000000000000, 1.0000000000000000,
7c62b943
BK
5808 8.0000000000000000, 0.89999999999999991 },
5809};
5810
5811// Test function for a=1.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
5812template <typename Tp>
5813void test084()
5814{
5815 const Tp eps = std::numeric_limits<Tp>::epsilon();
5816 Tp max_abs_diff = -Tp(1);
5817 Tp max_abs_frac = -Tp(1);
5818 unsigned int num_datum = sizeof(data084)
5819 / sizeof(testcase_hyperg<double>);
5820 for (unsigned int i = 0; i < num_datum; ++i)
5821 {
5822 const Tp f = std::tr1::hyperg(Tp(data084[i].a), Tp(data084[i].b),
5823 Tp(data084[i].c), Tp(data084[i].x));
5824 const Tp f0 = data084[i].f0;
5825 const Tp diff = f - f0;
5826 if (std::abs(diff) > max_abs_diff)
5827 max_abs_diff = std::abs(diff);
5828 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5829 {
5830 const Tp frac = diff / f0;
5831 if (std::abs(frac) > max_abs_frac)
5832 max_abs_frac = std::abs(frac);
5833 }
5834 }
5835 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5836}
5837
5838// Test data for a=1.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
5839testcase_hyperg<double> data085[] = {
f92ab29f 5840 { 0.92211295632330403, 1.0000000000000000, 1.0000000000000000,
7c62b943 5841 10.000000000000000, -0.90000000000000002 },
f92ab29f 5842 { 0.92975727737040659, 1.0000000000000000, 1.0000000000000000,
7c62b943 5843 10.000000000000000, -0.80000000000000004 },
f92ab29f 5844 { 0.93761992348333467, 1.0000000000000000, 1.0000000000000000,
7c62b943 5845 10.000000000000000, -0.69999999999999996 },
f92ab29f 5846 { 0.94571346180587801, 1.0000000000000000, 1.0000000000000000,
7c62b943 5847 10.000000000000000, -0.59999999999999998 },
f92ab29f 5848 { 0.95405164371146867, 1.0000000000000000, 1.0000000000000000,
7c62b943 5849 10.000000000000000, -0.50000000000000000 },
f92ab29f 5850 { 0.96264956879205954, 1.0000000000000000, 1.0000000000000000,
7c62b943 5851 10.000000000000000, -0.40000000000000002 },
f92ab29f 5852 { 0.97152388013493096, 1.0000000000000000, 1.0000000000000000,
7c62b943 5853 10.000000000000000, -0.30000000000000004 },
f92ab29f 5854 { 0.98069299877709348, 1.0000000000000000, 1.0000000000000000,
7c62b943 5855 10.000000000000000, -0.19999999999999996 },
f92ab29f 5856 { 0.99017740778385854, 1.0000000000000000, 1.0000000000000000,
7c62b943 5857 10.000000000000000, -0.099999999999999978 },
f92ab29f 5858 { 1.0000000000000000, 1.0000000000000000, 1.0000000000000000,
7c62b943 5859 10.000000000000000, 0.0000000000000000 },
f92ab29f 5860 { 1.0101865087004833, 1.0000000000000000, 1.0000000000000000,
7c62b943 5861 10.000000000000000, 0.10000000000000009 },
f92ab29f 5862 { 1.0207660479892111, 1.0000000000000000, 1.0000000000000000,
7c62b943 5863 10.000000000000000, 0.19999999999999996 },
f92ab29f 5864 { 1.0317718013185031, 1.0000000000000000, 1.0000000000000000,
7c62b943 5865 10.000000000000000, 0.30000000000000004 },
f92ab29f 5866 { 1.0432419144892398, 1.0000000000000000, 1.0000000000000000,
7c62b943 5867 10.000000000000000, 0.39999999999999991 },
f92ab29f 5868 { 1.0552206786504446, 1.0000000000000000, 1.0000000000000000,
7c62b943 5869 10.000000000000000, 0.50000000000000000 },
f92ab29f 5870 { 1.0677601383233675, 1.0000000000000000, 1.0000000000000000,
7c62b943 5871 10.000000000000000, 0.60000000000000009 },
f92ab29f 5872 { 1.0809223485579968, 1.0000000000000000, 1.0000000000000000,
7c62b943 5873 10.000000000000000, 0.69999999999999996 },
f92ab29f 5874 { 1.0947826783002668, 1.0000000000000000, 1.0000000000000000,
7c62b943 5875 10.000000000000000, 0.80000000000000004 },
f92ab29f 5876 { 1.1094349304493603, 1.0000000000000000, 1.0000000000000000,
7c62b943
BK
5877 10.000000000000000, 0.89999999999999991 },
5878};
5879
5880// Test function for a=1.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
5881template <typename Tp>
5882void test085()
5883{
5884 const Tp eps = std::numeric_limits<Tp>::epsilon();
5885 Tp max_abs_diff = -Tp(1);
5886 Tp max_abs_frac = -Tp(1);
5887 unsigned int num_datum = sizeof(data085)
5888 / sizeof(testcase_hyperg<double>);
5889 for (unsigned int i = 0; i < num_datum; ++i)
5890 {
5891 const Tp f = std::tr1::hyperg(Tp(data085[i].a), Tp(data085[i].b),
5892 Tp(data085[i].c), Tp(data085[i].x));
5893 const Tp f0 = data085[i].f0;
5894 const Tp diff = f - f0;
5895 if (std::abs(diff) > max_abs_diff)
5896 max_abs_diff = std::abs(diff);
5897 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5898 {
5899 const Tp frac = diff / f0;
5900 if (std::abs(frac) > max_abs_frac)
5901 max_abs_frac = std::abs(frac);
5902 }
5903 }
5904 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5905}
5906
5907// Test data for a=1.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
5908testcase_hyperg<double> data086[] = {
f92ab29f 5909 { 0.52631578947368429, 1.0000000000000000, 2.0000000000000000,
7c62b943 5910 2.0000000000000000, -0.90000000000000002 },
f92ab29f 5911 { 0.55555555555555558, 1.0000000000000000, 2.0000000000000000,
7c62b943 5912 2.0000000000000000, -0.80000000000000004 },
f92ab29f 5913 { 0.58823529411764708, 1.0000000000000000, 2.0000000000000000,
7c62b943 5914 2.0000000000000000, -0.69999999999999996 },
f92ab29f 5915 { 0.62500000000000000, 1.0000000000000000, 2.0000000000000000,
7c62b943 5916 2.0000000000000000, -0.59999999999999998 },
f92ab29f 5917 { 0.66666666666666663, 1.0000000000000000, 2.0000000000000000,
7c62b943 5918 2.0000000000000000, -0.50000000000000000 },
f92ab29f 5919 { 0.71428571428571430, 1.0000000000000000, 2.0000000000000000,
7c62b943 5920 2.0000000000000000, -0.40000000000000002 },
f92ab29f 5921 { 0.76923076923076927, 1.0000000000000000, 2.0000000000000000,
7c62b943 5922 2.0000000000000000, -0.30000000000000004 },
f92ab29f 5923 { 0.83333333333333337, 1.0000000000000000, 2.0000000000000000,
7c62b943 5924 2.0000000000000000, -0.19999999999999996 },
f92ab29f 5925 { 0.90909090909090906, 1.0000000000000000, 2.0000000000000000,
7c62b943 5926 2.0000000000000000, -0.099999999999999978 },
f92ab29f 5927 { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
7c62b943 5928 2.0000000000000000, 0.0000000000000000 },
f92ab29f 5929 { 1.1111111111111112, 1.0000000000000000, 2.0000000000000000,
7c62b943 5930 2.0000000000000000, 0.10000000000000009 },
f92ab29f 5931 { 1.2500000000000000, 1.0000000000000000, 2.0000000000000000,
7c62b943 5932 2.0000000000000000, 0.19999999999999996 },
f92ab29f 5933 { 1.4285714285714286, 1.0000000000000000, 2.0000000000000000,
7c62b943 5934 2.0000000000000000, 0.30000000000000004 },
f92ab29f 5935 { 1.6666666666666663, 1.0000000000000000, 2.0000000000000000,
7c62b943 5936 2.0000000000000000, 0.39999999999999991 },
f92ab29f 5937 { 2.0000000000000000, 1.0000000000000000, 2.0000000000000000,
7c62b943 5938 2.0000000000000000, 0.50000000000000000 },
f92ab29f 5939 { 2.5000000000000004, 1.0000000000000000, 2.0000000000000000,
7c62b943 5940 2.0000000000000000, 0.60000000000000009 },
f92ab29f 5941 { 3.3333333333333330, 1.0000000000000000, 2.0000000000000000,
7c62b943 5942 2.0000000000000000, 0.69999999999999996 },
f92ab29f 5943 { 5.0000000000000009, 1.0000000000000000, 2.0000000000000000,
7c62b943 5944 2.0000000000000000, 0.80000000000000004 },
f92ab29f 5945 { 9.9999999999999929, 1.0000000000000000, 2.0000000000000000,
7c62b943
BK
5946 2.0000000000000000, 0.89999999999999991 },
5947};
5948
5949// Test function for a=1.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
5950template <typename Tp>
5951void test086()
5952{
5953 const Tp eps = std::numeric_limits<Tp>::epsilon();
5954 Tp max_abs_diff = -Tp(1);
5955 Tp max_abs_frac = -Tp(1);
5956 unsigned int num_datum = sizeof(data086)
5957 / sizeof(testcase_hyperg<double>);
5958 for (unsigned int i = 0; i < num_datum; ++i)
5959 {
5960 const Tp f = std::tr1::hyperg(Tp(data086[i].a), Tp(data086[i].b),
5961 Tp(data086[i].c), Tp(data086[i].x));
5962 const Tp f0 = data086[i].f0;
5963 const Tp diff = f - f0;
5964 if (std::abs(diff) > max_abs_diff)
5965 max_abs_diff = std::abs(diff);
5966 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
5967 {
5968 const Tp frac = diff / f0;
5969 if (std::abs(frac) > max_abs_frac)
5970 max_abs_frac = std::abs(frac);
5971 }
5972 }
5973 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
5974}
5975
5976// Test data for a=1.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
5977testcase_hyperg<double> data087[] = {
f92ab29f 5978 { 0.70351947549341520, 1.0000000000000000, 2.0000000000000000,
7c62b943 5979 4.0000000000000000, -0.90000000000000002 },
f92ab29f 5980 { 0.72637503722092711, 1.0000000000000000, 2.0000000000000000,
7c62b943 5981 4.0000000000000000, -0.80000000000000004 },
f92ab29f 5982 { 0.75099661564391251, 1.0000000000000000, 2.0000000000000000,
7c62b943 5983 4.0000000000000000, -0.69999999999999996 },
f92ab29f 5984 { 0.77761647796730871, 1.0000000000000000, 2.0000000000000000,
7c62b943 5985 4.0000000000000000, -0.59999999999999998 },
f92ab29f 5986 { 0.80651221621216451, 1.0000000000000000, 2.0000000000000000,
7c62b943 5987 4.0000000000000000, -0.50000000000000000 },
f92ab29f 5988 { 0.83801894346580275, 1.0000000000000000, 2.0000000000000000,
7c62b943 5989 4.0000000000000000, -0.40000000000000002 },
f92ab29f 5990 { 0.87254582050258467, 1.0000000000000000, 2.0000000000000000,
7c62b943 5991 4.0000000000000000, -0.30000000000000004 },
f92ab29f 5992 { 0.91059888544083678, 1.0000000000000000, 2.0000000000000000,
7c62b943 5993 4.0000000000000000, -0.19999999999999996 },
f92ab29f 5994 { 0.95281329145592386, 1.0000000000000000, 2.0000000000000000,
7c62b943 5995 4.0000000000000000, -0.099999999999999978 },
f92ab29f 5996 { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
7c62b943 5997 4.0000000000000000, 0.0000000000000000 },
f92ab29f 5998 { 1.0532154477379738, 1.0000000000000000, 2.0000000000000000,
7c62b943 5999 4.0000000000000000, 0.10000000000000009 },
f92ab29f 6000 { 1.1138692114741471, 1.0000000000000000, 2.0000000000000000,
7c62b943 6001 4.0000000000000000, 0.19999999999999996 },
f92ab29f 6002 { 1.1838976095305187, 1.0000000000000000, 2.0000000000000000,
7c62b943 6003 4.0000000000000000, 0.30000000000000004 },
f92ab29f 6004 { 1.2660586631630237, 1.0000000000000000, 2.0000000000000000,
7c62b943 6005 4.0000000000000000, 0.39999999999999991 },
f92ab29f 6006 { 1.3644676665613118, 1.0000000000000000, 2.0000000000000000,
7c62b943 6007 4.0000000000000000, 0.50000000000000000 },
f92ab29f 6008 { 1.4856585347316102, 1.0000000000000000, 2.0000000000000000,
7c62b943 6009 4.0000000000000000, 0.60000000000000009 },
f92ab29f 6010 { 1.6409590443536872, 1.0000000000000000, 2.0000000000000000,
7c62b943 6011 4.0000000000000000, 0.69999999999999996 },
f92ab29f 6012 { 1.8528798927325769, 1.0000000000000000, 2.0000000000000000,
7c62b943 6013 4.0000000000000000, 0.80000000000000004 },
f92ab29f 6014 { 2.1789423102929644, 1.0000000000000000, 2.0000000000000000,
7c62b943
BK
6015 4.0000000000000000, 0.89999999999999991 },
6016};
6017
6018// Test function for a=1.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
6019template <typename Tp>
6020void test087()
6021{
6022 const Tp eps = std::numeric_limits<Tp>::epsilon();
6023 Tp max_abs_diff = -Tp(1);
6024 Tp max_abs_frac = -Tp(1);
6025 unsigned int num_datum = sizeof(data087)
6026 / sizeof(testcase_hyperg<double>);
6027 for (unsigned int i = 0; i < num_datum; ++i)
6028 {
6029 const Tp f = std::tr1::hyperg(Tp(data087[i].a), Tp(data087[i].b),
6030 Tp(data087[i].c), Tp(data087[i].x));
6031 const Tp f0 = data087[i].f0;
6032 const Tp diff = f - f0;
6033 if (std::abs(diff) > max_abs_diff)
6034 max_abs_diff = std::abs(diff);
6035 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6036 {
6037 const Tp frac = diff / f0;
6038 if (std::abs(frac) > max_abs_frac)
6039 max_abs_frac = std::abs(frac);
6040 }
6041 }
6042 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6043}
6044
6045// Test data for a=1.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
6046testcase_hyperg<double> data088[] = {
f92ab29f 6047 { 0.78068027379106253, 1.0000000000000000, 2.0000000000000000,
7c62b943 6048 6.0000000000000000, -0.90000000000000002 },
f92ab29f 6049 { 0.79924541976981278, 1.0000000000000000, 2.0000000000000000,
7c62b943 6050 6.0000000000000000, -0.80000000000000004 },
f92ab29f 6051 { 0.81891305585650942, 1.0000000000000000, 2.0000000000000000,
7c62b943 6052 6.0000000000000000, -0.69999999999999996 },
f92ab29f 6053 { 0.83979799626213270, 1.0000000000000000, 2.0000000000000000,
7c62b943 6054 6.0000000000000000, -0.59999999999999998 },
f92ab29f 6055 { 0.86203315303160166, 1.0000000000000000, 2.0000000000000000,
7c62b943 6056 6.0000000000000000, -0.50000000000000000 },
f92ab29f 6057 { 0.88577352485361693, 1.0000000000000000, 2.0000000000000000,
7c62b943 6058 6.0000000000000000, -0.40000000000000002 },
f92ab29f 6059 { 0.91120135738402208, 1.0000000000000000, 2.0000000000000000,
7c62b943 6060 6.0000000000000000, -0.30000000000000004 },
f92ab29f 6061 { 0.93853291956703588, 1.0000000000000000, 2.0000000000000000,
7c62b943 6062 6.0000000000000000, -0.19999999999999996 },
f92ab29f 6063 { 0.96802755388922956, 1.0000000000000000, 2.0000000000000000,
7c62b943 6064 6.0000000000000000, -0.099999999999999978 },
f92ab29f 6065 { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
7c62b943 6066 6.0000000000000000, 0.0000000000000000 },
f92ab29f 6067 { 1.0348375559194773, 1.0000000000000000, 2.0000000000000000,
7c62b943 6068 6.0000000000000000, 0.10000000000000009 },
f92ab29f 6069 { 1.0730246119544820, 1.0000000000000000, 2.0000000000000000,
7c62b943 6070 6.0000000000000000, 0.19999999999999996 },
f92ab29f 6071 { 1.1151788396279341, 1.0000000000000000, 2.0000000000000000,
7c62b943 6072 6.0000000000000000, 0.30000000000000004 },
f92ab29f 6073 { 1.1621066403893472, 1.0000000000000000, 2.0000000000000000,
7c62b943 6074 6.0000000000000000, 0.39999999999999991 },
f92ab29f 6075 { 1.2148922218710421, 1.0000000000000000, 2.0000000000000000,
7c62b943 6076 6.0000000000000000, 0.50000000000000000 },
f92ab29f 6077 { 1.2750496810838674, 1.0000000000000000, 2.0000000000000000,
7c62b943 6078 6.0000000000000000, 0.60000000000000009 },
f92ab29f 6079 { 1.3448048570872917, 1.0000000000000000, 2.0000000000000000,
7c62b943 6080 6.0000000000000000, 0.69999999999999996 },
f92ab29f 6081 { 1.4276833109859521, 1.0000000000000000, 2.0000000000000000,
7c62b943 6082 6.0000000000000000, 0.80000000000000004 },
f92ab29f 6083 { 1.5299976259379788, 1.0000000000000000, 2.0000000000000000,
7c62b943
BK
6084 6.0000000000000000, 0.89999999999999991 },
6085};
6086
6087// Test function for a=1.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
6088template <typename Tp>
6089void test088()
6090{
6091 const Tp eps = std::numeric_limits<Tp>::epsilon();
6092 Tp max_abs_diff = -Tp(1);
6093 Tp max_abs_frac = -Tp(1);
6094 unsigned int num_datum = sizeof(data088)
6095 / sizeof(testcase_hyperg<double>);
6096 for (unsigned int i = 0; i < num_datum; ++i)
6097 {
6098 const Tp f = std::tr1::hyperg(Tp(data088[i].a), Tp(data088[i].b),
6099 Tp(data088[i].c), Tp(data088[i].x));
6100 const Tp f0 = data088[i].f0;
6101 const Tp diff = f - f0;
6102 if (std::abs(diff) > max_abs_diff)
6103 max_abs_diff = std::abs(diff);
6104 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6105 {
6106 const Tp frac = diff / f0;
6107 if (std::abs(frac) > max_abs_frac)
6108 max_abs_frac = std::abs(frac);
6109 }
6110 }
6111 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6112}
6113
6114// Test data for a=1.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
6115testcase_hyperg<double> data089[] = {
f92ab29f 6116 { 0.82510759951857582, 1.0000000000000000, 2.0000000000000000,
7c62b943 6117 8.0000000000000000, -0.90000000000000002 },
f92ab29f 6118 { 0.84072786892782092, 1.0000000000000000, 2.0000000000000000,
7c62b943 6119 8.0000000000000000, -0.80000000000000004 },
f92ab29f 6120 { 0.85710884896562356, 1.0000000000000000, 2.0000000000000000,
7c62b943 6121 8.0000000000000000, -0.69999999999999996 },
f92ab29f 6122 { 0.87431674418118333, 1.0000000000000000, 2.0000000000000000,
7c62b943 6123 8.0000000000000000, -0.59999999999999998 },
f92ab29f 6124 { 0.89242659229727017, 1.0000000000000000, 2.0000000000000000,
7c62b943 6125 8.0000000000000000, -0.50000000000000000 },
f92ab29f 6126 { 0.91152392685930339, 1.0000000000000000, 2.0000000000000000,
7c62b943 6127 8.0000000000000000, -0.40000000000000002 },
f92ab29f 6128 { 0.93170685950993570, 1.0000000000000000, 2.0000000000000000,
7c62b943 6129 8.0000000000000000, -0.30000000000000004 },
f92ab29f 6130 { 0.95308871926790661, 1.0000000000000000, 2.0000000000000000,
7c62b943 6131 8.0000000000000000, -0.19999999999999996 },
f92ab29f 6132 { 0.97580144325325802, 1.0000000000000000, 2.0000000000000000,
7c62b943 6133 8.0000000000000000, -0.099999999999999978 },
f92ab29f 6134 { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
7c62b943 6135 8.0000000000000000, 0.0000000000000000 },
f92ab29f 6136 { 1.0258682619030324, 1.0000000000000000, 2.0000000000000000,
7c62b943 6137 8.0000000000000000, 0.10000000000000009 },
f92ab29f 6138 { 1.0536269616706000, 1.0000000000000000, 2.0000000000000000,
7c62b943 6139 8.0000000000000000, 0.19999999999999996 },
f92ab29f 6140 { 1.0835447330793833, 1.0000000000000000, 2.0000000000000000,
7c62b943 6141 8.0000000000000000, 0.30000000000000004 },
f92ab29f 6142 { 1.1159538758396654, 1.0000000000000000, 2.0000000000000000,
7c62b943 6143 8.0000000000000000, 0.39999999999999991 },
f92ab29f 6144 { 1.1512736659291880, 1.0000000000000000, 2.0000000000000000,
7c62b943 6145 8.0000000000000000, 0.50000000000000000 },
f92ab29f 6146 { 1.1900463690116090, 1.0000000000000000, 2.0000000000000000,
7c62b943 6147 8.0000000000000000, 0.60000000000000009 },
f92ab29f 6148 { 1.2329961591622411, 1.0000000000000000, 2.0000000000000000,
7c62b943 6149 8.0000000000000000, 0.69999999999999996 },
f92ab29f 6150 { 1.2811334345669059, 1.0000000000000000, 2.0000000000000000,
7c62b943 6151 8.0000000000000000, 0.80000000000000004 },
f92ab29f 6152 { 1.3359629014132051, 1.0000000000000000, 2.0000000000000000,
7c62b943
BK
6153 8.0000000000000000, 0.89999999999999991 },
6154};
6155
6156// Test function for a=1.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
6157template <typename Tp>
6158void test089()
6159{
6160 const Tp eps = std::numeric_limits<Tp>::epsilon();
6161 Tp max_abs_diff = -Tp(1);
6162 Tp max_abs_frac = -Tp(1);
6163 unsigned int num_datum = sizeof(data089)
6164 / sizeof(testcase_hyperg<double>);
6165 for (unsigned int i = 0; i < num_datum; ++i)
6166 {
6167 const Tp f = std::tr1::hyperg(Tp(data089[i].a), Tp(data089[i].b),
6168 Tp(data089[i].c), Tp(data089[i].x));
6169 const Tp f0 = data089[i].f0;
6170 const Tp diff = f - f0;
6171 if (std::abs(diff) > max_abs_diff)
6172 max_abs_diff = std::abs(diff);
6173 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6174 {
6175 const Tp frac = diff / f0;
6176 if (std::abs(frac) > max_abs_frac)
6177 max_abs_frac = std::abs(frac);
6178 }
6179 }
6180 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6181}
6182
6183// Test data for a=1.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
6184testcase_hyperg<double> data090[] = {
f92ab29f 6185 { 0.85426123653345876, 1.0000000000000000, 2.0000000000000000,
7c62b943 6186 10.000000000000000, -0.90000000000000002 },
f92ab29f 6187 { 0.86774543390930370, 1.0000000000000000, 2.0000000000000000,
7c62b943 6188 10.000000000000000, -0.80000000000000004 },
f92ab29f 6189 { 0.88178859537254239, 1.0000000000000000, 2.0000000000000000,
7c62b943 6190 10.000000000000000, -0.69999999999999996 },
f92ab29f 6191 { 0.89643269097060951, 1.0000000000000000, 2.0000000000000000,
7c62b943 6192 10.000000000000000, -0.59999999999999998 },
f92ab29f 6193 { 0.91172456687216763, 1.0000000000000000, 2.0000000000000000,
7c62b943 6194 10.000000000000000, -0.50000000000000000 },
f92ab29f 6195 { 0.92771674975966134, 1.0000000000000000, 2.0000000000000000,
7c62b943 6196 10.000000000000000, -0.40000000000000002 },
f92ab29f 6197 { 0.94446842993888647, 1.0000000000000000, 2.0000000000000000,
7c62b943 6198 10.000000000000000, -0.30000000000000004 },
f92ab29f 6199 { 0.96204667481937678, 1.0000000000000000, 2.0000000000000000,
7c62b943 6200 10.000000000000000, -0.19999999999999996 },
f92ab29f 6201 { 0.98052794339012128, 1.0000000000000000, 2.0000000000000000,
7c62b943 6202 10.000000000000000, -0.099999999999999978 },
f92ab29f 6203 { 1.0000000000000000, 1.0000000000000000, 2.0000000000000000,
7c62b943 6204 10.000000000000000, 0.0000000000000000 },
f92ab29f 6205 { 1.0205643671068179, 1.0000000000000000, 2.0000000000000000,
7c62b943 6206 10.000000000000000, 0.10000000000000009 },
f92ab29f 6207 { 1.0423395201078882, 1.0000000000000000, 2.0000000000000000,
7c62b943 6208 10.000000000000000, 0.19999999999999996 },
f92ab29f 6209 { 1.0654651277885334, 1.0000000000000000, 2.0000000000000000,
7c62b943 6210 10.000000000000000, 0.30000000000000004 },
f92ab29f 6211 { 1.0901078068101382, 1.0000000000000000, 2.0000000000000000,
7c62b943 6212 10.000000000000000, 0.39999999999999991 },
f92ab29f 6213 { 1.1164691415928940, 1.0000000000000000, 2.0000000000000000,
7c62b943 6214 10.000000000000000, 0.50000000000000000 },
f92ab29f 6215 { 1.1447972335326551, 1.0000000000000000, 2.0000000000000000,
7c62b943 6216 10.000000000000000, 0.60000000000000009 },
f92ab29f 6217 { 1.1754040384534161, 1.0000000000000000, 2.0000000000000000,
7c62b943 6218 10.000000000000000, 0.69999999999999996 },
f92ab29f 6219 { 1.2086928679893112, 1.0000000000000000, 2.0000000000000000,
7c62b943 6220 10.000000000000000, 0.80000000000000004 },
f92ab29f 6221 { 1.2452055640510711, 1.0000000000000000, 2.0000000000000000,
7c62b943
BK
6222 10.000000000000000, 0.89999999999999991 },
6223};
6224
6225// Test function for a=1.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
6226template <typename Tp>
6227void test090()
6228{
6229 const Tp eps = std::numeric_limits<Tp>::epsilon();
6230 Tp max_abs_diff = -Tp(1);
6231 Tp max_abs_frac = -Tp(1);
6232 unsigned int num_datum = sizeof(data090)
6233 / sizeof(testcase_hyperg<double>);
6234 for (unsigned int i = 0; i < num_datum; ++i)
6235 {
6236 const Tp f = std::tr1::hyperg(Tp(data090[i].a), Tp(data090[i].b),
6237 Tp(data090[i].c), Tp(data090[i].x));
6238 const Tp f0 = data090[i].f0;
6239 const Tp diff = f - f0;
6240 if (std::abs(diff) > max_abs_diff)
6241 max_abs_diff = std::abs(diff);
6242 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6243 {
6244 const Tp frac = diff / f0;
6245 if (std::abs(frac) > max_abs_frac)
6246 max_abs_frac = std::abs(frac);
6247 }
6248 }
6249 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6250}
6251
6252// Test data for a=1.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
6253testcase_hyperg<double> data091[] = {
f92ab29f 6254 { 0.25646288779245091, 1.0000000000000000, 5.0000000000000000,
7c62b943 6255 2.0000000000000000, -0.90000000000000002 },
f92ab29f 6256 { 0.28273129096174382, 1.0000000000000000, 5.0000000000000000,
7c62b943 6257 2.0000000000000000, -0.80000000000000004 },
f92ab29f 6258 { 0.31438201170962976, 1.0000000000000000, 5.0000000000000000,
7c62b943 6259 2.0000000000000000, -0.69999999999999996 },
f92ab29f 6260 { 0.35308837890625017, 1.0000000000000000, 5.0000000000000000,
7c62b943 6261 2.0000000000000000, -0.59999999999999998 },
f92ab29f 6262 { 0.40123456790123463, 1.0000000000000000, 5.0000000000000000,
7c62b943 6263 2.0000000000000000, -0.50000000000000000 },
f92ab29f 6264 { 0.46230737192836319, 1.0000000000000000, 5.0000000000000000,
7c62b943 6265 2.0000000000000000, -0.40000000000000002 },
f92ab29f 6266 { 0.54156016946185359, 1.0000000000000000, 5.0000000000000000,
7c62b943 6267 2.0000000000000000, -0.30000000000000004 },
f92ab29f 6268 { 0.64718364197530875, 1.0000000000000000, 5.0000000000000000,
7c62b943 6269 2.0000000000000000, -0.19999999999999996 },
f92ab29f 6270 { 0.79246636158732342, 1.0000000000000000, 5.0000000000000000,
7c62b943 6271 2.0000000000000000, -0.099999999999999978 },
f92ab29f 6272 { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
7c62b943 6273 2.0000000000000000, 0.0000000000000000 },
f92ab29f 6274 { 1.3103947568968148, 1.0000000000000000, 5.0000000000000000,
7c62b943 6275 2.0000000000000000, 0.10000000000000009 },
f92ab29f 6276 { 1.8017578125000004, 1.0000000000000000, 5.0000000000000000,
7c62b943 6277 2.0000000000000000, 0.19999999999999996 },
f92ab29f 6278 { 2.6374427321949185, 1.0000000000000000, 5.0000000000000000,
7c62b943 6279 2.0000000000000000, 0.30000000000000004 },
f92ab29f 6280 { 4.1975308641975282, 1.0000000000000000, 5.0000000000000000,
7c62b943 6281 2.0000000000000000, 0.39999999999999991 },
f92ab29f 6282 { 7.4999999999999964, 1.0000000000000000, 5.0000000000000000,
7c62b943 6283 2.0000000000000000, 0.50000000000000000 },
f92ab29f 6284 { 15.859375000000012, 1.0000000000000000, 5.0000000000000000,
7c62b943 6285 2.0000000000000000, 0.60000000000000009 },
f92ab29f 6286 { 43.734567901234513, 1.0000000000000000, 5.0000000000000000,
7c62b943 6287 2.0000000000000000, 0.69999999999999996 },
f92ab29f 6288 { 194.99999999999994, 1.0000000000000000, 5.0000000000000000,
7c62b943 6289 2.0000000000000000, 0.80000000000000004 },
f92ab29f 6290 { 2777.4999999999832, 1.0000000000000000, 5.0000000000000000,
7c62b943
BK
6291 2.0000000000000000, 0.89999999999999991 },
6292};
6293
6294// Test function for a=1.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
6295template <typename Tp>
6296void test091()
6297{
6298 const Tp eps = std::numeric_limits<Tp>::epsilon();
6299 Tp max_abs_diff = -Tp(1);
6300 Tp max_abs_frac = -Tp(1);
6301 unsigned int num_datum = sizeof(data091)
6302 / sizeof(testcase_hyperg<double>);
6303 for (unsigned int i = 0; i < num_datum; ++i)
6304 {
6305 const Tp f = std::tr1::hyperg(Tp(data091[i].a), Tp(data091[i].b),
6306 Tp(data091[i].c), Tp(data091[i].x));
6307 const Tp f0 = data091[i].f0;
6308 const Tp diff = f - f0;
6309 if (std::abs(diff) > max_abs_diff)
6310 max_abs_diff = std::abs(diff);
6311 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6312 {
6313 const Tp frac = diff / f0;
6314 if (std::abs(frac) > max_abs_frac)
6315 max_abs_frac = std::abs(frac);
6316 }
6317 }
6318 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6319}
6320
6321// Test data for a=1.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
6322testcase_hyperg<double> data092[] = {
f92ab29f 6323 { 0.46398891966759004, 1.0000000000000000, 5.0000000000000000,
7c62b943 6324 4.0000000000000000, -0.90000000000000002 },
f92ab29f 6325 { 0.49382716049382713, 1.0000000000000000, 5.0000000000000000,
7c62b943 6326 4.0000000000000000, -0.80000000000000004 },
f92ab29f 6327 { 0.52768166089965396, 1.0000000000000000, 5.0000000000000000,
7c62b943 6328 4.0000000000000000, -0.69999999999999996 },
f92ab29f 6329 { 0.56640624999999978, 1.0000000000000000, 5.0000000000000000,
7c62b943 6330 4.0000000000000000, -0.59999999999999998 },
f92ab29f 6331 { 0.61111111111111116, 1.0000000000000000, 5.0000000000000000,
7c62b943 6332 4.0000000000000000, -0.50000000000000000 },
f92ab29f 6333 { 0.66326530612244894, 1.0000000000000000, 5.0000000000000000,
7c62b943 6334 4.0000000000000000, -0.40000000000000002 },
f92ab29f 6335 { 0.72485207100591698, 1.0000000000000000, 5.0000000000000000,
7c62b943 6336 4.0000000000000000, -0.30000000000000004 },
f92ab29f 6337 { 0.79861111111111094, 1.0000000000000000, 5.0000000000000000,
7c62b943 6338 4.0000000000000000, -0.19999999999999996 },
f92ab29f 6339 { 0.88842975206611552, 1.0000000000000000, 5.0000000000000000,
7c62b943 6340 4.0000000000000000, -0.099999999999999978 },
f92ab29f 6341 { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
7c62b943 6342 4.0000000000000000, 0.0000000000000000 },
f92ab29f 6343 { 1.1419753086419753, 1.0000000000000000, 5.0000000000000000,
7c62b943 6344 4.0000000000000000, 0.10000000000000009 },
f92ab29f 6345 { 1.3281249999999998, 1.0000000000000000, 5.0000000000000000,
7c62b943 6346 4.0000000000000000, 0.19999999999999996 },
f92ab29f 6347 { 1.5816326530612239, 1.0000000000000000, 5.0000000000000000,
7c62b943 6348 4.0000000000000000, 0.30000000000000004 },
f92ab29f 6349 { 1.9444444444444444, 1.0000000000000000, 5.0000000000000000,
7c62b943 6350 4.0000000000000000, 0.39999999999999991 },
f92ab29f 6351 { 2.5000000000000000, 1.0000000000000000, 5.0000000000000000,
7c62b943 6352 4.0000000000000000, 0.50000000000000000 },
f92ab29f 6353 { 3.4374999999999996, 1.0000000000000000, 5.0000000000000000,
7c62b943 6354 4.0000000000000000, 0.60000000000000009 },
f92ab29f 6355 { 5.2777777777777715, 1.0000000000000000, 5.0000000000000000,
7c62b943 6356 4.0000000000000000, 0.69999999999999996 },
f92ab29f 6357 { 9.9999999999999947, 1.0000000000000000, 5.0000000000000000,
7c62b943 6358 4.0000000000000000, 0.80000000000000004 },
f92ab29f 6359 { 32.499999999999837, 1.0000000000000000, 5.0000000000000000,
7c62b943
BK
6360 4.0000000000000000, 0.89999999999999991 },
6361};
6362
6363// Test function for a=1.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
6364template <typename Tp>
6365void test092()
6366{
6367 const Tp eps = std::numeric_limits<Tp>::epsilon();
6368 Tp max_abs_diff = -Tp(1);
6369 Tp max_abs_frac = -Tp(1);
6370 unsigned int num_datum = sizeof(data092)
6371 / sizeof(testcase_hyperg<double>);
6372 for (unsigned int i = 0; i < num_datum; ++i)
6373 {
6374 const Tp f = std::tr1::hyperg(Tp(data092[i].a), Tp(data092[i].b),
6375 Tp(data092[i].c), Tp(data092[i].x));
6376 const Tp f0 = data092[i].f0;
6377 const Tp diff = f - f0;
6378 if (std::abs(diff) > max_abs_diff)
6379 max_abs_diff = std::abs(diff);
6380 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6381 {
6382 const Tp frac = diff / f0;
6383 if (std::abs(frac) > max_abs_frac)
6384 max_abs_frac = std::abs(frac);
6385 }
6386 }
6387 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6388}
6389
6390// Test data for a=1.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
6391testcase_hyperg<double> data093[] = {
f92ab29f 6392 { 0.57476744883397501, 1.0000000000000000, 5.0000000000000000,
7c62b943 6393 6.0000000000000000, -0.90000000000000002 },
f92ab29f 6394 { 0.60302731682513933, 1.0000000000000000, 5.0000000000000000,
7c62b943 6395 6.0000000000000000, -0.80000000000000004 },
f92ab29f 6396 { 0.63425708719096396, 1.0000000000000000, 5.0000000000000000,
7c62b943 6397 6.0000000000000000, -0.69999999999999996 },
f92ab29f 6398 { 0.66895764182970419, 1.0000000000000000, 5.0000000000000000,
7c62b943 6399 6.0000000000000000, -0.59999999999999998 },
f92ab29f 6400 { 0.70775063063963428, 1.0000000000000000, 5.0000000000000000,
7c62b943 6401 6.0000000000000000, -0.50000000000000000 },
f92ab29f 6402 { 0.75141762103495924, 1.0000000000000000, 5.0000000000000000,
7c62b943 6403 6.0000000000000000, -0.40000000000000002 },
f92ab29f 6404 { 0.80095569442603298, 1.0000000000000000, 5.0000000000000000,
7c62b943 6405 6.0000000000000000, -0.30000000000000004 },
f92ab29f 6406 { 0.85765823887436754, 1.0000000000000000, 5.0000000000000000,
7c62b943 6407 6.0000000000000000, -0.19999999999999996 },
f92ab29f 6408 { 0.92323549576335540, 1.0000000000000000, 5.0000000000000000,
7c62b943 6409 6.0000000000000000, -0.099999999999999978 },
f92ab29f 6410 { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
7c62b943 6411 6.0000000000000000, 0.0000000000000000 },
f92ab29f 6412 { 1.0911622464839472, 1.0000000000000000, 5.0000000000000000,
7c62b943 6413 6.0000000000000000, 0.10000000000000009 },
f92ab29f 6414 { 1.2013226178607666, 1.0000000000000000, 5.0000000000000000,
7c62b943 6415 6.0000000000000000, 0.19999999999999996 },
f92ab29f 6416 { 1.3373332072682687, 1.0000000000000000, 5.0000000000000000,
7c62b943 6417 6.0000000000000000, 0.30000000000000004 },
f92ab29f 6418 { 1.5099074378209716, 1.0000000000000000, 5.0000000000000000,
7c62b943 6419 6.0000000000000000, 0.39999999999999991 },
f92ab29f 6420 { 1.7368822229245819, 1.0000000000000000, 5.0000000000000000,
7c62b943 6421 6.0000000000000000, 0.50000000000000000 },
f92ab29f 6422 { 2.0505871832661429, 1.0000000000000000, 5.0000000000000000,
7c62b943 6423 6.0000000000000000, 0.60000000000000009 },
f92ab29f 6424 { 2.5172389775867967, 1.0000000000000000, 5.0000000000000000,
7c62b943 6425 6.0000000000000000, 0.69999999999999996 },
f92ab29f 6426 { 3.3015631983556144, 1.0000000000000000, 5.0000000000000000,
7c62b943 6427 6.0000000000000000, 0.80000000000000004 },
f92ab29f 6428 { 5.0005935155044519, 1.0000000000000000, 5.0000000000000000,
7c62b943
BK
6429 6.0000000000000000, 0.89999999999999991 },
6430};
6431
6432// Test function for a=1.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
6433template <typename Tp>
6434void test093()
6435{
6436 const Tp eps = std::numeric_limits<Tp>::epsilon();
6437 Tp max_abs_diff = -Tp(1);
6438 Tp max_abs_frac = -Tp(1);
6439 unsigned int num_datum = sizeof(data093)
6440 / sizeof(testcase_hyperg<double>);
6441 for (unsigned int i = 0; i < num_datum; ++i)
6442 {
6443 const Tp f = std::tr1::hyperg(Tp(data093[i].a), Tp(data093[i].b),
6444 Tp(data093[i].c), Tp(data093[i].x));
6445 const Tp f0 = data093[i].f0;
6446 const Tp diff = f - f0;
6447 if (std::abs(diff) > max_abs_diff)
6448 max_abs_diff = std::abs(diff);
6449 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6450 {
6451 const Tp frac = diff / f0;
6452 if (std::abs(frac) > max_abs_frac)
6453 max_abs_frac = std::abs(frac);
6454 }
6455 }
6456 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6457}
6458
6459// Test data for a=1.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
6460testcase_hyperg<double> data094[] = {
f92ab29f 6461 { 0.64582752605387961, 1.0000000000000000, 5.0000000000000000,
7c62b943 6462 8.0000000000000000, -0.90000000000000002 },
f92ab29f 6463 { 0.67184161997264169, 1.0000000000000000, 5.0000000000000000,
7c62b943 6464 8.0000000000000000, -0.80000000000000004 },
f92ab29f 6465 { 0.70012779922368040, 1.0000000000000000, 5.0000000000000000,
7c62b943 6466 8.0000000000000000, -0.69999999999999996 },
f92ab29f 6467 { 0.73100784656910256, 1.0000000000000000, 5.0000000000000000,
7c62b943 6468 8.0000000000000000, -0.59999999999999998 },
f92ab29f 6469 { 0.76486919089091077, 1.0000000000000000, 5.0000000000000000,
7c62b943 6470 8.0000000000000000, -0.50000000000000000 },
f92ab29f 6471 { 0.80218301124334579, 1.0000000000000000, 5.0000000000000000,
7c62b943 6472 8.0000000000000000, -0.40000000000000002 },
f92ab29f 6473 { 0.84352883533234446, 1.0000000000000000, 5.0000000000000000,
7c62b943 6474 8.0000000000000000, -0.30000000000000004 },
f92ab29f 6475 { 0.88962858902212572, 1.0000000000000000, 5.0000000000000000,
7c62b943 6476 8.0000000000000000, -0.19999999999999996 },
f92ab29f 6477 { 0.94139473468584123, 1.0000000000000000, 5.0000000000000000,
7c62b943 6478 8.0000000000000000, -0.099999999999999978 },
f92ab29f 6479 { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
7c62b943 6480 8.0000000000000000, 0.0000000000000000 },
f92ab29f 6481 { 1.0669812691939897, 1.0000000000000000, 5.0000000000000000,
7c62b943 6482 8.0000000000000000, 0.10000000000000009 },
f92ab29f 6483 { 1.1443996012177726, 1.0000000000000000, 5.0000000000000000,
7c62b943 6484 8.0000000000000000, 0.19999999999999996 },
f92ab29f 6485 { 1.2350966976721314, 1.0000000000000000, 5.0000000000000000,
7c62b943 6486 8.0000000000000000, 0.30000000000000004 },
f92ab29f 6487 { 1.3431264370409088, 1.0000000000000000, 5.0000000000000000,
7c62b943 6488 8.0000000000000000, 0.39999999999999991 },
f92ab29f 6489 { 1.4745266814162399, 1.0000000000000000, 5.0000000000000000,
7c62b943 6490 8.0000000000000000, 0.50000000000000000 },
f92ab29f 6491 { 1.6388137104840066, 1.0000000000000000, 5.0000000000000000,
7c62b943 6492 8.0000000000000000, 0.60000000000000009 },
f92ab29f 6493 { 1.8522074849776518, 1.0000000000000000, 5.0000000000000000,
7c62b943 6494 8.0000000000000000, 0.69999999999999996 },
f92ab29f 6495 { 2.1458016978417458, 1.0000000000000000, 5.0000000000000000,
7c62b943 6496 8.0000000000000000, 0.80000000000000004 },
f92ab29f 6497 { 2.5927464669826339, 1.0000000000000000, 5.0000000000000000,
7c62b943
BK
6498 8.0000000000000000, 0.89999999999999991 },
6499};
6500
6501// Test function for a=1.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
6502template <typename Tp>
6503void test094()
6504{
6505 const Tp eps = std::numeric_limits<Tp>::epsilon();
6506 Tp max_abs_diff = -Tp(1);
6507 Tp max_abs_frac = -Tp(1);
6508 unsigned int num_datum = sizeof(data094)
6509 / sizeof(testcase_hyperg<double>);
6510 for (unsigned int i = 0; i < num_datum; ++i)
6511 {
6512 const Tp f = std::tr1::hyperg(Tp(data094[i].a), Tp(data094[i].b),
6513 Tp(data094[i].c), Tp(data094[i].x));
6514 const Tp f0 = data094[i].f0;
6515 const Tp diff = f - f0;
6516 if (std::abs(diff) > max_abs_diff)
6517 max_abs_diff = std::abs(diff);
6518 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6519 {
6520 const Tp frac = diff / f0;
6521 if (std::abs(frac) > max_abs_frac)
6522 max_abs_frac = std::abs(frac);
6523 }
6524 }
6525 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6526}
6527
6528// Test data for a=1.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
6529testcase_hyperg<double> data095[] = {
f92ab29f 6530 { 0.69583236336670629, 1.0000000000000000, 5.0000000000000000,
7c62b943 6531 10.000000000000000, -0.90000000000000002 },
f92ab29f 6532 { 0.71968920666899694, 1.0000000000000000, 5.0000000000000000,
7c62b943 6533 10.000000000000000, -0.80000000000000004 },
f92ab29f 6534 { 0.74533885416044232, 1.0000000000000000, 5.0000000000000000,
7c62b943 6535 10.000000000000000, -0.69999999999999996 },
f92ab29f 6536 { 0.77300145361503014, 1.0000000000000000, 5.0000000000000000,
7c62b943 6537 10.000000000000000, -0.59999999999999998 },
f92ab29f 6538 { 0.80293630810919514, 1.0000000000000000, 5.0000000000000000,
7c62b943 6539 10.000000000000000, -0.50000000000000000 },
f92ab29f 6540 { 0.83545132638592035, 1.0000000000000000, 5.0000000000000000,
7c62b943 6541 10.000000000000000, -0.40000000000000002 },
f92ab29f 6542 { 0.87091544744412508, 1.0000000000000000, 5.0000000000000000,
7c62b943 6543 10.000000000000000, -0.30000000000000004 },
f92ab29f 6544 { 0.90977522877919847, 1.0000000000000000, 5.0000000000000000,
7c62b943 6545 10.000000000000000, -0.19999999999999996 },
f92ab29f 6546 { 0.95257738192069130, 1.0000000000000000, 5.0000000000000000,
7c62b943 6547 10.000000000000000, -0.099999999999999978 },
f92ab29f 6548 { 1.0000000000000000, 1.0000000000000000, 5.0000000000000000,
7c62b943 6549 10.000000000000000, 0.0000000000000000 },
f92ab29f 6550 { 1.0528968282789379, 1.0000000000000000, 5.0000000000000000,
7c62b943 6551 10.000000000000000, 0.10000000000000009 },
f92ab29f 6552 { 1.1123617169062123, 1.0000000000000000, 5.0000000000000000,
7c62b943 6553 10.000000000000000, 0.19999999999999996 },
f92ab29f 6554 { 1.1798254572896132, 1.0000000000000000, 5.0000000000000000,
7c62b943 6555 10.000000000000000, 0.30000000000000004 },
f92ab29f 6556 { 1.2572069000522696, 1.0000000000000000, 5.0000000000000000,
7c62b943 6557 10.000000000000000, 0.39999999999999991 },
f92ab29f 6558 { 1.3471600884974377, 1.0000000000000000, 5.0000000000000000,
7c62b943 6559 10.000000000000000, 0.50000000000000000 },
f92ab29f 6560 { 1.4535032279573519, 1.0000000000000000, 5.0000000000000000,
7c62b943 6561 10.000000000000000, 0.60000000000000009 },
f92ab29f 6562 { 1.5820245752814948, 1.0000000000000000, 5.0000000000000000,
7c62b943 6563 10.000000000000000, 0.69999999999999996 },
f92ab29f 6564 { 1.7421756366906538, 1.0000000000000000, 5.0000000000000000,
7c62b943 6565 10.000000000000000, 0.80000000000000004 },
f92ab29f 6566 { 1.9513145531098233, 1.0000000000000000, 5.0000000000000000,
7c62b943
BK
6567 10.000000000000000, 0.89999999999999991 },
6568};
6569
6570// Test function for a=1.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
6571template <typename Tp>
6572void test095()
6573{
6574 const Tp eps = std::numeric_limits<Tp>::epsilon();
6575 Tp max_abs_diff = -Tp(1);
6576 Tp max_abs_frac = -Tp(1);
6577 unsigned int num_datum = sizeof(data095)
6578 / sizeof(testcase_hyperg<double>);
6579 for (unsigned int i = 0; i < num_datum; ++i)
6580 {
6581 const Tp f = std::tr1::hyperg(Tp(data095[i].a), Tp(data095[i].b),
6582 Tp(data095[i].c), Tp(data095[i].x));
6583 const Tp f0 = data095[i].f0;
6584 const Tp diff = f - f0;
6585 if (std::abs(diff) > max_abs_diff)
6586 max_abs_diff = std::abs(diff);
6587 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6588 {
6589 const Tp frac = diff / f0;
6590 if (std::abs(frac) > max_abs_frac)
6591 max_abs_frac = std::abs(frac);
6592 }
6593 }
6594 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6595}
6596
6597// Test data for a=1.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
6598testcase_hyperg<double> data096[] = {
f92ab29f 6599 { 0.12307420104127871, 1.0000000000000000, 10.000000000000000,
7c62b943 6600 2.0000000000000000, -0.90000000000000002 },
f92ab29f 6601 { 0.13818870041457423, 1.0000000000000000, 10.000000000000000,
7c62b943 6602 2.0000000000000000, -0.80000000000000004 },
f92ab29f 6603 { 0.15739165631811691, 1.0000000000000000, 10.000000000000000,
7c62b943 6604 2.0000000000000000, -0.69999999999999996 },
f92ab29f 6605 { 0.18249038606882068, 1.0000000000000000, 10.000000000000000,
7c62b943 6606 2.0000000000000000, -0.59999999999999998 },
f92ab29f 6607 { 0.21644171225027786, 1.0000000000000000, 10.000000000000000,
7c62b943 6608 2.0000000000000000, -0.50000000000000000 },
f92ab29f 6609 { 0.26433326159804160, 1.0000000000000000, 10.000000000000000,
7c62b943 6610 2.0000000000000000, -0.40000000000000002 },
f92ab29f 6611 { 0.33544459430654533, 1.0000000000000000, 10.000000000000000,
7c62b943 6612 2.0000000000000000, -0.30000000000000004 },
f92ab29f 6613 { 0.44788516696232517, 1.0000000000000000, 10.000000000000000,
7c62b943 6614 2.0000000000000000, -0.19999999999999996 },
f92ab29f 6615 { 0.63989153514168362, 1.0000000000000000, 10.000000000000000,
7c62b943 6616 2.0000000000000000, -0.099999999999999978 },
f92ab29f 6617 { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
7c62b943 6618 2.0000000000000000, 0.0000000000000000 },
f92ab29f 6619 { 1.7568608796813312, 1.0000000000000000, 10.000000000000000,
7c62b943 6620 2.0000000000000000, 0.10000000000000009 },
f92ab29f 6621 { 3.5836558871799027, 1.0000000000000000, 10.000000000000000,
7c62b943 6622 2.0000000000000000, 0.19999999999999996 },
f92ab29f 6623 { 8.8077526749963226, 1.0000000000000000, 10.000000000000000,
7c62b943 6624 2.0000000000000000, 0.30000000000000004 },
f92ab29f 6625 { 27.285841702089190, 1.0000000000000000, 10.000000000000000,
7c62b943 6626 2.0000000000000000, 0.39999999999999991 },
f92ab29f 6627 { 113.55555555555557, 1.0000000000000000, 10.000000000000000,
7c62b943 6628 2.0000000000000000, 0.50000000000000000 },
f92ab29f 6629 { 706.24023437500091, 1.0000000000000000, 10.000000000000000,
7c62b943 6630 2.0000000000000000, 0.60000000000000009 },
f92ab29f 6631 { 8064.1687976651992, 1.0000000000000000, 10.000000000000000,
7c62b943 6632 2.0000000000000000, 0.69999999999999996 },
f92ab29f 6633 { 271267.22222222196, 1.0000000000000000, 10.000000000000000,
7c62b943 6634 2.0000000000000000, 0.80000000000000004 },
f92ab29f 6635 { 123456789.99999890, 1.0000000000000000, 10.000000000000000,
7c62b943
BK
6636 2.0000000000000000, 0.89999999999999991 },
6637};
6638
6639// Test function for a=1.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
6640template <typename Tp>
6641void test096()
6642{
6643 const Tp eps = std::numeric_limits<Tp>::epsilon();
6644 Tp max_abs_diff = -Tp(1);
6645 Tp max_abs_frac = -Tp(1);
6646 unsigned int num_datum = sizeof(data096)
6647 / sizeof(testcase_hyperg<double>);
6648 for (unsigned int i = 0; i < num_datum; ++i)
6649 {
6650 const Tp f = std::tr1::hyperg(Tp(data096[i].a), Tp(data096[i].b),
6651 Tp(data096[i].c), Tp(data096[i].x));
6652 const Tp f0 = data096[i].f0;
6653 const Tp diff = f - f0;
6654 if (std::abs(diff) > max_abs_diff)
6655 max_abs_diff = std::abs(diff);
6656 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6657 {
6658 const Tp frac = diff / f0;
6659 if (std::abs(frac) > max_abs_frac)
6660 max_abs_frac = std::abs(frac);
6661 }
6662 }
6663 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6664}
6665
6666// Test data for a=1.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
6667testcase_hyperg<double> data097[] = {
f92ab29f 6668 { 0.28363728383055758, 1.0000000000000000, 10.000000000000000,
7c62b943 6669 4.0000000000000000, -0.90000000000000002 },
f92ab29f 6670 { 0.30933003169808387, 1.0000000000000000, 10.000000000000000,
7c62b943 6671 4.0000000000000000, -0.80000000000000004 },
f92ab29f 6672 { 0.33998437757128797, 1.0000000000000000, 10.000000000000000,
7c62b943 6673 4.0000000000000000, -0.69999999999999996 },
f92ab29f 6674 { 0.37713553224291119, 1.0000000000000000, 10.000000000000000,
7c62b943 6675 4.0000000000000000, -0.59999999999999998 },
f92ab29f 6676 { 0.42299736538419658, 1.0000000000000000, 10.000000000000000,
7c62b943 6677 4.0000000000000000, -0.50000000000000000 },
f92ab29f 6678 { 0.48086597727600106, 1.0000000000000000, 10.000000000000000,
7c62b943 6679 4.0000000000000000, -0.40000000000000002 },
f92ab29f 6680 { 0.55583495759293045, 1.0000000000000000, 10.000000000000000,
7c62b943 6681 4.0000000000000000, -0.30000000000000004 },
f92ab29f 6682 { 0.65612850114039667, 1.0000000000000000, 10.000000000000000,
7c62b943 6683 4.0000000000000000, -0.19999999999999996 },
f92ab29f 6684 { 0.79573668772968120, 1.0000000000000000, 10.000000000000000,
7c62b943 6685 4.0000000000000000, -0.099999999999999978 },
f92ab29f 6686 { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
7c62b943 6687 4.0000000000000000, 0.0000000000000000 },
f92ab29f 6688 { 1.3184712058058303, 1.0000000000000000, 10.000000000000000,
7c62b943 6689 4.0000000000000000, 0.10000000000000009 },
f92ab29f 6690 { 1.8576958065941214, 1.0000000000000000, 10.000000000000000,
7c62b943 6691 4.0000000000000000, 0.19999999999999996 },
f92ab29f 6692 { 2.8759509651764228, 1.0000000000000000, 10.000000000000000,
7c62b943 6693 4.0000000000000000, 0.30000000000000004 },
f92ab29f 6694 { 5.1046225531822182, 1.0000000000000000, 10.000000000000000,
7c62b943 6695 4.0000000000000000, 0.39999999999999991 },
f92ab29f 6696 { 11.095238095238095, 1.0000000000000000, 10.000000000000000,
7c62b943 6697 4.0000000000000000, 0.50000000000000000 },
f92ab29f 6698 { 32.797154017857174, 1.0000000000000000, 10.000000000000000,
7c62b943 6699 4.0000000000000000, 0.60000000000000009 },
f92ab29f 6700 { 158.01935680536477, 1.0000000000000000, 10.000000000000000,
7c62b943 6701 4.0000000000000000, 0.69999999999999996 },
f92ab29f 6702 { 1815.9523809523814, 1.0000000000000000, 10.000000000000000,
7c62b943 6703 4.0000000000000000, 0.80000000000000004 },
f92ab29f 6704 { 163302.14285714156, 1.0000000000000000, 10.000000000000000,
7c62b943
BK
6705 4.0000000000000000, 0.89999999999999991 },
6706};
6707
6708// Test function for a=1.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
6709template <typename Tp>
6710void test097()
6711{
6712 const Tp eps = std::numeric_limits<Tp>::epsilon();
6713 Tp max_abs_diff = -Tp(1);
6714 Tp max_abs_frac = -Tp(1);
6715 unsigned int num_datum = sizeof(data097)
6716 / sizeof(testcase_hyperg<double>);
6717 for (unsigned int i = 0; i < num_datum; ++i)
6718 {
6719 const Tp f = std::tr1::hyperg(Tp(data097[i].a), Tp(data097[i].b),
6720 Tp(data097[i].c), Tp(data097[i].x));
6721 const Tp f0 = data097[i].f0;
6722 const Tp diff = f - f0;
6723 if (std::abs(diff) > max_abs_diff)
6724 max_abs_diff = std::abs(diff);
6725 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6726 {
6727 const Tp frac = diff / f0;
6728 if (std::abs(frac) > max_abs_frac)
6729 max_abs_frac = std::abs(frac);
6730 }
6731 }
6732 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6733}
6734
6735// Test data for a=1.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
6736testcase_hyperg<double> data098[] = {
f92ab29f 6737 { 0.39006633302741794, 1.0000000000000000, 10.000000000000000,
7c62b943 6738 6.0000000000000000, -0.90000000000000002 },
f92ab29f 6739 { 0.41898885698103294, 1.0000000000000000, 10.000000000000000,
7c62b943 6740 6.0000000000000000, -0.80000000000000004 },
f92ab29f 6741 { 0.45245557983812590, 1.0000000000000000, 10.000000000000000,
7c62b943 6742 6.0000000000000000, -0.69999999999999996 },
f92ab29f 6743 { 0.49160548618861633, 1.0000000000000000, 10.000000000000000,
7c62b943 6744 6.0000000000000000, -0.59999999999999998 },
f92ab29f 6745 { 0.53798419230517980, 1.0000000000000000, 10.000000000000000,
7c62b943 6746 6.0000000000000000, -0.50000000000000000 },
f92ab29f 6747 { 0.59373881442067344, 1.0000000000000000, 10.000000000000000,
7c62b943 6748 6.0000000000000000, -0.40000000000000002 },
f92ab29f 6749 { 0.66193391357076115, 1.0000000000000000, 10.000000000000000,
7c62b943 6750 6.0000000000000000, -0.30000000000000004 },
f92ab29f 6751 { 0.74708402736952129, 1.0000000000000000, 10.000000000000000,
7c62b943 6752 6.0000000000000000, -0.19999999999999996 },
f92ab29f 6753 { 0.85609281019430605, 1.0000000000000000, 10.000000000000000,
7c62b943 6754 6.0000000000000000, -0.099999999999999978 },
f92ab29f 6755 { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
7c62b943 6756 6.0000000000000000, 0.0000000000000000 },
f92ab29f 6757 { 1.1974451135148187, 1.0000000000000000, 10.000000000000000,
7c62b943 6758 6.0000000000000000, 0.10000000000000009 },
f92ab29f 6759 { 1.4820886036706347, 1.0000000000000000, 10.000000000000000,
7c62b943 6760 6.0000000000000000, 0.19999999999999996 },
f92ab29f 6761 { 1.9201183180477521, 1.0000000000000000, 10.000000000000000,
7c62b943 6762 6.0000000000000000, 0.30000000000000004 },
f92ab29f 6763 { 2.6569338297733336, 1.0000000000000000, 10.000000000000000,
7c62b943 6764 6.0000000000000000, 0.39999999999999991 },
f92ab29f 6765 { 4.0634920634920650, 1.0000000000000000, 10.000000000000000,
7c62b943 6766 6.0000000000000000, 0.50000000000000000 },
f92ab29f 6767 { 7.3102678571428568, 1.0000000000000000, 10.000000000000000,
7c62b943 6768 6.0000000000000000, 0.60000000000000009 },
f92ab29f 6769 { 17.512574302697733, 1.0000000000000000, 10.000000000000000,
7c62b943 6770 6.0000000000000000, 0.69999999999999996 },
f92ab29f 6771 { 74.206349206349131, 1.0000000000000000, 10.000000000000000,
7c62b943 6772 6.0000000000000000, 0.80000000000000004 },
f92ab29f 6773 { 1342.8571428571363, 1.0000000000000000, 10.000000000000000,
7c62b943
BK
6774 6.0000000000000000, 0.89999999999999991 },
6775};
6776
6777// Test function for a=1.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
6778template <typename Tp>
6779void test098()
6780{
6781 const Tp eps = std::numeric_limits<Tp>::epsilon();
6782 Tp max_abs_diff = -Tp(1);
6783 Tp max_abs_frac = -Tp(1);
6784 unsigned int num_datum = sizeof(data098)
6785 / sizeof(testcase_hyperg<double>);
6786 for (unsigned int i = 0; i < num_datum; ++i)
6787 {
6788 const Tp f = std::tr1::hyperg(Tp(data098[i].a), Tp(data098[i].b),
6789 Tp(data098[i].c), Tp(data098[i].x));
6790 const Tp f0 = data098[i].f0;
6791 const Tp diff = f - f0;
6792 if (std::abs(diff) > max_abs_diff)
6793 max_abs_diff = std::abs(diff);
6794 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6795 {
6796 const Tp frac = diff / f0;
6797 if (std::abs(frac) > max_abs_frac)
6798 max_abs_frac = std::abs(frac);
6799 }
6800 }
6801 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6802}
6803
6804// Test data for a=1.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
6805testcase_hyperg<double> data099[] = {
f92ab29f 6806 { 0.46726928123633193, 1.0000000000000000, 10.000000000000000,
7c62b943 6807 8.0000000000000000, -0.90000000000000002 },
f92ab29f 6808 { 0.49687547629934464, 1.0000000000000000, 10.000000000000000,
7c62b943 6809 8.0000000000000000, -0.80000000000000004 },
f92ab29f 6810 { 0.53045208856322235, 1.0000000000000000, 10.000000000000000,
7c62b943 6811 8.0000000000000000, -0.69999999999999996 },
f92ab29f 6812 { 0.56884765624999978, 1.0000000000000000, 10.000000000000000,
7c62b943 6813 8.0000000000000000, -0.59999999999999998 },
f92ab29f 6814 { 0.61316872427983526, 1.0000000000000000, 10.000000000000000,
7c62b943 6815 8.0000000000000000, -0.50000000000000000 },
f92ab29f 6816 { 0.66488500161969544, 1.0000000000000000, 10.000000000000000,
7c62b943 6817 8.0000000000000000, -0.40000000000000002 },
f92ab29f 6818 { 0.72598998634501577, 1.0000000000000000, 10.000000000000000,
7c62b943 6819 8.0000000000000000, -0.30000000000000004 },
f92ab29f 6820 { 0.79925411522633782, 1.0000000000000000, 10.000000000000000,
7c62b943 6821 8.0000000000000000, -0.19999999999999996 },
f92ab29f 6822 { 0.88863845062192193, 1.0000000000000000, 10.000000000000000,
7c62b943 6823 8.0000000000000000, -0.099999999999999978 },
f92ab29f 6824 { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
7c62b943 6825 8.0000000000000000, 0.0000000000000000 },
f92ab29f 6826 { 1.1423563481176653, 1.0000000000000000, 10.000000000000000,
7c62b943 6827 8.0000000000000000, 0.10000000000000009 },
f92ab29f 6828 { 1.3302951388888888, 1.0000000000000000, 10.000000000000000,
7c62b943 6829 8.0000000000000000, 0.19999999999999996 },
f92ab29f 6830 { 1.5889212827988335, 1.0000000000000000, 10.000000000000000,
7c62b943 6831 8.0000000000000000, 0.30000000000000004 },
f92ab29f 6832 { 1.9650205761316870, 1.0000000000000000, 10.000000000000000,
7c62b943 6833 8.0000000000000000, 0.39999999999999991 },
f92ab29f 6834 { 2.5555555555555549, 1.0000000000000000, 10.000000000000000,
7c62b943 6835 8.0000000000000000, 0.50000000000000000 },
f92ab29f 6836 { 3.5937500000000013, 1.0000000000000000, 10.000000000000000,
7c62b943 6837 8.0000000000000000, 0.60000000000000009 },
f92ab29f 6838 { 5.7818930041152203, 1.0000000000000000, 10.000000000000000,
7c62b943 6839 8.0000000000000000, 0.69999999999999996 },
f92ab29f 6840 { 12.222222222222220, 1.0000000000000000, 10.000000000000000,
7c62b943 6841 8.0000000000000000, 0.80000000000000004 },
f92ab29f 6842 { 54.999999999999780, 1.0000000000000000, 10.000000000000000,
7c62b943
BK
6843 8.0000000000000000, 0.89999999999999991 },
6844};
6845
6846// Test function for a=1.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
6847template <typename Tp>
6848void test099()
6849{
6850 const Tp eps = std::numeric_limits<Tp>::epsilon();
6851 Tp max_abs_diff = -Tp(1);
6852 Tp max_abs_frac = -Tp(1);
6853 unsigned int num_datum = sizeof(data099)
6854 / sizeof(testcase_hyperg<double>);
6855 for (unsigned int i = 0; i < num_datum; ++i)
6856 {
6857 const Tp f = std::tr1::hyperg(Tp(data099[i].a), Tp(data099[i].b),
6858 Tp(data099[i].c), Tp(data099[i].x));
6859 const Tp f0 = data099[i].f0;
6860 const Tp diff = f - f0;
6861 if (std::abs(diff) > max_abs_diff)
6862 max_abs_diff = std::abs(diff);
6863 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6864 {
6865 const Tp frac = diff / f0;
6866 if (std::abs(frac) > max_abs_frac)
6867 max_abs_frac = std::abs(frac);
6868 }
6869 }
6870 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6871}
6872
6873// Test data for a=1.0000000000000000, b=10.000000000000000, c=10.000000000000000.
6874testcase_hyperg<double> data100[] = {
f92ab29f 6875 { 0.52631578947368429, 1.0000000000000000, 10.000000000000000,
7c62b943 6876 10.000000000000000, -0.90000000000000002 },
f92ab29f 6877 { 0.55555555555555558, 1.0000000000000000, 10.000000000000000,
7c62b943 6878 10.000000000000000, -0.80000000000000004 },
f92ab29f 6879 { 0.58823529411764708, 1.0000000000000000, 10.000000000000000,
7c62b943 6880 10.000000000000000, -0.69999999999999996 },
f92ab29f 6881 { 0.62500000000000000, 1.0000000000000000, 10.000000000000000,
7c62b943 6882 10.000000000000000, -0.59999999999999998 },
f92ab29f 6883 { 0.66666666666666663, 1.0000000000000000, 10.000000000000000,
7c62b943 6884 10.000000000000000, -0.50000000000000000 },
f92ab29f 6885 { 0.71428571428571430, 1.0000000000000000, 10.000000000000000,
7c62b943 6886 10.000000000000000, -0.40000000000000002 },
f92ab29f 6887 { 0.76923076923076927, 1.0000000000000000, 10.000000000000000,
7c62b943 6888 10.000000000000000, -0.30000000000000004 },
f92ab29f 6889 { 0.83333333333333337, 1.0000000000000000, 10.000000000000000,
7c62b943 6890 10.000000000000000, -0.19999999999999996 },
f92ab29f 6891 { 0.90909090909090906, 1.0000000000000000, 10.000000000000000,
7c62b943 6892 10.000000000000000, -0.099999999999999978 },
f92ab29f 6893 { 1.0000000000000000, 1.0000000000000000, 10.000000000000000,
7c62b943 6894 10.000000000000000, 0.0000000000000000 },
f92ab29f 6895 { 1.1111111111111112, 1.0000000000000000, 10.000000000000000,
7c62b943 6896 10.000000000000000, 0.10000000000000009 },
f92ab29f 6897 { 1.2500000000000000, 1.0000000000000000, 10.000000000000000,
7c62b943 6898 10.000000000000000, 0.19999999999999996 },
f92ab29f 6899 { 1.4285714285714286, 1.0000000000000000, 10.000000000000000,
7c62b943 6900 10.000000000000000, 0.30000000000000004 },
f92ab29f 6901 { 1.6666666666666663, 1.0000000000000000, 10.000000000000000,
7c62b943 6902 10.000000000000000, 0.39999999999999991 },
f92ab29f 6903 { 2.0000000000000000, 1.0000000000000000, 10.000000000000000,
7c62b943 6904 10.000000000000000, 0.50000000000000000 },
f92ab29f 6905 { 2.5000000000000004, 1.0000000000000000, 10.000000000000000,
7c62b943 6906 10.000000000000000, 0.60000000000000009 },
f92ab29f 6907 { 3.3333333333333330, 1.0000000000000000, 10.000000000000000,
7c62b943 6908 10.000000000000000, 0.69999999999999996 },
f92ab29f 6909 { 5.0000000000000009, 1.0000000000000000, 10.000000000000000,
7c62b943 6910 10.000000000000000, 0.80000000000000004 },
f92ab29f 6911 { 9.9999999999999929, 1.0000000000000000, 10.000000000000000,
7c62b943
BK
6912 10.000000000000000, 0.89999999999999991 },
6913};
6914
6915// Test function for a=1.0000000000000000, b=10.000000000000000, c=10.000000000000000.
6916template <typename Tp>
6917void test100()
6918{
6919 const Tp eps = std::numeric_limits<Tp>::epsilon();
6920 Tp max_abs_diff = -Tp(1);
6921 Tp max_abs_frac = -Tp(1);
6922 unsigned int num_datum = sizeof(data100)
6923 / sizeof(testcase_hyperg<double>);
6924 for (unsigned int i = 0; i < num_datum; ++i)
6925 {
6926 const Tp f = std::tr1::hyperg(Tp(data100[i].a), Tp(data100[i].b),
6927 Tp(data100[i].c), Tp(data100[i].x));
6928 const Tp f0 = data100[i].f0;
6929 const Tp diff = f - f0;
6930 if (std::abs(diff) > max_abs_diff)
6931 max_abs_diff = std::abs(diff);
6932 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
6933 {
6934 const Tp frac = diff / f0;
6935 if (std::abs(frac) > max_abs_frac)
6936 max_abs_frac = std::abs(frac);
6937 }
6938 }
6939 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
6940}
6941
6942// Test data for a=1.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
6943testcase_hyperg<double> data101[] = {
f92ab29f 6944 { 0.058479236576646373, 1.0000000000000000, 20.000000000000000,
7c62b943 6945 2.0000000000000000, -0.90000000000000002 },
f92ab29f 6946 { 0.065788544763137669, 1.0000000000000000, 20.000000000000000,
7c62b943 6947 2.0000000000000000, -0.80000000000000004 },
f92ab29f 6948 { 0.075184824937824662, 1.0000000000000000, 20.000000000000000,
7c62b943 6949 2.0000000000000000, -0.69999999999999996 },
f92ab29f 6950 { 0.087707688693157260, 1.0000000000000000, 20.000000000000000,
7c62b943 6951 2.0000000000000000, -0.59999999999999998 },
f92ab29f 6952 { 0.10521567442213345, 1.0000000000000000, 20.000000000000000,
7c62b943 6953 2.0000000000000000, -0.50000000000000000 },
f92ab29f 6954 { 0.13135877960541525, 1.0000000000000000, 20.000000000000000,
7c62b943 6955 2.0000000000000000, -0.40000000000000002 },
f92ab29f 6956 { 0.17423854066297104, 1.0000000000000000, 20.000000000000000,
7c62b943 6957 2.0000000000000000, -0.30000000000000004 },
f92ab29f 6958 { 0.25492082527223525, 1.0000000000000000, 20.000000000000000,
7c62b943 6959 2.0000000000000000, -0.19999999999999996 },
f92ab29f 6960 { 0.44025895219654843, 1.0000000000000000, 20.000000000000000,
7c62b943 6961 2.0000000000000000, -0.099999999999999978 },
f92ab29f 6962 { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
7c62b943 6963 2.0000000000000000, 0.0000000000000000 },
f92ab29f 6964 { 3.3698615820910360, 1.0000000000000000, 20.000000000000000,
7c62b943 6965 2.0000000000000000, 0.10000000000000009 },
f92ab29f 6966 { 17.997089220808483, 1.0000000000000000, 20.000000000000000,
7c62b943 6967 2.0000000000000000, 0.19999999999999996 },
f92ab29f 6968 { 153.73298291118951, 1.0000000000000000, 20.000000000000000,
7c62b943 6969 2.0000000000000000, 0.30000000000000004 },
f92ab29f 6970 { 2159.1667587825627, 1.0000000000000000, 20.000000000000000,
7c62b943 6971 2.0000000000000000, 0.39999999999999991 },
f92ab29f 6972 { 55188.105263157879, 1.0000000000000000, 20.000000000000000,
7c62b943 6973 2.0000000000000000, 0.50000000000000000 },
f92ab29f 6974 { 3191209.3921857267, 1.0000000000000000, 20.000000000000000,
7c62b943 6975 2.0000000000000000, 0.60000000000000009 },
f92ab29f 6976 { 646910975.29152656, 1.0000000000000000, 20.000000000000000,
7c62b943 6977 2.0000000000000000, 0.69999999999999996 },
f92ab29f 6978 { 1254834626850.2659, 1.0000000000000000, 20.000000000000000,
7c62b943 6979 2.0000000000000000, 0.80000000000000004 },
f92ab29f 6980 { 5.8479532163741414e+17, 1.0000000000000000, 20.000000000000000,
7c62b943
BK
6981 2.0000000000000000, 0.89999999999999991 },
6982};
6983
6984// Test function for a=1.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
6985template <typename Tp>
6986void test101()
6987{
6988 const Tp eps = std::numeric_limits<Tp>::epsilon();
6989 Tp max_abs_diff = -Tp(1);
6990 Tp max_abs_frac = -Tp(1);
6991 unsigned int num_datum = sizeof(data101)
6992 / sizeof(testcase_hyperg<double>);
6993 for (unsigned int i = 0; i < num_datum; ++i)
6994 {
6995 const Tp f = std::tr1::hyperg(Tp(data101[i].a), Tp(data101[i].b),
6996 Tp(data101[i].c), Tp(data101[i].x));
6997 const Tp f0 = data101[i].f0;
6998 const Tp diff = f - f0;
6999 if (std::abs(diff) > max_abs_diff)
7000 max_abs_diff = std::abs(diff);
7001 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7002 {
7003 const Tp frac = diff / f0;
7004 if (std::abs(frac) > max_abs_frac)
7005 max_abs_frac = std::abs(frac);
7006 }
7007 }
7008 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7009}
7010
7011// Test data for a=1.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
7012testcase_hyperg<double> data102[] = {
f92ab29f 7013 { 0.15519511120894947, 1.0000000000000000, 20.000000000000000,
7c62b943 7014 4.0000000000000000, -0.90000000000000002 },
f92ab29f 7015 { 0.17197165701692899, 1.0000000000000000, 20.000000000000000,
7c62b943 7016 4.0000000000000000, -0.80000000000000004 },
f92ab29f 7017 { 0.19276847315207363, 1.0000000000000000, 20.000000000000000,
7c62b943 7018 4.0000000000000000, -0.69999999999999996 },
f92ab29f 7019 { 0.21920107206179093, 1.0000000000000000, 20.000000000000000,
7c62b943 7020 4.0000000000000000, -0.59999999999999998 },
f92ab29f 7021 { 0.25386158960390581, 1.0000000000000000, 20.000000000000000,
7c62b943 7022 4.0000000000000000, -0.50000000000000000 },
f92ab29f 7023 { 0.30115970686600657, 1.0000000000000000, 20.000000000000000,
7c62b943 7024 4.0000000000000000, -0.40000000000000002 },
f92ab29f 7025 { 0.36916408142057117, 1.0000000000000000, 20.000000000000000,
7c62b943 7026 4.0000000000000000, -0.30000000000000004 },
f92ab29f 7027 { 0.47406175901569558, 1.0000000000000000, 20.000000000000000,
7c62b943 7028 4.0000000000000000, -0.19999999999999996 },
f92ab29f 7029 { 0.65237908266239919, 1.0000000000000000, 20.000000000000000,
7c62b943 7030 4.0000000000000000, -0.099999999999999978 },
f92ab29f 7031 { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
7c62b943 7032 4.0000000000000000, 0.0000000000000000 },
f92ab29f 7033 { 1.8227213362622299, 1.0000000000000000, 20.000000000000000,
7c62b943 7034 4.0000000000000000, 0.10000000000000009 },
f92ab29f 7035 { 4.3716358339791332, 1.0000000000000000, 20.000000000000000,
7c62b943 7036 4.0000000000000000, 0.19999999999999996 },
f92ab29f 7037 { 15.670841312959222, 1.0000000000000000, 20.000000000000000,
7c62b943 7038 4.0000000000000000, 0.30000000000000004 },
f92ab29f 7039 { 94.742651122760179, 1.0000000000000000, 20.000000000000000,
7c62b943 7040 4.0000000000000000, 0.39999999999999991 },
f92ab29f 7041 { 1081.7275541795671, 1.0000000000000000, 20.000000000000000,
7c62b943 7042 4.0000000000000000, 0.50000000000000000 },
f92ab29f 7043 { 27809.787731465960, 1.0000000000000000, 20.000000000000000,
7c62b943 7044 4.0000000000000000, 0.60000000000000009 },
f92ab29f 7045 { 2329811.1715181042, 1.0000000000000000, 20.000000000000000,
7c62b943 7046 4.0000000000000000, 0.69999999999999996 },
f92ab29f 7047 { 1537787532.6780224, 1.0000000000000000, 20.000000000000000,
7c62b943 7048 4.0000000000000000, 0.80000000000000004 },
f92ab29f 7049 { 141562653506999.88, 1.0000000000000000, 20.000000000000000,
7c62b943
BK
7050 4.0000000000000000, 0.89999999999999991 },
7051};
7052
7053// Test function for a=1.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
7054template <typename Tp>
7055void test102()
7056{
7057 const Tp eps = std::numeric_limits<Tp>::epsilon();
7058 Tp max_abs_diff = -Tp(1);
7059 Tp max_abs_frac = -Tp(1);
7060 unsigned int num_datum = sizeof(data102)
7061 / sizeof(testcase_hyperg<double>);
7062 for (unsigned int i = 0; i < num_datum; ++i)
7063 {
7064 const Tp f = std::tr1::hyperg(Tp(data102[i].a), Tp(data102[i].b),
7065 Tp(data102[i].c), Tp(data102[i].x));
7066 const Tp f0 = data102[i].f0;
7067 const Tp diff = f - f0;
7068 if (std::abs(diff) > max_abs_diff)
7069 max_abs_diff = std::abs(diff);
7070 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7071 {
7072 const Tp frac = diff / f0;
7073 if (std::abs(frac) > max_abs_frac)
7074 max_abs_frac = std::abs(frac);
7075 }
7076 }
7077 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7078}
7079
7080// Test data for a=1.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
7081testcase_hyperg<double> data103[] = {
f92ab29f 7082 { 0.23253645591196570, 1.0000000000000000, 20.000000000000000,
7c62b943 7083 6.0000000000000000, -0.90000000000000002 },
f92ab29f 7084 { 0.25484220947068353, 1.0000000000000000, 20.000000000000000,
7c62b943 7085 6.0000000000000000, -0.80000000000000004 },
f92ab29f 7086 { 0.28181987881113829, 1.0000000000000000, 20.000000000000000,
7c62b943 7087 6.0000000000000000, -0.69999999999999996 },
f92ab29f 7088 { 0.31508211677735765, 1.0000000000000000, 20.000000000000000,
7c62b943 7089 6.0000000000000000, -0.59999999999999998 },
f92ab29f 7090 { 0.35706285886959599, 1.0000000000000000, 20.000000000000000,
7c62b943 7091 6.0000000000000000, -0.50000000000000000 },
f92ab29f 7092 { 0.41160053409238195, 1.0000000000000000, 20.000000000000000,
7c62b943 7093 6.0000000000000000, -0.40000000000000002 },
f92ab29f 7094 { 0.48508083111181949, 1.0000000000000000, 20.000000000000000,
7c62b943 7095 6.0000000000000000, -0.30000000000000004 },
f92ab29f 7096 { 0.58885194371375260, 1.0000000000000000, 20.000000000000000,
7c62b943 7097 6.0000000000000000, -0.19999999999999996 },
f92ab29f 7098 { 0.74482241684585748, 1.0000000000000000, 20.000000000000000,
7c62b943 7099 6.0000000000000000, -0.099999999999999978 },
f92ab29f 7100 { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
7c62b943 7101 6.0000000000000000, 0.0000000000000000 },
f92ab29f 7102 { 1.4700356864367146, 1.0000000000000000, 20.000000000000000,
7c62b943 7103 6.0000000000000000, 0.10000000000000009 },
f92ab29f 7104 { 2.4955144453055143, 1.0000000000000000, 20.000000000000000,
7c62b943 7105 6.0000000000000000, 0.19999999999999996 },
f92ab29f 7106 { 5.3506594845833471, 1.0000000000000000, 20.000000000000000,
7c62b943 7107 6.0000000000000000, 0.30000000000000004 },
f92ab29f 7108 { 16.618413752184221, 1.0000000000000000, 20.000000000000000,
7c62b943 7109 6.0000000000000000, 0.39999999999999991 },
f92ab29f 7110 { 89.310629514963878, 1.0000000000000000, 20.000000000000000,
7c62b943 7111 6.0000000000000000, 0.50000000000000000 },
f92ab29f 7112 { 1029.3439900542960, 1.0000000000000000, 20.000000000000000,
7c62b943 7113 6.0000000000000000, 0.60000000000000009 },
f92ab29f 7114 { 35659.847863372350, 1.0000000000000000, 20.000000000000000,
7c62b943 7115 6.0000000000000000, 0.69999999999999996 },
f92ab29f 7116 { 8009309.6233230168, 1.0000000000000000, 20.000000000000000,
7c62b943 7117 6.0000000000000000, 0.80000000000000004 },
f92ab29f 7118 { 145640590027.39731, 1.0000000000000000, 20.000000000000000,
7c62b943
BK
7119 6.0000000000000000, 0.89999999999999991 },
7120};
7121
7122// Test function for a=1.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
7123template <typename Tp>
7124void test103()
7125{
7126 const Tp eps = std::numeric_limits<Tp>::epsilon();
7127 Tp max_abs_diff = -Tp(1);
7128 Tp max_abs_frac = -Tp(1);
7129 unsigned int num_datum = sizeof(data103)
7130 / sizeof(testcase_hyperg<double>);
7131 for (unsigned int i = 0; i < num_datum; ++i)
7132 {
7133 const Tp f = std::tr1::hyperg(Tp(data103[i].a), Tp(data103[i].b),
7134 Tp(data103[i].c), Tp(data103[i].x));
7135 const Tp f0 = data103[i].f0;
7136 const Tp diff = f - f0;
7137 if (std::abs(diff) > max_abs_diff)
7138 max_abs_diff = std::abs(diff);
7139 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7140 {
7141 const Tp frac = diff / f0;
7142 if (std::abs(frac) > max_abs_frac)
7143 max_abs_frac = std::abs(frac);
7144 }
7145 }
7146 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7147}
7148
7149// Test data for a=1.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
7150testcase_hyperg<double> data104[] = {
f92ab29f 7151 { 0.29614148314592498, 1.0000000000000000, 20.000000000000000,
7c62b943 7152 8.0000000000000000, -0.90000000000000002 },
f92ab29f 7153 { 0.32176277356430810, 1.0000000000000000, 20.000000000000000,
7c62b943 7154 8.0000000000000000, -0.80000000000000004 },
f92ab29f 7155 { 0.35217870475550522, 1.0000000000000000, 20.000000000000000,
7c62b943 7156 8.0000000000000000, -0.69999999999999996 },
f92ab29f 7157 { 0.38885270445515091, 1.0000000000000000, 20.000000000000000,
7c62b943 7158 8.0000000000000000, -0.59999999999999998 },
f92ab29f 7159 { 0.43389978380608424, 1.0000000000000000, 20.000000000000000,
7c62b943 7160 8.0000000000000000, -0.50000000000000000 },
f92ab29f 7161 { 0.49048612522269436, 1.0000000000000000, 20.000000000000000,
7c62b943 7162 8.0000000000000000, -0.40000000000000002 },
f92ab29f 7163 { 0.56355539635634611, 1.0000000000000000, 20.000000000000000,
7c62b943 7164 8.0000000000000000, -0.30000000000000004 },
f92ab29f 7165 { 0.66123153239117682, 1.0000000000000000, 20.000000000000000,
7c62b943 7166 8.0000000000000000, -0.19999999999999996 },
f92ab29f 7167 { 0.79773363961895427, 1.0000000000000000, 20.000000000000000,
7c62b943 7168 8.0000000000000000, -0.099999999999999978 },
f92ab29f 7169 { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
7c62b943 7170 8.0000000000000000, 0.0000000000000000 },
f92ab29f 7171 { 1.3245132157016595, 1.0000000000000000, 20.000000000000000,
7c62b943 7172 8.0000000000000000, 0.10000000000000009 },
f92ab29f 7173 { 1.9065148749742076, 1.0000000000000000, 20.000000000000000,
7c62b943 7174 8.0000000000000000, 0.19999999999999996 },
f92ab29f 7175 { 3.1328798652457452, 1.0000000000000000, 20.000000000000000,
7c62b943 7176 8.0000000000000000, 0.30000000000000004 },
f92ab29f 7177 { 6.4172532944033476, 1.0000000000000000, 20.000000000000000,
7c62b943 7178 8.0000000000000000, 0.39999999999999991 },
f92ab29f 7179 { 19.071683734222436, 1.0000000000000000, 20.000000000000000,
7c62b943 7180 8.0000000000000000, 0.50000000000000000 },
f92ab29f 7181 { 104.41989641582512, 1.0000000000000000, 20.000000000000000,
7c62b943 7182 8.0000000000000000, 0.60000000000000009 },
f92ab29f 7183 { 1510.5743992324240, 1.0000000000000000, 20.000000000000000,
7c62b943 7184 8.0000000000000000, 0.69999999999999996 },
f92ab29f 7185 { 115518.14360562043, 1.0000000000000000, 20.000000000000000,
7c62b943 7186 8.0000000000000000, 0.80000000000000004 },
f92ab29f 7187 { 414930455.29173034, 1.0000000000000000, 20.000000000000000,
7c62b943
BK
7188 8.0000000000000000, 0.89999999999999991 },
7189};
7190
7191// Test function for a=1.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
7192template <typename Tp>
7193void test104()
7194{
7195 const Tp eps = std::numeric_limits<Tp>::epsilon();
7196 Tp max_abs_diff = -Tp(1);
7197 Tp max_abs_frac = -Tp(1);
7198 unsigned int num_datum = sizeof(data104)
7199 / sizeof(testcase_hyperg<double>);
7200 for (unsigned int i = 0; i < num_datum; ++i)
7201 {
7202 const Tp f = std::tr1::hyperg(Tp(data104[i].a), Tp(data104[i].b),
7203 Tp(data104[i].c), Tp(data104[i].x));
7204 const Tp f0 = data104[i].f0;
7205 const Tp diff = f - f0;
7206 if (std::abs(diff) > max_abs_diff)
7207 max_abs_diff = std::abs(diff);
7208 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7209 {
7210 const Tp frac = diff / f0;
7211 if (std::abs(frac) > max_abs_frac)
7212 max_abs_frac = std::abs(frac);
7213 }
7214 }
7215 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7216}
7217
7218// Test data for a=1.0000000000000000, b=20.000000000000000, c=10.000000000000000.
7219testcase_hyperg<double> data105[] = {
f92ab29f 7220 { 0.34954259539177696, 1.0000000000000000, 20.000000000000000,
7c62b943 7221 10.000000000000000, -0.90000000000000002 },
f92ab29f 7222 { 0.37714038609235123, 1.0000000000000000, 20.000000000000000,
7c62b943 7223 10.000000000000000, -0.80000000000000004 },
f92ab29f 7224 { 0.40942091659748725, 1.0000000000000000, 20.000000000000000,
7c62b943 7225 10.000000000000000, -0.69999999999999996 },
f92ab29f 7226 { 0.44767109606846428, 1.0000000000000000, 20.000000000000000,
7c62b943 7227 10.000000000000000, -0.59999999999999998 },
f92ab29f 7228 { 0.49368984777532254, 1.0000000000000000, 20.000000000000000,
7c62b943 7229 10.000000000000000, -0.50000000000000000 },
f92ab29f 7230 { 0.55006638216982318, 1.0000000000000000, 20.000000000000000,
7c62b943 7231 10.000000000000000, -0.40000000000000002 },
f92ab29f 7232 { 0.62065830207408912, 1.0000000000000000, 20.000000000000000,
7c62b943 7233 10.000000000000000, -0.30000000000000004 },
f92ab29f 7234 { 0.71145554513583786, 1.0000000000000000, 20.000000000000000,
7c62b943 7235 10.000000000000000, -0.19999999999999996 },
f92ab29f 7236 { 0.83223839666914623, 1.0000000000000000, 20.000000000000000,
7c62b943 7237 10.000000000000000, -0.099999999999999978 },
f92ab29f 7238 { 1.0000000000000000, 1.0000000000000000, 20.000000000000000,
7c62b943 7239 10.000000000000000, 0.0000000000000000 },
f92ab29f 7240 { 1.2466748028187731, 1.0000000000000000, 20.000000000000000,
7c62b943 7241 10.000000000000000, 0.10000000000000009 },
f92ab29f 7242 { 1.6386752725021749, 1.0000000000000000, 20.000000000000000,
7c62b943 7243 10.000000000000000, 0.19999999999999996 },
f92ab29f 7244 { 2.3340068725479681, 1.0000000000000000, 20.000000000000000,
7c62b943 7245 10.000000000000000, 0.30000000000000004 },
f92ab29f 7246 { 3.7848108613132054, 1.0000000000000000, 20.000000000000000,
7c62b943 7247 10.000000000000000, 0.39999999999999991 },
f92ab29f 7248 { 7.6754638550304133, 1.0000000000000000, 20.000000000000000,
7c62b943 7249 10.000000000000000, 0.50000000000000000 },
f92ab29f 7250 { 23.344217312927277, 1.0000000000000000, 20.000000000000000,
7c62b943 7251 10.000000000000000, 0.60000000000000009 },
f92ab29f 7252 { 149.83491198246921, 1.0000000000000000, 20.000000000000000,
7c62b943 7253 10.000000000000000, 0.69999999999999996 },
f92ab29f 7254 { 3936.9253501916060, 1.0000000000000000, 20.000000000000000,
7c62b943 7255 10.000000000000000, 0.80000000000000004 },
f92ab29f 7256 { 2794143.5036480185, 1.0000000000000000, 20.000000000000000,
7c62b943
BK
7257 10.000000000000000, 0.89999999999999991 },
7258};
7259
7260// Test function for a=1.0000000000000000, b=20.000000000000000, c=10.000000000000000.
7261template <typename Tp>
7262void test105()
7263{
7264 const Tp eps = std::numeric_limits<Tp>::epsilon();
7265 Tp max_abs_diff = -Tp(1);
7266 Tp max_abs_frac = -Tp(1);
7267 unsigned int num_datum = sizeof(data105)
7268 / sizeof(testcase_hyperg<double>);
7269 for (unsigned int i = 0; i < num_datum; ++i)
7270 {
7271 const Tp f = std::tr1::hyperg(Tp(data105[i].a), Tp(data105[i].b),
7272 Tp(data105[i].c), Tp(data105[i].x));
7273 const Tp f0 = data105[i].f0;
7274 const Tp diff = f - f0;
7275 if (std::abs(diff) > max_abs_diff)
7276 max_abs_diff = std::abs(diff);
7277 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7278 {
7279 const Tp frac = diff / f0;
7280 if (std::abs(frac) > max_abs_frac)
7281 max_abs_frac = std::abs(frac);
7282 }
7283 }
7284 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7285}
7286
7287// Test data for a=2.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
7288testcase_hyperg<double> data106[] = {
f92ab29f 7289 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7290 2.0000000000000000, -0.90000000000000002 },
f92ab29f 7291 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7292 2.0000000000000000, -0.80000000000000004 },
f92ab29f 7293 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7294 2.0000000000000000, -0.69999999999999996 },
f92ab29f 7295 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7296 2.0000000000000000, -0.59999999999999998 },
f92ab29f 7297 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7298 2.0000000000000000, -0.50000000000000000 },
f92ab29f 7299 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7300 2.0000000000000000, -0.40000000000000002 },
f92ab29f 7301 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7302 2.0000000000000000, -0.30000000000000004 },
f92ab29f 7303 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7304 2.0000000000000000, -0.19999999999999996 },
f92ab29f 7305 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7306 2.0000000000000000, -0.099999999999999978 },
f92ab29f 7307 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7308 2.0000000000000000, 0.0000000000000000 },
f92ab29f 7309 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7310 2.0000000000000000, 0.10000000000000009 },
f92ab29f 7311 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7312 2.0000000000000000, 0.19999999999999996 },
f92ab29f 7313 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7314 2.0000000000000000, 0.30000000000000004 },
f92ab29f 7315 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7316 2.0000000000000000, 0.39999999999999991 },
f92ab29f 7317 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7318 2.0000000000000000, 0.50000000000000000 },
f92ab29f 7319 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7320 2.0000000000000000, 0.60000000000000009 },
f92ab29f 7321 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7322 2.0000000000000000, 0.69999999999999996 },
f92ab29f 7323 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7324 2.0000000000000000, 0.80000000000000004 },
f92ab29f 7325 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943
BK
7326 2.0000000000000000, 0.89999999999999991 },
7327};
7328
7329// Test function for a=2.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
7330template <typename Tp>
7331void test106()
7332{
7333 const Tp eps = std::numeric_limits<Tp>::epsilon();
7334 Tp max_abs_diff = -Tp(1);
7335 Tp max_abs_frac = -Tp(1);
7336 unsigned int num_datum = sizeof(data106)
7337 / sizeof(testcase_hyperg<double>);
7338 for (unsigned int i = 0; i < num_datum; ++i)
7339 {
7340 const Tp f = std::tr1::hyperg(Tp(data106[i].a), Tp(data106[i].b),
7341 Tp(data106[i].c), Tp(data106[i].x));
7342 const Tp f0 = data106[i].f0;
7343 const Tp diff = f - f0;
7344 if (std::abs(diff) > max_abs_diff)
7345 max_abs_diff = std::abs(diff);
7346 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7347 {
7348 const Tp frac = diff / f0;
7349 if (std::abs(frac) > max_abs_frac)
7350 max_abs_frac = std::abs(frac);
7351 }
7352 }
7353 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7354}
7355
7356// Test data for a=2.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
7357testcase_hyperg<double> data107[] = {
f92ab29f 7358 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7359 4.0000000000000000, -0.90000000000000002 },
f92ab29f 7360 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7361 4.0000000000000000, -0.80000000000000004 },
f92ab29f 7362 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7363 4.0000000000000000, -0.69999999999999996 },
f92ab29f 7364 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7365 4.0000000000000000, -0.59999999999999998 },
f92ab29f 7366 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7367 4.0000000000000000, -0.50000000000000000 },
f92ab29f 7368 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7369 4.0000000000000000, -0.40000000000000002 },
f92ab29f 7370 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7371 4.0000000000000000, -0.30000000000000004 },
f92ab29f 7372 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7373 4.0000000000000000, -0.19999999999999996 },
f92ab29f 7374 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7375 4.0000000000000000, -0.099999999999999978 },
f92ab29f 7376 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7377 4.0000000000000000, 0.0000000000000000 },
f92ab29f 7378 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7379 4.0000000000000000, 0.10000000000000009 },
f92ab29f 7380 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7381 4.0000000000000000, 0.19999999999999996 },
f92ab29f 7382 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7383 4.0000000000000000, 0.30000000000000004 },
f92ab29f 7384 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7385 4.0000000000000000, 0.39999999999999991 },
f92ab29f 7386 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7387 4.0000000000000000, 0.50000000000000000 },
f92ab29f 7388 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7389 4.0000000000000000, 0.60000000000000009 },
f92ab29f 7390 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7391 4.0000000000000000, 0.69999999999999996 },
f92ab29f 7392 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7393 4.0000000000000000, 0.80000000000000004 },
f92ab29f 7394 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943
BK
7395 4.0000000000000000, 0.89999999999999991 },
7396};
7397
7398// Test function for a=2.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
7399template <typename Tp>
7400void test107()
7401{
7402 const Tp eps = std::numeric_limits<Tp>::epsilon();
7403 Tp max_abs_diff = -Tp(1);
7404 Tp max_abs_frac = -Tp(1);
7405 unsigned int num_datum = sizeof(data107)
7406 / sizeof(testcase_hyperg<double>);
7407 for (unsigned int i = 0; i < num_datum; ++i)
7408 {
7409 const Tp f = std::tr1::hyperg(Tp(data107[i].a), Tp(data107[i].b),
7410 Tp(data107[i].c), Tp(data107[i].x));
7411 const Tp f0 = data107[i].f0;
7412 const Tp diff = f - f0;
7413 if (std::abs(diff) > max_abs_diff)
7414 max_abs_diff = std::abs(diff);
7415 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7416 {
7417 const Tp frac = diff / f0;
7418 if (std::abs(frac) > max_abs_frac)
7419 max_abs_frac = std::abs(frac);
7420 }
7421 }
7422 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7423}
7424
7425// Test data for a=2.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
7426testcase_hyperg<double> data108[] = {
f92ab29f 7427 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7428 6.0000000000000000, -0.90000000000000002 },
f92ab29f 7429 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7430 6.0000000000000000, -0.80000000000000004 },
f92ab29f 7431 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7432 6.0000000000000000, -0.69999999999999996 },
f92ab29f 7433 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7434 6.0000000000000000, -0.59999999999999998 },
f92ab29f 7435 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7436 6.0000000000000000, -0.50000000000000000 },
f92ab29f 7437 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7438 6.0000000000000000, -0.40000000000000002 },
f92ab29f 7439 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7440 6.0000000000000000, -0.30000000000000004 },
f92ab29f 7441 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7442 6.0000000000000000, -0.19999999999999996 },
f92ab29f 7443 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7444 6.0000000000000000, -0.099999999999999978 },
f92ab29f 7445 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7446 6.0000000000000000, 0.0000000000000000 },
f92ab29f 7447 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7448 6.0000000000000000, 0.10000000000000009 },
f92ab29f 7449 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7450 6.0000000000000000, 0.19999999999999996 },
f92ab29f 7451 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7452 6.0000000000000000, 0.30000000000000004 },
f92ab29f 7453 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7454 6.0000000000000000, 0.39999999999999991 },
f92ab29f 7455 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7456 6.0000000000000000, 0.50000000000000000 },
f92ab29f 7457 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7458 6.0000000000000000, 0.60000000000000009 },
f92ab29f 7459 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7460 6.0000000000000000, 0.69999999999999996 },
f92ab29f 7461 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7462 6.0000000000000000, 0.80000000000000004 },
f92ab29f 7463 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943
BK
7464 6.0000000000000000, 0.89999999999999991 },
7465};
7466
7467// Test function for a=2.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
7468template <typename Tp>
7469void test108()
7470{
7471 const Tp eps = std::numeric_limits<Tp>::epsilon();
7472 Tp max_abs_diff = -Tp(1);
7473 Tp max_abs_frac = -Tp(1);
7474 unsigned int num_datum = sizeof(data108)
7475 / sizeof(testcase_hyperg<double>);
7476 for (unsigned int i = 0; i < num_datum; ++i)
7477 {
7478 const Tp f = std::tr1::hyperg(Tp(data108[i].a), Tp(data108[i].b),
7479 Tp(data108[i].c), Tp(data108[i].x));
7480 const Tp f0 = data108[i].f0;
7481 const Tp diff = f - f0;
7482 if (std::abs(diff) > max_abs_diff)
7483 max_abs_diff = std::abs(diff);
7484 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7485 {
7486 const Tp frac = diff / f0;
7487 if (std::abs(frac) > max_abs_frac)
7488 max_abs_frac = std::abs(frac);
7489 }
7490 }
7491 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7492}
7493
7494// Test data for a=2.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
7495testcase_hyperg<double> data109[] = {
f92ab29f 7496 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7497 8.0000000000000000, -0.90000000000000002 },
f92ab29f 7498 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7499 8.0000000000000000, -0.80000000000000004 },
f92ab29f 7500 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7501 8.0000000000000000, -0.69999999999999996 },
f92ab29f 7502 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7503 8.0000000000000000, -0.59999999999999998 },
f92ab29f 7504 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7505 8.0000000000000000, -0.50000000000000000 },
f92ab29f 7506 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7507 8.0000000000000000, -0.40000000000000002 },
f92ab29f 7508 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7509 8.0000000000000000, -0.30000000000000004 },
f92ab29f 7510 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7511 8.0000000000000000, -0.19999999999999996 },
f92ab29f 7512 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7513 8.0000000000000000, -0.099999999999999978 },
f92ab29f 7514 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7515 8.0000000000000000, 0.0000000000000000 },
f92ab29f 7516 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7517 8.0000000000000000, 0.10000000000000009 },
f92ab29f 7518 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7519 8.0000000000000000, 0.19999999999999996 },
f92ab29f 7520 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7521 8.0000000000000000, 0.30000000000000004 },
f92ab29f 7522 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7523 8.0000000000000000, 0.39999999999999991 },
f92ab29f 7524 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7525 8.0000000000000000, 0.50000000000000000 },
f92ab29f 7526 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7527 8.0000000000000000, 0.60000000000000009 },
f92ab29f 7528 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7529 8.0000000000000000, 0.69999999999999996 },
f92ab29f 7530 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7531 8.0000000000000000, 0.80000000000000004 },
f92ab29f 7532 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943
BK
7533 8.0000000000000000, 0.89999999999999991 },
7534};
7535
7536// Test function for a=2.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
7537template <typename Tp>
7538void test109()
7539{
7540 const Tp eps = std::numeric_limits<Tp>::epsilon();
7541 Tp max_abs_diff = -Tp(1);
7542 Tp max_abs_frac = -Tp(1);
7543 unsigned int num_datum = sizeof(data109)
7544 / sizeof(testcase_hyperg<double>);
7545 for (unsigned int i = 0; i < num_datum; ++i)
7546 {
7547 const Tp f = std::tr1::hyperg(Tp(data109[i].a), Tp(data109[i].b),
7548 Tp(data109[i].c), Tp(data109[i].x));
7549 const Tp f0 = data109[i].f0;
7550 const Tp diff = f - f0;
7551 if (std::abs(diff) > max_abs_diff)
7552 max_abs_diff = std::abs(diff);
7553 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7554 {
7555 const Tp frac = diff / f0;
7556 if (std::abs(frac) > max_abs_frac)
7557 max_abs_frac = std::abs(frac);
7558 }
7559 }
7560 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7561}
7562
7563// Test data for a=2.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
7564testcase_hyperg<double> data110[] = {
f92ab29f 7565 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7566 10.000000000000000, -0.90000000000000002 },
f92ab29f 7567 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7568 10.000000000000000, -0.80000000000000004 },
f92ab29f 7569 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7570 10.000000000000000, -0.69999999999999996 },
f92ab29f 7571 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7572 10.000000000000000, -0.59999999999999998 },
f92ab29f 7573 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7574 10.000000000000000, -0.50000000000000000 },
f92ab29f 7575 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7576 10.000000000000000, -0.40000000000000002 },
f92ab29f 7577 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7578 10.000000000000000, -0.30000000000000004 },
f92ab29f 7579 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7580 10.000000000000000, -0.19999999999999996 },
f92ab29f 7581 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7582 10.000000000000000, -0.099999999999999978 },
f92ab29f 7583 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7584 10.000000000000000, 0.0000000000000000 },
f92ab29f 7585 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7586 10.000000000000000, 0.10000000000000009 },
f92ab29f 7587 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7588 10.000000000000000, 0.19999999999999996 },
f92ab29f 7589 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7590 10.000000000000000, 0.30000000000000004 },
f92ab29f 7591 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7592 10.000000000000000, 0.39999999999999991 },
f92ab29f 7593 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7594 10.000000000000000, 0.50000000000000000 },
f92ab29f 7595 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7596 10.000000000000000, 0.60000000000000009 },
f92ab29f 7597 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7598 10.000000000000000, 0.69999999999999996 },
f92ab29f 7599 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943 7600 10.000000000000000, 0.80000000000000004 },
f92ab29f 7601 { 1.0000000000000000, 2.0000000000000000, 0.0000000000000000,
7c62b943
BK
7602 10.000000000000000, 0.89999999999999991 },
7603};
7604
7605// Test function for a=2.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
7606template <typename Tp>
7607void test110()
7608{
7609 const Tp eps = std::numeric_limits<Tp>::epsilon();
7610 Tp max_abs_diff = -Tp(1);
7611 Tp max_abs_frac = -Tp(1);
7612 unsigned int num_datum = sizeof(data110)
7613 / sizeof(testcase_hyperg<double>);
7614 for (unsigned int i = 0; i < num_datum; ++i)
7615 {
7616 const Tp f = std::tr1::hyperg(Tp(data110[i].a), Tp(data110[i].b),
7617 Tp(data110[i].c), Tp(data110[i].x));
7618 const Tp f0 = data110[i].f0;
7619 const Tp diff = f - f0;
7620 if (std::abs(diff) > max_abs_diff)
7621 max_abs_diff = std::abs(diff);
7622 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7623 {
7624 const Tp frac = diff / f0;
7625 if (std::abs(frac) > max_abs_frac)
7626 max_abs_frac = std::abs(frac);
7627 }
7628 }
7629 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7630}
7631
7632// Test data for a=2.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
7633testcase_hyperg<double> data111[] = {
f92ab29f 7634 { 0.72547625011001171, 2.0000000000000000, 0.50000000000000000,
7c62b943 7635 2.0000000000000000, -0.90000000000000002 },
f92ab29f 7636 { 0.74535599249992990, 2.0000000000000000, 0.50000000000000000,
7c62b943 7637 2.0000000000000000, -0.80000000000000004 },
f92ab29f 7638 { 0.76696498884737041, 2.0000000000000000, 0.50000000000000000,
7c62b943 7639 2.0000000000000000, -0.69999999999999996 },
f92ab29f 7640 { 0.79056941504209477, 2.0000000000000000, 0.50000000000000000,
7c62b943 7641 2.0000000000000000, -0.59999999999999998 },
f92ab29f 7642 { 0.81649658092772603, 2.0000000000000000, 0.50000000000000000,
7c62b943 7643 2.0000000000000000, -0.50000000000000000 },
f92ab29f 7644 { 0.84515425472851657, 2.0000000000000000, 0.50000000000000000,
7c62b943 7645 2.0000000000000000, -0.40000000000000002 },
f92ab29f 7646 { 0.87705801930702920, 2.0000000000000000, 0.50000000000000000,
7c62b943 7647 2.0000000000000000, -0.30000000000000004 },
f92ab29f 7648 { 0.91287092917527690, 2.0000000000000000, 0.50000000000000000,
7c62b943 7649 2.0000000000000000, -0.19999999999999996 },
f92ab29f 7650 { 0.95346258924559224, 2.0000000000000000, 0.50000000000000000,
7c62b943 7651 2.0000000000000000, -0.099999999999999978 },
f92ab29f 7652 { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
7c62b943 7653 2.0000000000000000, 0.0000000000000000 },
f92ab29f 7654 { 1.0540925533894598, 2.0000000000000000, 0.50000000000000000,
7c62b943 7655 2.0000000000000000, 0.10000000000000009 },
f92ab29f 7656 { 1.1180339887498949, 2.0000000000000000, 0.50000000000000000,
7c62b943 7657 2.0000000000000000, 0.19999999999999996 },
f92ab29f 7658 { 1.1952286093343938, 2.0000000000000000, 0.50000000000000000,
7c62b943 7659 2.0000000000000000, 0.30000000000000004 },
f92ab29f 7660 { 1.2909944487358056, 2.0000000000000000, 0.50000000000000000,
7c62b943 7661 2.0000000000000000, 0.39999999999999991 },
f92ab29f 7662 { 1.4142135623730949, 2.0000000000000000, 0.50000000000000000,
7c62b943 7663 2.0000000000000000, 0.50000000000000000 },
f92ab29f 7664 { 1.5811388300841900, 2.0000000000000000, 0.50000000000000000,
7c62b943 7665 2.0000000000000000, 0.60000000000000009 },
f92ab29f 7666 { 1.8257418583505536, 2.0000000000000000, 0.50000000000000000,
7c62b943 7667 2.0000000000000000, 0.69999999999999996 },
f92ab29f 7668 { 2.2360679774997898, 2.0000000000000000, 0.50000000000000000,
7c62b943 7669 2.0000000000000000, 0.80000000000000004 },
f92ab29f 7670 { 3.1622776601683782, 2.0000000000000000, 0.50000000000000000,
7c62b943
BK
7671 2.0000000000000000, 0.89999999999999991 },
7672};
7673
7674// Test function for a=2.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
7675template <typename Tp>
7676void test111()
7677{
7678 const Tp eps = std::numeric_limits<Tp>::epsilon();
7679 Tp max_abs_diff = -Tp(1);
7680 Tp max_abs_frac = -Tp(1);
7681 unsigned int num_datum = sizeof(data111)
7682 / sizeof(testcase_hyperg<double>);
7683 for (unsigned int i = 0; i < num_datum; ++i)
7684 {
7685 const Tp f = std::tr1::hyperg(Tp(data111[i].a), Tp(data111[i].b),
7686 Tp(data111[i].c), Tp(data111[i].x));
7687 const Tp f0 = data111[i].f0;
7688 const Tp diff = f - f0;
7689 if (std::abs(diff) > max_abs_diff)
7690 max_abs_diff = std::abs(diff);
7691 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7692 {
7693 const Tp frac = diff / f0;
7694 if (std::abs(frac) > max_abs_frac)
7695 max_abs_frac = std::abs(frac);
7696 }
7697 }
7698 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7699}
7700
7701// Test data for a=2.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
7702testcase_hyperg<double> data112[] = {
f92ab29f 7703 { 0.83664260086443798, 2.0000000000000000, 0.50000000000000000,
7c62b943 7704 4.0000000000000000, -0.90000000000000002 },
f92ab29f 7705 { 0.85046584300227146, 2.0000000000000000, 0.50000000000000000,
7c62b943 7706 4.0000000000000000, -0.80000000000000004 },
f92ab29f 7707 { 0.86509574979651593, 2.0000000000000000, 0.50000000000000000,
7c62b943 7708 4.0000000000000000, -0.69999999999999996 },
f92ab29f 7709 { 0.88062082573041867, 2.0000000000000000, 0.50000000000000000,
7c62b943 7710 4.0000000000000000, -0.59999999999999998 },
f92ab29f 7711 { 0.89714464248521586, 2.0000000000000000, 0.50000000000000000,
7c62b943 7712 4.0000000000000000, -0.50000000000000000 },
f92ab29f 7713 { 0.91478946588967558, 2.0000000000000000, 0.50000000000000000,
7c62b943 7714 4.0000000000000000, -0.40000000000000002 },
f92ab29f 7715 { 0.93370105322348573, 2.0000000000000000, 0.50000000000000000,
7c62b943 7716 4.0000000000000000, -0.30000000000000004 },
f92ab29f 7717 { 0.95405511057700887, 2.0000000000000000, 0.50000000000000000,
7c62b943 7718 4.0000000000000000, -0.19999999999999996 },
f92ab29f 7719 { 0.97606616007978142, 2.0000000000000000, 0.50000000000000000,
7c62b943 7720 4.0000000000000000, -0.099999999999999978 },
f92ab29f 7721 { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
7c62b943 7722 4.0000000000000000, 0.0000000000000000 },
f92ab29f 7723 { 1.0261916902334731, 2.0000000000000000, 0.50000000000000000,
7c62b943 7724 4.0000000000000000, 0.10000000000000009 },
f92ab29f 7725 { 1.0550723519434702, 2.0000000000000000, 0.50000000000000000,
7c62b943 7726 4.0000000000000000, 0.19999999999999996 },
f92ab29f 7727 { 1.0872106588188091, 2.0000000000000000, 0.50000000000000000,
7c62b943 7728 4.0000000000000000, 0.30000000000000004 },
f92ab29f 7729 { 1.1233801699379020, 2.0000000000000000, 0.50000000000000000,
7c62b943 7730 4.0000000000000000, 0.39999999999999991 },
f92ab29f 7731 { 1.1646752981725688, 2.0000000000000000, 0.50000000000000000,
7c62b943 7732 4.0000000000000000, 0.50000000000000000 },
f92ab29f 7733 { 1.2127272514219511, 2.0000000000000000, 0.50000000000000000,
7c62b943 7734 4.0000000000000000, 0.60000000000000009 },
f92ab29f 7735 { 1.2701518651068637, 2.0000000000000000, 0.50000000000000000,
7c62b943 7736 4.0000000000000000, 0.69999999999999996 },
f92ab29f 7737 { 1.3416407864998725, 2.0000000000000000, 0.50000000000000000,
7c62b943 7738 4.0000000000000000, 0.80000000000000004 },
f92ab29f 7739 { 1.4374795179111102, 2.0000000000000000, 0.50000000000000000,
7c62b943
BK
7740 4.0000000000000000, 0.89999999999999991 },
7741};
7742
7743// Test function for a=2.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
7744template <typename Tp>
7745void test112()
7746{
7747 const Tp eps = std::numeric_limits<Tp>::epsilon();
7748 Tp max_abs_diff = -Tp(1);
7749 Tp max_abs_frac = -Tp(1);
7750 unsigned int num_datum = sizeof(data112)
7751 / sizeof(testcase_hyperg<double>);
7752 for (unsigned int i = 0; i < num_datum; ++i)
7753 {
7754 const Tp f = std::tr1::hyperg(Tp(data112[i].a), Tp(data112[i].b),
7755 Tp(data112[i].c), Tp(data112[i].x));
7756 const Tp f0 = data112[i].f0;
7757 const Tp diff = f - f0;
7758 if (std::abs(diff) > max_abs_diff)
7759 max_abs_diff = std::abs(diff);
7760 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7761 {
7762 const Tp frac = diff / f0;
7763 if (std::abs(frac) > max_abs_frac)
7764 max_abs_frac = std::abs(frac);
7765 }
7766 }
7767 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7768}
7769
7770// Test data for a=2.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
7771testcase_hyperg<double> data113[] = {
f92ab29f 7772 { 0.88195381730235833, 2.0000000000000000, 0.50000000000000000,
7c62b943 7773 6.0000000000000000, -0.90000000000000002 },
f92ab29f 7774 { 0.89265078469555093, 2.0000000000000000, 0.50000000000000000,
7c62b943 7775 6.0000000000000000, -0.80000000000000004 },
f92ab29f 7776 { 0.90382937908303707, 2.0000000000000000, 0.50000000000000000,
7c62b943 7777 6.0000000000000000, -0.69999999999999996 },
f92ab29f 7778 { 0.91553161389880577, 2.0000000000000000, 0.50000000000000000,
7c62b943 7779 6.0000000000000000, -0.59999999999999998 },
f92ab29f 7780 { 0.92780530349281576, 2.0000000000000000, 0.50000000000000000,
7c62b943 7781 6.0000000000000000, -0.50000000000000000 },
f92ab29f 7782 { 0.94070521140346042, 2.0000000000000000, 0.50000000000000000,
7c62b943 7783 6.0000000000000000, -0.40000000000000002 },
f92ab29f 7784 { 0.95429450630523349, 2.0000000000000000, 0.50000000000000000,
7c62b943 7785 6.0000000000000000, -0.30000000000000004 },
f92ab29f 7786 { 0.96864663325785849, 2.0000000000000000, 0.50000000000000000,
7c62b943 7787 6.0000000000000000, -0.19999999999999996 },
f92ab29f 7788 { 0.98384775588541795, 2.0000000000000000, 0.50000000000000000,
7c62b943 7789 6.0000000000000000, -0.099999999999999978 },
f92ab29f 7790 { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
7c62b943 7791 6.0000000000000000, 0.0000000000000000 },
f92ab29f 7792 { 1.0172258496884334, 2.0000000000000000, 0.50000000000000000,
7c62b943 7793 6.0000000000000000, 0.10000000000000009 },
f92ab29f 7794 { 1.0356742479163459, 2.0000000000000000, 0.50000000000000000,
7c62b943 7795 6.0000000000000000, 0.19999999999999996 },
f92ab29f 7796 { 1.0555293036908924, 2.0000000000000000, 0.50000000000000000,
7c62b943 7797 6.0000000000000000, 0.30000000000000004 },
f92ab29f 7798 { 1.0770231491562379, 2.0000000000000000, 0.50000000000000000,
7c62b943 7799 6.0000000000000000, 0.39999999999999991 },
f92ab29f 7800 { 1.1004557416484888, 2.0000000000000000, 0.50000000000000000,
7c62b943 7801 6.0000000000000000, 0.50000000000000000 },
f92ab29f 7802 { 1.1262270515731978, 2.0000000000000000, 0.50000000000000000,
7c62b943 7803 6.0000000000000000, 0.60000000000000009 },
f92ab29f 7804 { 1.1548932919125086, 2.0000000000000000, 0.50000000000000000,
7c62b943 7805 6.0000000000000000, 0.69999999999999996 },
f92ab29f 7806 { 1.1872757758134724, 2.0000000000000000, 0.50000000000000000,
7c62b943 7807 6.0000000000000000, 0.80000000000000004 },
f92ab29f 7808 { 1.2247091713458949, 2.0000000000000000, 0.50000000000000000,
7c62b943
BK
7809 6.0000000000000000, 0.89999999999999991 },
7810};
7811
7812// Test function for a=2.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
7813template <typename Tp>
7814void test113()
7815{
7816 const Tp eps = std::numeric_limits<Tp>::epsilon();
7817 Tp max_abs_diff = -Tp(1);
7818 Tp max_abs_frac = -Tp(1);
7819 unsigned int num_datum = sizeof(data113)
7820 / sizeof(testcase_hyperg<double>);
7821 for (unsigned int i = 0; i < num_datum; ++i)
7822 {
7823 const Tp f = std::tr1::hyperg(Tp(data113[i].a), Tp(data113[i].b),
7824 Tp(data113[i].c), Tp(data113[i].x));
7825 const Tp f0 = data113[i].f0;
7826 const Tp diff = f - f0;
7827 if (std::abs(diff) > max_abs_diff)
7828 max_abs_diff = std::abs(diff);
7829 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7830 {
7831 const Tp frac = diff / f0;
7832 if (std::abs(frac) > max_abs_frac)
7833 max_abs_frac = std::abs(frac);
7834 }
7835 }
7836 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7837}
7838
7839// Test data for a=2.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
7840testcase_hyperg<double> data114[] = {
f92ab29f 7841 { 0.90716919697107301, 2.0000000000000000, 0.50000000000000000,
7c62b943 7842 8.0000000000000000, -0.90000000000000002 },
f92ab29f 7843 { 0.91592299407142519, 2.0000000000000000, 0.50000000000000000,
7c62b943 7844 8.0000000000000000, -0.80000000000000004 },
f92ab29f 7845 { 0.92500027075874236, 2.0000000000000000, 0.50000000000000000,
7c62b943 7846 8.0000000000000000, -0.69999999999999996 },
f92ab29f 7847 { 0.93442464185467167, 2.0000000000000000, 0.50000000000000000,
7c62b943 7848 8.0000000000000000, -0.59999999999999998 },
f92ab29f 7849 { 0.94422248683737009, 2.0000000000000000, 0.50000000000000000,
7c62b943 7850 8.0000000000000000, -0.50000000000000000 },
f92ab29f 7851 { 0.95442341810133347, 2.0000000000000000, 0.50000000000000000,
7c62b943 7852 8.0000000000000000, -0.40000000000000002 },
f92ab29f 7853 { 0.96506085725516400, 2.0000000000000000, 0.50000000000000000,
7c62b943 7854 8.0000000000000000, -0.30000000000000004 },
f92ab29f 7855 { 0.97617275213704069, 2.0000000000000000, 0.50000000000000000,
7c62b943 7856 8.0000000000000000, -0.19999999999999996 },
f92ab29f 7857 { 0.98780247986309799, 2.0000000000000000, 0.50000000000000000,
7c62b943 7858 8.0000000000000000, -0.099999999999999978 },
f92ab29f 7859 { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
7c62b943 7860 8.0000000000000000, 0.0000000000000000 },
f92ab29f 7861 { 1.0128233505813447, 2.0000000000000000, 0.50000000000000000,
7c62b943 7862 8.0000000000000000, 0.10000000000000009 },
f92ab29f 7863 { 1.0263406246541855, 2.0000000000000000, 0.50000000000000000,
7c62b943 7864 8.0000000000000000, 0.19999999999999996 },
f92ab29f 7865 { 1.0406326381700366, 2.0000000000000000, 0.50000000000000000,
7c62b943 7866 8.0000000000000000, 0.30000000000000004 },
f92ab29f 7867 { 1.0557966239802845, 2.0000000000000000, 0.50000000000000000,
7c62b943 7868 8.0000000000000000, 0.39999999999999991 },
f92ab29f 7869 { 1.0719515075786321, 2.0000000000000000, 0.50000000000000000,
7c62b943 7870 8.0000000000000000, 0.50000000000000000 },
f92ab29f 7871 { 1.0892457392422055, 2.0000000000000000, 0.50000000000000000,
7c62b943 7872 8.0000000000000000, 0.60000000000000009 },
f92ab29f 7873 { 1.1078695188000958, 2.0000000000000000, 0.50000000000000000,
7c62b943 7874 8.0000000000000000, 0.69999999999999996 },
f92ab29f 7875 { 1.1280752258974340, 2.0000000000000000, 0.50000000000000000,
7c62b943 7876 8.0000000000000000, 0.80000000000000004 },
f92ab29f 7877 { 1.1502152002706476, 2.0000000000000000, 0.50000000000000000,
7c62b943
BK
7878 8.0000000000000000, 0.89999999999999991 },
7879};
7880
7881// Test function for a=2.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
7882template <typename Tp>
7883void test114()
7884{
7885 const Tp eps = std::numeric_limits<Tp>::epsilon();
7886 Tp max_abs_diff = -Tp(1);
7887 Tp max_abs_frac = -Tp(1);
7888 unsigned int num_datum = sizeof(data114)
7889 / sizeof(testcase_hyperg<double>);
7890 for (unsigned int i = 0; i < num_datum; ++i)
7891 {
7892 const Tp f = std::tr1::hyperg(Tp(data114[i].a), Tp(data114[i].b),
7893 Tp(data114[i].c), Tp(data114[i].x));
7894 const Tp f0 = data114[i].f0;
7895 const Tp diff = f - f0;
7896 if (std::abs(diff) > max_abs_diff)
7897 max_abs_diff = std::abs(diff);
7898 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7899 {
7900 const Tp frac = diff / f0;
7901 if (std::abs(frac) > max_abs_frac)
7902 max_abs_frac = std::abs(frac);
7903 }
7904 }
7905 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7906}
7907
7908// Test data for a=2.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
7909testcase_hyperg<double> data115[] = {
f92ab29f 7910 { 0.92336416053263093, 2.0000000000000000, 0.50000000000000000,
7c62b943 7911 10.000000000000000, -0.90000000000000002 },
f92ab29f 7912 { 0.93078397248364519, 2.0000000000000000, 0.50000000000000000,
7c62b943 7913 10.000000000000000, -0.80000000000000004 },
f92ab29f 7914 { 0.93843714333600226, 2.0000000000000000, 0.50000000000000000,
7c62b943 7915 10.000000000000000, -0.69999999999999996 },
f92ab29f 7916 { 0.94633837784068076, 2.0000000000000000, 0.50000000000000000,
7c62b943 7917 10.000000000000000, -0.59999999999999998 },
f92ab29f 7918 { 0.95450388104967909, 2.0000000000000000, 0.50000000000000000,
7c62b943 7919 10.000000000000000, -0.50000000000000000 },
f92ab29f 7920 { 0.96295158125742764, 2.0000000000000000, 0.50000000000000000,
7c62b943 7921 10.000000000000000, -0.40000000000000002 },
f92ab29f 7922 { 0.97170139827854296, 2.0000000000000000, 0.50000000000000000,
7c62b943 7923 10.000000000000000, -0.30000000000000004 },
f92ab29f 7924 { 0.98077556918512687, 2.0000000000000000, 0.50000000000000000,
7c62b943 7925 10.000000000000000, -0.19999999999999996 },
f92ab29f 7926 { 0.99019904777750845, 2.0000000000000000, 0.50000000000000000,
7c62b943 7927 10.000000000000000, -0.099999999999999978 },
f92ab29f 7928 { 1.0000000000000000, 2.0000000000000000, 0.50000000000000000,
7c62b943 7929 10.000000000000000, 0.0000000000000000 },
f92ab29f 7930 { 1.0102104261941198, 2.0000000000000000, 0.50000000000000000,
7c62b943 7931 10.000000000000000, 0.10000000000000009 },
f92ab29f 7932 { 1.0208669540935695, 2.0000000000000000, 0.50000000000000000,
7c62b943 7933 10.000000000000000, 0.19999999999999996 },
f92ab29f 7934 { 1.0320118665407505, 2.0000000000000000, 0.50000000000000000,
7c62b943 7935 10.000000000000000, 0.30000000000000004 },
f92ab29f 7936 { 1.0436944599504387, 2.0000000000000000, 0.50000000000000000,
7c62b943 7937 10.000000000000000, 0.39999999999999991 },
f92ab29f 7938 { 1.0559728828278145, 2.0000000000000000, 0.50000000000000000,
7c62b943 7939 10.000000000000000, 0.50000000000000000 },
f92ab29f 7940 { 1.0689166967761712, 2.0000000000000000, 0.50000000000000000,
7c62b943 7941 10.000000000000000, 0.60000000000000009 },
f92ab29f 7942 { 1.0826105758119842, 2.0000000000000000, 0.50000000000000000,
7c62b943 7943 10.000000000000000, 0.69999999999999996 },
f92ab29f 7944 { 1.0971599106346146, 2.0000000000000000, 0.50000000000000000,
7c62b943 7945 10.000000000000000, 0.80000000000000004 },
f92ab29f 7946 { 1.1126998828023964, 2.0000000000000000, 0.50000000000000000,
7c62b943
BK
7947 10.000000000000000, 0.89999999999999991 },
7948};
7949
7950// Test function for a=2.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
7951template <typename Tp>
7952void test115()
7953{
7954 const Tp eps = std::numeric_limits<Tp>::epsilon();
7955 Tp max_abs_diff = -Tp(1);
7956 Tp max_abs_frac = -Tp(1);
7957 unsigned int num_datum = sizeof(data115)
7958 / sizeof(testcase_hyperg<double>);
7959 for (unsigned int i = 0; i < num_datum; ++i)
7960 {
7961 const Tp f = std::tr1::hyperg(Tp(data115[i].a), Tp(data115[i].b),
7962 Tp(data115[i].c), Tp(data115[i].x));
7963 const Tp f0 = data115[i].f0;
7964 const Tp diff = f - f0;
7965 if (std::abs(diff) > max_abs_diff)
7966 max_abs_diff = std::abs(diff);
7967 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
7968 {
7969 const Tp frac = diff / f0;
7970 if (std::abs(frac) > max_abs_frac)
7971 max_abs_frac = std::abs(frac);
7972 }
7973 }
7974 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
7975}
7976
7977// Test data for a=2.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
7978testcase_hyperg<double> data116[] = {
f92ab29f 7979 { 0.52631578947368429, 2.0000000000000000, 1.0000000000000000,
7c62b943 7980 2.0000000000000000, -0.90000000000000002 },
f92ab29f 7981 { 0.55555555555555558, 2.0000000000000000, 1.0000000000000000,
7c62b943 7982 2.0000000000000000, -0.80000000000000004 },
f92ab29f 7983 { 0.58823529411764708, 2.0000000000000000, 1.0000000000000000,
7c62b943 7984 2.0000000000000000, -0.69999999999999996 },
f92ab29f 7985 { 0.62500000000000000, 2.0000000000000000, 1.0000000000000000,
7c62b943 7986 2.0000000000000000, -0.59999999999999998 },
f92ab29f 7987 { 0.66666666666666663, 2.0000000000000000, 1.0000000000000000,
7c62b943 7988 2.0000000000000000, -0.50000000000000000 },
f92ab29f 7989 { 0.71428571428571430, 2.0000000000000000, 1.0000000000000000,
7c62b943 7990 2.0000000000000000, -0.40000000000000002 },
f92ab29f 7991 { 0.76923076923076927, 2.0000000000000000, 1.0000000000000000,
7c62b943 7992 2.0000000000000000, -0.30000000000000004 },
f92ab29f 7993 { 0.83333333333333337, 2.0000000000000000, 1.0000000000000000,
7c62b943 7994 2.0000000000000000, -0.19999999999999996 },
f92ab29f 7995 { 0.90909090909090906, 2.0000000000000000, 1.0000000000000000,
7c62b943 7996 2.0000000000000000, -0.099999999999999978 },
f92ab29f 7997 { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
7c62b943 7998 2.0000000000000000, 0.0000000000000000 },
f92ab29f 7999 { 1.1111111111111112, 2.0000000000000000, 1.0000000000000000,
7c62b943 8000 2.0000000000000000, 0.10000000000000009 },
f92ab29f 8001 { 1.2500000000000000, 2.0000000000000000, 1.0000000000000000,
7c62b943 8002 2.0000000000000000, 0.19999999999999996 },
f92ab29f 8003 { 1.4285714285714286, 2.0000000000000000, 1.0000000000000000,
7c62b943 8004 2.0000000000000000, 0.30000000000000004 },
f92ab29f 8005 { 1.6666666666666663, 2.0000000000000000, 1.0000000000000000,
7c62b943 8006 2.0000000000000000, 0.39999999999999991 },
f92ab29f 8007 { 2.0000000000000000, 2.0000000000000000, 1.0000000000000000,
7c62b943 8008 2.0000000000000000, 0.50000000000000000 },
f92ab29f 8009 { 2.5000000000000004, 2.0000000000000000, 1.0000000000000000,
7c62b943 8010 2.0000000000000000, 0.60000000000000009 },
f92ab29f 8011 { 3.3333333333333330, 2.0000000000000000, 1.0000000000000000,
7c62b943 8012 2.0000000000000000, 0.69999999999999996 },
f92ab29f 8013 { 5.0000000000000009, 2.0000000000000000, 1.0000000000000000,
7c62b943 8014 2.0000000000000000, 0.80000000000000004 },
f92ab29f 8015 { 9.9999999999999929, 2.0000000000000000, 1.0000000000000000,
7c62b943
BK
8016 2.0000000000000000, 0.89999999999999991 },
8017};
8018
8019// Test function for a=2.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
8020template <typename Tp>
8021void test116()
8022{
8023 const Tp eps = std::numeric_limits<Tp>::epsilon();
8024 Tp max_abs_diff = -Tp(1);
8025 Tp max_abs_frac = -Tp(1);
8026 unsigned int num_datum = sizeof(data116)
8027 / sizeof(testcase_hyperg<double>);
8028 for (unsigned int i = 0; i < num_datum; ++i)
8029 {
8030 const Tp f = std::tr1::hyperg(Tp(data116[i].a), Tp(data116[i].b),
8031 Tp(data116[i].c), Tp(data116[i].x));
8032 const Tp f0 = data116[i].f0;
8033 const Tp diff = f - f0;
8034 if (std::abs(diff) > max_abs_diff)
8035 max_abs_diff = std::abs(diff);
8036 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8037 {
8038 const Tp frac = diff / f0;
8039 if (std::abs(frac) > max_abs_frac)
8040 max_abs_frac = std::abs(frac);
8041 }
8042 }
8043 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8044}
8045
8046// Test data for a=2.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
8047testcase_hyperg<double> data117[] = {
f92ab29f 8048 { 0.70351947549341520, 2.0000000000000000, 1.0000000000000000,
7c62b943 8049 4.0000000000000000, -0.90000000000000002 },
f92ab29f 8050 { 0.72637503722092711, 2.0000000000000000, 1.0000000000000000,
7c62b943 8051 4.0000000000000000, -0.80000000000000004 },
f92ab29f 8052 { 0.75099661564391251, 2.0000000000000000, 1.0000000000000000,
7c62b943 8053 4.0000000000000000, -0.69999999999999996 },
f92ab29f 8054 { 0.77761647796730871, 2.0000000000000000, 1.0000000000000000,
7c62b943 8055 4.0000000000000000, -0.59999999999999998 },
f92ab29f 8056 { 0.80651221621216451, 2.0000000000000000, 1.0000000000000000,
7c62b943 8057 4.0000000000000000, -0.50000000000000000 },
f92ab29f 8058 { 0.83801894346580275, 2.0000000000000000, 1.0000000000000000,
7c62b943 8059 4.0000000000000000, -0.40000000000000002 },
f92ab29f 8060 { 0.87254582050258467, 2.0000000000000000, 1.0000000000000000,
7c62b943 8061 4.0000000000000000, -0.30000000000000004 },
f92ab29f 8062 { 0.91059888544083678, 2.0000000000000000, 1.0000000000000000,
7c62b943 8063 4.0000000000000000, -0.19999999999999996 },
f92ab29f 8064 { 0.95281329145592386, 2.0000000000000000, 1.0000000000000000,
7c62b943 8065 4.0000000000000000, -0.099999999999999978 },
f92ab29f 8066 { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
7c62b943 8067 4.0000000000000000, 0.0000000000000000 },
f92ab29f 8068 { 1.0532154477379738, 2.0000000000000000, 1.0000000000000000,
7c62b943 8069 4.0000000000000000, 0.10000000000000009 },
f92ab29f 8070 { 1.1138692114741471, 2.0000000000000000, 1.0000000000000000,
7c62b943 8071 4.0000000000000000, 0.19999999999999996 },
f92ab29f 8072 { 1.1838976095305187, 2.0000000000000000, 1.0000000000000000,
7c62b943 8073 4.0000000000000000, 0.30000000000000004 },
f92ab29f 8074 { 1.2660586631630237, 2.0000000000000000, 1.0000000000000000,
7c62b943 8075 4.0000000000000000, 0.39999999999999991 },
f92ab29f 8076 { 1.3644676665613118, 2.0000000000000000, 1.0000000000000000,
7c62b943 8077 4.0000000000000000, 0.50000000000000000 },
f92ab29f 8078 { 1.4856585347316102, 2.0000000000000000, 1.0000000000000000,
7c62b943 8079 4.0000000000000000, 0.60000000000000009 },
f92ab29f 8080 { 1.6409590443536872, 2.0000000000000000, 1.0000000000000000,
7c62b943 8081 4.0000000000000000, 0.69999999999999996 },
f92ab29f 8082 { 1.8528798927325769, 2.0000000000000000, 1.0000000000000000,
7c62b943 8083 4.0000000000000000, 0.80000000000000004 },
f92ab29f 8084 { 2.1789423102929644, 2.0000000000000000, 1.0000000000000000,
7c62b943
BK
8085 4.0000000000000000, 0.89999999999999991 },
8086};
8087
8088// Test function for a=2.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
8089template <typename Tp>
8090void test117()
8091{
8092 const Tp eps = std::numeric_limits<Tp>::epsilon();
8093 Tp max_abs_diff = -Tp(1);
8094 Tp max_abs_frac = -Tp(1);
8095 unsigned int num_datum = sizeof(data117)
8096 / sizeof(testcase_hyperg<double>);
8097 for (unsigned int i = 0; i < num_datum; ++i)
8098 {
8099 const Tp f = std::tr1::hyperg(Tp(data117[i].a), Tp(data117[i].b),
8100 Tp(data117[i].c), Tp(data117[i].x));
8101 const Tp f0 = data117[i].f0;
8102 const Tp diff = f - f0;
8103 if (std::abs(diff) > max_abs_diff)
8104 max_abs_diff = std::abs(diff);
8105 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8106 {
8107 const Tp frac = diff / f0;
8108 if (std::abs(frac) > max_abs_frac)
8109 max_abs_frac = std::abs(frac);
8110 }
8111 }
8112 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8113}
8114
8115// Test data for a=2.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
8116testcase_hyperg<double> data118[] = {
f92ab29f 8117 { 0.78068027379106253, 2.0000000000000000, 1.0000000000000000,
7c62b943 8118 6.0000000000000000, -0.90000000000000002 },
f92ab29f 8119 { 0.79924541976981278, 2.0000000000000000, 1.0000000000000000,
7c62b943 8120 6.0000000000000000, -0.80000000000000004 },
f92ab29f 8121 { 0.81891305585650942, 2.0000000000000000, 1.0000000000000000,
7c62b943 8122 6.0000000000000000, -0.69999999999999996 },
f92ab29f 8123 { 0.83979799626213270, 2.0000000000000000, 1.0000000000000000,
7c62b943 8124 6.0000000000000000, -0.59999999999999998 },
f92ab29f 8125 { 0.86203315303160166, 2.0000000000000000, 1.0000000000000000,
7c62b943 8126 6.0000000000000000, -0.50000000000000000 },
f92ab29f 8127 { 0.88577352485361693, 2.0000000000000000, 1.0000000000000000,
7c62b943 8128 6.0000000000000000, -0.40000000000000002 },
f92ab29f 8129 { 0.91120135738402208, 2.0000000000000000, 1.0000000000000000,
7c62b943 8130 6.0000000000000000, -0.30000000000000004 },
f92ab29f 8131 { 0.93853291956703588, 2.0000000000000000, 1.0000000000000000,
7c62b943 8132 6.0000000000000000, -0.19999999999999996 },
f92ab29f 8133 { 0.96802755388922956, 2.0000000000000000, 1.0000000000000000,
7c62b943 8134 6.0000000000000000, -0.099999999999999978 },
f92ab29f 8135 { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
7c62b943 8136 6.0000000000000000, 0.0000000000000000 },
f92ab29f 8137 { 1.0348375559194773, 2.0000000000000000, 1.0000000000000000,
7c62b943 8138 6.0000000000000000, 0.10000000000000009 },
f92ab29f 8139 { 1.0730246119544820, 2.0000000000000000, 1.0000000000000000,
7c62b943 8140 6.0000000000000000, 0.19999999999999996 },
f92ab29f 8141 { 1.1151788396279341, 2.0000000000000000, 1.0000000000000000,
7c62b943 8142 6.0000000000000000, 0.30000000000000004 },
f92ab29f 8143 { 1.1621066403893472, 2.0000000000000000, 1.0000000000000000,
7c62b943 8144 6.0000000000000000, 0.39999999999999991 },
f92ab29f 8145 { 1.2148922218710421, 2.0000000000000000, 1.0000000000000000,
7c62b943 8146 6.0000000000000000, 0.50000000000000000 },
f92ab29f 8147 { 1.2750496810838674, 2.0000000000000000, 1.0000000000000000,
7c62b943 8148 6.0000000000000000, 0.60000000000000009 },
f92ab29f 8149 { 1.3448048570872917, 2.0000000000000000, 1.0000000000000000,
7c62b943 8150 6.0000000000000000, 0.69999999999999996 },
f92ab29f 8151 { 1.4276833109859521, 2.0000000000000000, 1.0000000000000000,
7c62b943 8152 6.0000000000000000, 0.80000000000000004 },
f92ab29f 8153 { 1.5299976259379788, 2.0000000000000000, 1.0000000000000000,
7c62b943
BK
8154 6.0000000000000000, 0.89999999999999991 },
8155};
8156
8157// Test function for a=2.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
8158template <typename Tp>
8159void test118()
8160{
8161 const Tp eps = std::numeric_limits<Tp>::epsilon();
8162 Tp max_abs_diff = -Tp(1);
8163 Tp max_abs_frac = -Tp(1);
8164 unsigned int num_datum = sizeof(data118)
8165 / sizeof(testcase_hyperg<double>);
8166 for (unsigned int i = 0; i < num_datum; ++i)
8167 {
8168 const Tp f = std::tr1::hyperg(Tp(data118[i].a), Tp(data118[i].b),
8169 Tp(data118[i].c), Tp(data118[i].x));
8170 const Tp f0 = data118[i].f0;
8171 const Tp diff = f - f0;
8172 if (std::abs(diff) > max_abs_diff)
8173 max_abs_diff = std::abs(diff);
8174 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8175 {
8176 const Tp frac = diff / f0;
8177 if (std::abs(frac) > max_abs_frac)
8178 max_abs_frac = std::abs(frac);
8179 }
8180 }
8181 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8182}
8183
8184// Test data for a=2.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
8185testcase_hyperg<double> data119[] = {
f92ab29f 8186 { 0.82510759951857582, 2.0000000000000000, 1.0000000000000000,
7c62b943 8187 8.0000000000000000, -0.90000000000000002 },
f92ab29f 8188 { 0.84072786892782092, 2.0000000000000000, 1.0000000000000000,
7c62b943 8189 8.0000000000000000, -0.80000000000000004 },
f92ab29f 8190 { 0.85710884896562356, 2.0000000000000000, 1.0000000000000000,
7c62b943 8191 8.0000000000000000, -0.69999999999999996 },
f92ab29f 8192 { 0.87431674418118333, 2.0000000000000000, 1.0000000000000000,
7c62b943 8193 8.0000000000000000, -0.59999999999999998 },
f92ab29f 8194 { 0.89242659229727017, 2.0000000000000000, 1.0000000000000000,
7c62b943 8195 8.0000000000000000, -0.50000000000000000 },
f92ab29f 8196 { 0.91152392685930339, 2.0000000000000000, 1.0000000000000000,
7c62b943 8197 8.0000000000000000, -0.40000000000000002 },
f92ab29f 8198 { 0.93170685950993570, 2.0000000000000000, 1.0000000000000000,
7c62b943 8199 8.0000000000000000, -0.30000000000000004 },
f92ab29f 8200 { 0.95308871926790661, 2.0000000000000000, 1.0000000000000000,
7c62b943 8201 8.0000000000000000, -0.19999999999999996 },
f92ab29f 8202 { 0.97580144325325802, 2.0000000000000000, 1.0000000000000000,
7c62b943 8203 8.0000000000000000, -0.099999999999999978 },
f92ab29f 8204 { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
7c62b943 8205 8.0000000000000000, 0.0000000000000000 },
f92ab29f 8206 { 1.0258682619030324, 2.0000000000000000, 1.0000000000000000,
7c62b943 8207 8.0000000000000000, 0.10000000000000009 },
f92ab29f 8208 { 1.0536269616706000, 2.0000000000000000, 1.0000000000000000,
7c62b943 8209 8.0000000000000000, 0.19999999999999996 },
f92ab29f 8210 { 1.0835447330793833, 2.0000000000000000, 1.0000000000000000,
7c62b943 8211 8.0000000000000000, 0.30000000000000004 },
f92ab29f 8212 { 1.1159538758396654, 2.0000000000000000, 1.0000000000000000,
7c62b943 8213 8.0000000000000000, 0.39999999999999991 },
f92ab29f 8214 { 1.1512736659291880, 2.0000000000000000, 1.0000000000000000,
7c62b943 8215 8.0000000000000000, 0.50000000000000000 },
f92ab29f 8216 { 1.1900463690116090, 2.0000000000000000, 1.0000000000000000,
7c62b943 8217 8.0000000000000000, 0.60000000000000009 },
f92ab29f 8218 { 1.2329961591622411, 2.0000000000000000, 1.0000000000000000,
7c62b943 8219 8.0000000000000000, 0.69999999999999996 },
f92ab29f 8220 { 1.2811334345669059, 2.0000000000000000, 1.0000000000000000,
7c62b943 8221 8.0000000000000000, 0.80000000000000004 },
f92ab29f 8222 { 1.3359629014132051, 2.0000000000000000, 1.0000000000000000,
7c62b943
BK
8223 8.0000000000000000, 0.89999999999999991 },
8224};
8225
8226// Test function for a=2.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
8227template <typename Tp>
8228void test119()
8229{
8230 const Tp eps = std::numeric_limits<Tp>::epsilon();
8231 Tp max_abs_diff = -Tp(1);
8232 Tp max_abs_frac = -Tp(1);
8233 unsigned int num_datum = sizeof(data119)
8234 / sizeof(testcase_hyperg<double>);
8235 for (unsigned int i = 0; i < num_datum; ++i)
8236 {
8237 const Tp f = std::tr1::hyperg(Tp(data119[i].a), Tp(data119[i].b),
8238 Tp(data119[i].c), Tp(data119[i].x));
8239 const Tp f0 = data119[i].f0;
8240 const Tp diff = f - f0;
8241 if (std::abs(diff) > max_abs_diff)
8242 max_abs_diff = std::abs(diff);
8243 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8244 {
8245 const Tp frac = diff / f0;
8246 if (std::abs(frac) > max_abs_frac)
8247 max_abs_frac = std::abs(frac);
8248 }
8249 }
8250 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8251}
8252
8253// Test data for a=2.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
8254testcase_hyperg<double> data120[] = {
f92ab29f 8255 { 0.85426123653345876, 2.0000000000000000, 1.0000000000000000,
7c62b943 8256 10.000000000000000, -0.90000000000000002 },
f92ab29f 8257 { 0.86774543390930370, 2.0000000000000000, 1.0000000000000000,
7c62b943 8258 10.000000000000000, -0.80000000000000004 },
f92ab29f 8259 { 0.88178859537254239, 2.0000000000000000, 1.0000000000000000,
7c62b943 8260 10.000000000000000, -0.69999999999999996 },
f92ab29f 8261 { 0.89643269097060951, 2.0000000000000000, 1.0000000000000000,
7c62b943 8262 10.000000000000000, -0.59999999999999998 },
f92ab29f 8263 { 0.91172456687216763, 2.0000000000000000, 1.0000000000000000,
7c62b943 8264 10.000000000000000, -0.50000000000000000 },
f92ab29f 8265 { 0.92771674975966134, 2.0000000000000000, 1.0000000000000000,
7c62b943 8266 10.000000000000000, -0.40000000000000002 },
f92ab29f 8267 { 0.94446842993888647, 2.0000000000000000, 1.0000000000000000,
7c62b943 8268 10.000000000000000, -0.30000000000000004 },
f92ab29f 8269 { 0.96204667481937678, 2.0000000000000000, 1.0000000000000000,
7c62b943 8270 10.000000000000000, -0.19999999999999996 },
f92ab29f 8271 { 0.98052794339012128, 2.0000000000000000, 1.0000000000000000,
7c62b943 8272 10.000000000000000, -0.099999999999999978 },
f92ab29f 8273 { 1.0000000000000000, 2.0000000000000000, 1.0000000000000000,
7c62b943 8274 10.000000000000000, 0.0000000000000000 },
f92ab29f 8275 { 1.0205643671068179, 2.0000000000000000, 1.0000000000000000,
7c62b943 8276 10.000000000000000, 0.10000000000000009 },
f92ab29f 8277 { 1.0423395201078882, 2.0000000000000000, 1.0000000000000000,
7c62b943 8278 10.000000000000000, 0.19999999999999996 },
f92ab29f 8279 { 1.0654651277885334, 2.0000000000000000, 1.0000000000000000,
7c62b943 8280 10.000000000000000, 0.30000000000000004 },
f92ab29f 8281 { 1.0901078068101382, 2.0000000000000000, 1.0000000000000000,
7c62b943 8282 10.000000000000000, 0.39999999999999991 },
f92ab29f 8283 { 1.1164691415928940, 2.0000000000000000, 1.0000000000000000,
7c62b943 8284 10.000000000000000, 0.50000000000000000 },
f92ab29f 8285 { 1.1447972335326551, 2.0000000000000000, 1.0000000000000000,
7c62b943 8286 10.000000000000000, 0.60000000000000009 },
f92ab29f 8287 { 1.1754040384534161, 2.0000000000000000, 1.0000000000000000,
7c62b943 8288 10.000000000000000, 0.69999999999999996 },
f92ab29f 8289 { 1.2086928679893112, 2.0000000000000000, 1.0000000000000000,
7c62b943 8290 10.000000000000000, 0.80000000000000004 },
f92ab29f 8291 { 1.2452055640510711, 2.0000000000000000, 1.0000000000000000,
7c62b943
BK
8292 10.000000000000000, 0.89999999999999991 },
8293};
8294
8295// Test function for a=2.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
8296template <typename Tp>
8297void test120()
8298{
8299 const Tp eps = std::numeric_limits<Tp>::epsilon();
8300 Tp max_abs_diff = -Tp(1);
8301 Tp max_abs_frac = -Tp(1);
8302 unsigned int num_datum = sizeof(data120)
8303 / sizeof(testcase_hyperg<double>);
8304 for (unsigned int i = 0; i < num_datum; ++i)
8305 {
8306 const Tp f = std::tr1::hyperg(Tp(data120[i].a), Tp(data120[i].b),
8307 Tp(data120[i].c), Tp(data120[i].x));
8308 const Tp f0 = data120[i].f0;
8309 const Tp diff = f - f0;
8310 if (std::abs(diff) > max_abs_diff)
8311 max_abs_diff = std::abs(diff);
8312 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8313 {
8314 const Tp frac = diff / f0;
8315 if (std::abs(frac) > max_abs_frac)
8316 max_abs_frac = std::abs(frac);
8317 }
8318 }
8319 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8320}
8321
8322// Test data for a=2.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
8323testcase_hyperg<double> data121[] = {
f92ab29f 8324 { 0.27700831024930750, 2.0000000000000000, 2.0000000000000000,
7c62b943 8325 2.0000000000000000, -0.90000000000000002 },
f92ab29f 8326 { 0.30864197530864196, 2.0000000000000000, 2.0000000000000000,
7c62b943 8327 2.0000000000000000, -0.80000000000000004 },
f92ab29f 8328 { 0.34602076124567477, 2.0000000000000000, 2.0000000000000000,
7c62b943 8329 2.0000000000000000, -0.69999999999999996 },
f92ab29f 8330 { 0.39062499999999994, 2.0000000000000000, 2.0000000000000000,
7c62b943 8331 2.0000000000000000, -0.59999999999999998 },
f92ab29f 8332 { 0.44444444444444442, 2.0000000000000000, 2.0000000000000000,
7c62b943 8333 2.0000000000000000, -0.50000000000000000 },
f92ab29f 8334 { 0.51020408163265307, 2.0000000000000000, 2.0000000000000000,
7c62b943 8335 2.0000000000000000, -0.40000000000000002 },
f92ab29f 8336 { 0.59171597633136097, 2.0000000000000000, 2.0000000000000000,
7c62b943 8337 2.0000000000000000, -0.30000000000000004 },
f92ab29f 8338 { 0.69444444444444453, 2.0000000000000000, 2.0000000000000000,
7c62b943 8339 2.0000000000000000, -0.19999999999999996 },
f92ab29f 8340 { 0.82644628099173545, 2.0000000000000000, 2.0000000000000000,
7c62b943 8341 2.0000000000000000, -0.099999999999999978 },
f92ab29f 8342 { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
7c62b943 8343 2.0000000000000000, 0.0000000000000000 },
f92ab29f 8344 { 1.2345679012345681, 2.0000000000000000, 2.0000000000000000,
7c62b943 8345 2.0000000000000000, 0.10000000000000009 },
f92ab29f 8346 { 1.5624999999999998, 2.0000000000000000, 2.0000000000000000,
7c62b943 8347 2.0000000000000000, 0.19999999999999996 },
f92ab29f 8348 { 2.0408163265306127, 2.0000000000000000, 2.0000000000000000,
7c62b943 8349 2.0000000000000000, 0.30000000000000004 },
f92ab29f 8350 { 2.7777777777777768, 2.0000000000000000, 2.0000000000000000,
7c62b943 8351 2.0000000000000000, 0.39999999999999991 },
f92ab29f 8352 { 4.0000000000000000, 2.0000000000000000, 2.0000000000000000,
7c62b943 8353 2.0000000000000000, 0.50000000000000000 },
f92ab29f 8354 { 6.2500000000000036, 2.0000000000000000, 2.0000000000000000,
7c62b943 8355 2.0000000000000000, 0.60000000000000009 },
f92ab29f 8356 { 11.111111111111109, 2.0000000000000000, 2.0000000000000000,
7c62b943 8357 2.0000000000000000, 0.69999999999999996 },
f92ab29f 8358 { 25.000000000000007, 2.0000000000000000, 2.0000000000000000,
7c62b943 8359 2.0000000000000000, 0.80000000000000004 },
f92ab29f 8360 { 99.999999999999872, 2.0000000000000000, 2.0000000000000000,
7c62b943
BK
8361 2.0000000000000000, 0.89999999999999991 },
8362};
8363
8364// Test function for a=2.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
8365template <typename Tp>
8366void test121()
8367{
8368 const Tp eps = std::numeric_limits<Tp>::epsilon();
8369 Tp max_abs_diff = -Tp(1);
8370 Tp max_abs_frac = -Tp(1);
8371 unsigned int num_datum = sizeof(data121)
8372 / sizeof(testcase_hyperg<double>);
8373 for (unsigned int i = 0; i < num_datum; ++i)
8374 {
8375 const Tp f = std::tr1::hyperg(Tp(data121[i].a), Tp(data121[i].b),
8376 Tp(data121[i].c), Tp(data121[i].x));
8377 const Tp f0 = data121[i].f0;
8378 const Tp diff = f - f0;
8379 if (std::abs(diff) > max_abs_diff)
8380 max_abs_diff = std::abs(diff);
8381 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8382 {
8383 const Tp frac = diff / f0;
8384 if (std::abs(frac) > max_abs_frac)
8385 max_abs_frac = std::abs(frac);
8386 }
8387 }
8388 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8389}
8390
8391// Test data for a=2.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
8392testcase_hyperg<double> data122[] = {
f92ab29f 8393 { 0.50515448477320868, 2.0000000000000000, 2.0000000000000000,
7c62b943 8394 4.0000000000000000, -0.90000000000000002 },
f92ab29f 8395 { 0.53674994210078020, 2.0000000000000000, 2.0000000000000000,
7c62b943 8396 4.0000000000000000, -0.80000000000000004 },
f92ab29f 8397 { 0.57194655162437447, 2.0000000000000000, 2.0000000000000000,
7c62b943 8398 4.0000000000000000, -0.69999999999999996 },
f92ab29f 8399 { 0.61137322330312327, 2.0000000000000000, 2.0000000000000000,
7c62b943 8400 4.0000000000000000, -0.59999999999999998 },
f92ab29f 8401 { 0.65581297297972574, 2.0000000000000000, 2.0000000000000000,
7c62b943 8402 4.0000000000000000, -0.50000000000000000 },
f92ab29f 8403 { 0.70625323977290932, 2.0000000000000000, 2.0000000000000000,
7c62b943 8404 4.0000000000000000, -0.40000000000000002 },
f92ab29f 8405 { 0.76395739449542643, 2.0000000000000000, 2.0000000000000000,
7c62b943 8406 4.0000000000000000, -0.30000000000000004 },
f92ab29f 8407 { 0.83056871002513311, 2.0000000000000000, 2.0000000000000000,
7c62b943 8408 4.0000000000000000, -0.19999999999999996 },
f92ab29f 8409 { 0.90826553449323655, 2.0000000000000000, 2.0000000000000000,
7c62b943 8410 4.0000000000000000, -0.099999999999999978 },
f92ab29f 8411 { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
7c62b943 8412 4.0000000000000000, 0.0000000000000000 },
f92ab29f 8413 { 1.1098784992198341, 2.0000000000000000, 2.0000000000000000,
7c62b943 8414 4.0000000000000000, 0.10000000000000009 },
f92ab29f 8415 { 1.2437942741831700, 2.0000000000000000, 2.0000000000000000,
7c62b943 8416 4.0000000000000000, 0.19999999999999996 },
f92ab29f 8417 { 1.4105343768544543, 2.0000000000000000, 2.0000000000000000,
7c62b943 8418 4.0000000000000000, 0.30000000000000004 },
f92ab29f 8419 { 1.6238435648986016, 2.0000000000000000, 2.0000000000000000,
7c62b943 8420 4.0000000000000000, 0.39999999999999991 },
f92ab29f 8421 { 1.9065970003160624, 2.0000000000000000, 2.0000000000000000,
7c62b943 8422 4.0000000000000000, 0.50000000000000000 },
f92ab29f 8423 { 2.3001951284393627, 2.0000000000000000, 2.0000000000000000,
7c62b943 8424 4.0000000000000000, 0.60000000000000009 },
f92ab29f 8425 { 2.8891774744673464, 2.0000000000000000, 2.0000000000000000,
7c62b943 8426 4.0000000000000000, 0.69999999999999996 },
f92ab29f 8427 { 3.8827206436045336, 2.0000000000000000, 2.0000000000000000,
7c62b943 8428 4.0000000000000000, 0.80000000000000004 },
f92ab29f 8429 { 6.0316345867773542, 2.0000000000000000, 2.0000000000000000,
7c62b943
BK
8430 4.0000000000000000, 0.89999999999999991 },
8431};
8432
8433// Test function for a=2.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
8434template <typename Tp>
8435void test122()
8436{
8437 const Tp eps = std::numeric_limits<Tp>::epsilon();
8438 Tp max_abs_diff = -Tp(1);
8439 Tp max_abs_frac = -Tp(1);
8440 unsigned int num_datum = sizeof(data122)
8441 / sizeof(testcase_hyperg<double>);
8442 for (unsigned int i = 0; i < num_datum; ++i)
8443 {
8444 const Tp f = std::tr1::hyperg(Tp(data122[i].a), Tp(data122[i].b),
8445 Tp(data122[i].c), Tp(data122[i].x));
8446 const Tp f0 = data122[i].f0;
8447 const Tp diff = f - f0;
8448 if (std::abs(diff) > max_abs_diff)
8449 max_abs_diff = std::abs(diff);
8450 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8451 {
8452 const Tp frac = diff / f0;
8453 if (std::abs(frac) > max_abs_frac)
8454 max_abs_frac = std::abs(frac);
8455 }
8456 }
8457 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8458}
8459
8460// Test data for a=2.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
8461testcase_hyperg<double> data123[] = {
f92ab29f 8462 { 0.61824560969673303, 2.0000000000000000, 2.0000000000000000,
7c62b943 8463 6.0000000000000000, -0.90000000000000002 },
f92ab29f 8464 { 0.64645665839161048, 2.0000000000000000, 2.0000000000000000,
7c62b943 8465 6.0000000000000000, -0.80000000000000004 },
f92ab29f 8466 { 0.67712272792612083, 2.0000000000000000, 2.0000000000000000,
7c62b943 8467 6.0000000000000000, -0.69999999999999996 },
f92ab29f 8468 { 0.71058076074636822, 2.0000000000000000, 2.0000000000000000,
7c62b943 8469 6.0000000000000000, -0.59999999999999998 },
f92ab29f 8470 { 0.74723387423852861, 2.0000000000000000, 2.0000000000000000,
7c62b943 8471 6.0000000000000000, -0.50000000000000000 },
f92ab29f 8472 { 0.78756892188863126, 2.0000000000000000, 2.0000000000000000,
7c62b943 8473 6.0000000000000000, -0.40000000000000002 },
f92ab29f 8474 { 0.83218012557592713, 2.0000000000000000, 2.0000000000000000,
7c62b943 8475 6.0000000000000000, -0.30000000000000004 },
f92ab29f 8476 { 0.88180144818204143, 2.0000000000000000, 2.0000000000000000,
7c62b943 8477 6.0000000000000000, -0.19999999999999996 },
f92ab29f 8478 { 0.93735184459468934, 2.0000000000000000, 2.0000000000000000,
7c62b943 8479 6.0000000000000000, -0.099999999999999978 },
f92ab29f 8480 { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
7c62b943 8481 6.0000000000000000, 0.0000000000000000 },
f92ab29f 8482 { 1.0712594799044883, 2.0000000000000000, 2.0000000000000000,
7c62b943 8483 6.0000000000000000, 0.10000000000000009 },
f92ab29f 8484 { 1.1531330932162096, 2.0000000000000000, 2.0000000000000000,
7c62b943 8485 6.0000000000000000, 0.19999999999999996 },
f92ab29f 8486 { 1.2483404191094898, 2.0000000000000000, 2.0000000000000000,
7c62b943 8487 6.0000000000000000, 0.30000000000000004 },
f92ab29f 8488 { 1.3606934909972501, 2.0000000000000000, 2.0000000000000000,
7c62b943 8489 6.0000000000000000, 0.39999999999999991 },
f92ab29f 8490 { 1.4957544469027071, 2.0000000000000000, 2.0000000000000000,
7c62b943 8491 6.0000000000000000, 0.50000000000000000 },
f92ab29f 8492 { 1.6620777107871287, 2.0000000000000000, 2.0000000000000000,
7c62b943 8493 6.0000000000000000, 0.60000000000000009 },
f92ab29f 8494 { 1.8738132387064506, 2.0000000000000000, 2.0000000000000000,
7c62b943 8495 6.0000000000000000, 0.69999999999999996 },
f92ab29f 8496 { 2.1570670242247409, 2.0000000000000000, 2.0000000000000000,
7c62b943 8497 6.0000000000000000, 0.80000000000000004 },
f92ab29f 8498 { 2.5700735959225494, 2.0000000000000000, 2.0000000000000000,
7c62b943
BK
8499 6.0000000000000000, 0.89999999999999991 },
8500};
8501
8502// Test function for a=2.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
8503template <typename Tp>
8504void test123()
8505{
8506 const Tp eps = std::numeric_limits<Tp>::epsilon();
8507 Tp max_abs_diff = -Tp(1);
8508 Tp max_abs_frac = -Tp(1);
8509 unsigned int num_datum = sizeof(data123)
8510 / sizeof(testcase_hyperg<double>);
8511 for (unsigned int i = 0; i < num_datum; ++i)
8512 {
8513 const Tp f = std::tr1::hyperg(Tp(data123[i].a), Tp(data123[i].b),
8514 Tp(data123[i].c), Tp(data123[i].x));
8515 const Tp f0 = data123[i].f0;
8516 const Tp diff = f - f0;
8517 if (std::abs(diff) > max_abs_diff)
8518 max_abs_diff = std::abs(diff);
8519 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8520 {
8521 const Tp frac = diff / f0;
8522 if (std::abs(frac) > max_abs_frac)
8523 max_abs_frac = std::abs(frac);
8524 }
8525 }
8526 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8527}
8528
8529// Test data for a=2.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
8530testcase_hyperg<double> data124[] = {
f92ab29f 8531 { 0.68776713859043437, 2.0000000000000000, 2.0000000000000000,
7c62b943 8532 8.0000000000000000, -0.90000000000000002 },
f92ab29f 8533 { 0.71280582849489826, 2.0000000000000000, 2.0000000000000000,
7c62b943 8534 8.0000000000000000, -0.80000000000000004 },
f92ab29f 8535 { 0.73962983054724929, 2.0000000000000000, 2.0000000000000000,
7c62b943 8536 8.0000000000000000, -0.69999999999999996 },
f92ab29f 8537 { 0.76844343025262085, 2.0000000000000000, 2.0000000000000000,
7c62b943 8538 8.0000000000000000, -0.59999999999999998 },
f92ab29f 8539 { 0.79948476671182911, 2.0000000000000000, 2.0000000000000000,
7c62b943 8540 8.0000000000000000, -0.50000000000000000 },
f92ab29f 8541 { 0.83303347721461229, 2.0000000000000000, 2.0000000000000000,
7c62b943 8542 8.0000000000000000, -0.40000000000000002 },
f92ab29f 8543 { 0.86942060391338782, 2.0000000000000000, 2.0000000000000000,
7c62b943 8544 8.0000000000000000, -0.30000000000000004 },
f92ab29f 8545 { 0.90904161711581655, 2.0000000000000000, 2.0000000000000000,
7c62b943 8546 8.0000000000000000, -0.19999999999999996 },
f92ab29f 8547 { 0.95237381468647742, 2.0000000000000000, 2.0000000000000000,
7c62b943 8548 8.0000000000000000, -0.099999999999999978 },
f92ab29f 8549 { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
7c62b943 8550 8.0000000000000000, 0.0000000000000000 },
f92ab29f 8551 { 1.0526413941912305, 2.0000000000000000, 2.0000000000000000,
7c62b943 8552 8.0000000000000000, 0.10000000000000009 },
f92ab29f 8553 { 1.1112045278881502, 2.0000000000000000, 2.0000000000000000,
7c62b943 8554 8.0000000000000000, 0.19999999999999996 },
f92ab29f 8555 { 1.1768500306393046, 2.0000000000000000, 2.0000000000000000,
7c62b943 8556 8.0000000000000000, 0.30000000000000004 },
f92ab29f 8557 { 1.2510971588297888, 2.0000000000000000, 2.0000000000000000,
7c62b943 8558 8.0000000000000000, 0.39999999999999991 },
f92ab29f 8559 { 1.3359896747789315, 2.0000000000000000, 2.0000000000000000,
7c62b943 8560 8.0000000000000000, 0.50000000000000000 },
f92ab29f 8561 { 1.4343740183432725, 2.0000000000000000, 2.0000000000000000,
7c62b943 8562 8.0000000000000000, 0.60000000000000009 },
f92ab29f 8563 { 1.5504011881337365, 2.0000000000000000, 2.0000000000000000,
7c62b943 8564 8.0000000000000000, 0.69999999999999996 },
f92ab29f 8565 { 1.6905307012604318, 2.0000000000000000, 2.0000000000000000,
7c62b943 8566 8.0000000000000000, 0.80000000000000004 },
f92ab29f 8567 { 1.8658920279264424, 2.0000000000000000, 2.0000000000000000,
7c62b943
BK
8568 8.0000000000000000, 0.89999999999999991 },
8569};
8570
8571// Test function for a=2.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
8572template <typename Tp>
8573void test124()
8574{
8575 const Tp eps = std::numeric_limits<Tp>::epsilon();
8576 Tp max_abs_diff = -Tp(1);
8577 Tp max_abs_frac = -Tp(1);
8578 unsigned int num_datum = sizeof(data124)
8579 / sizeof(testcase_hyperg<double>);
8580 for (unsigned int i = 0; i < num_datum; ++i)
8581 {
8582 const Tp f = std::tr1::hyperg(Tp(data124[i].a), Tp(data124[i].b),
8583 Tp(data124[i].c), Tp(data124[i].x));
8584 const Tp f0 = data124[i].f0;
8585 const Tp diff = f - f0;
8586 if (std::abs(diff) > max_abs_diff)
8587 max_abs_diff = std::abs(diff);
8588 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8589 {
8590 const Tp frac = diff / f0;
8591 if (std::abs(frac) > max_abs_frac)
8592 max_abs_frac = std::abs(frac);
8593 }
8594 }
8595 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8596}
8597
8598// Test data for a=2.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
8599testcase_hyperg<double> data125[] = {
f92ab29f 8600 { 0.73530262886958830, 2.0000000000000000, 2.0000000000000000,
7c62b943 8601 10.000000000000000, -0.90000000000000002 },
f92ab29f 8602 { 0.75768898977673638, 2.0000000000000000, 2.0000000000000000,
7c62b943 8603 10.000000000000000, -0.80000000000000004 },
f92ab29f 8604 { 0.78143483544640069, 2.0000000000000000, 2.0000000000000000,
7c62b943 8605 10.000000000000000, -0.69999999999999996 },
f92ab29f 8606 { 0.80667428603297209, 2.0000000000000000, 2.0000000000000000,
7c62b943 8607 10.000000000000000, -0.59999999999999998 },
f92ab29f 8608 { 0.83356078772438325, 2.0000000000000000, 2.0000000000000000,
7c62b943 8609 10.000000000000000, -0.50000000000000000 },
f92ab29f 8610 { 0.86227093001346145, 2.0000000000000000, 2.0000000000000000,
7c62b943 8611 10.000000000000000, -0.40000000000000002 },
f92ab29f 8612 { 0.89300925500556994, 2.0000000000000000, 2.0000000000000000,
7c62b943 8613 10.000000000000000, -0.30000000000000004 },
f92ab29f 8614 { 0.92601438873425990, 2.0000000000000000, 2.0000000000000000,
7c62b943 8615 10.000000000000000, -0.19999999999999996 },
f92ab29f 8616 { 0.96156696230910810, 2.0000000000000000, 2.0000000000000000,
7c62b943 8617 10.000000000000000, -0.099999999999999978 },
f92ab29f 8618 { 1.0000000000000000, 2.0000000000000000, 2.0000000000000000,
7c62b943 8619 10.000000000000000, 0.0000000000000000 },
f92ab29f 8620 { 1.0417127776179342, 2.0000000000000000, 2.0000000000000000,
7c62b943 8621 10.000000000000000, 0.10000000000000009 },
f92ab29f 8622 { 1.0871896789480930, 2.0000000000000000, 2.0000000000000000,
7c62b943 8623 10.000000000000000, 0.19999999999999996 },
f92ab29f 8624 { 1.1370264514689949, 2.0000000000000000, 2.0000000000000000,
7c62b943 8625 10.000000000000000, 0.30000000000000004 },
f92ab29f 8626 { 1.1919677804049154, 2.0000000000000000, 2.0000000000000000,
7c62b943 8627 10.000000000000000, 0.39999999999999991 },
f92ab29f 8628 { 1.2529628761065934, 2.0000000000000000, 2.0000000000000000,
7c62b943 8629 10.000000000000000, 0.50000000000000000 },
f92ab29f 8630 { 1.3212511796458866, 2.0000000000000000, 2.0000000000000000,
7c62b943 8631 10.000000000000000, 0.60000000000000009 },
f92ab29f 8632 { 1.3985017309668506, 2.0000000000000000, 2.0000000000000000,
7c62b943 8633 10.000000000000000, 0.69999999999999996 },
f92ab29f 8634 { 1.4870567523847895, 2.0000000000000000, 2.0000000000000000,
7c62b943 8635 10.000000000000000, 0.80000000000000004 },
f92ab29f 8636 { 1.5904049523738040, 2.0000000000000000, 2.0000000000000000,
7c62b943
BK
8637 10.000000000000000, 0.89999999999999991 },
8638};
8639
8640// Test function for a=2.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
8641template <typename Tp>
8642void test125()
8643{
8644 const Tp eps = std::numeric_limits<Tp>::epsilon();
8645 Tp max_abs_diff = -Tp(1);
8646 Tp max_abs_frac = -Tp(1);
8647 unsigned int num_datum = sizeof(data125)
8648 / sizeof(testcase_hyperg<double>);
8649 for (unsigned int i = 0; i < num_datum; ++i)
8650 {
8651 const Tp f = std::tr1::hyperg(Tp(data125[i].a), Tp(data125[i].b),
8652 Tp(data125[i].c), Tp(data125[i].x));
8653 const Tp f0 = data125[i].f0;
8654 const Tp diff = f - f0;
8655 if (std::abs(diff) > max_abs_diff)
8656 max_abs_diff = std::abs(diff);
8657 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8658 {
8659 const Tp frac = diff / f0;
8660 if (std::abs(frac) > max_abs_frac)
8661 max_abs_frac = std::abs(frac);
8662 }
8663 }
8664 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8665}
8666
8667// Test data for a=2.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
8668testcase_hyperg<double> data126[] = {
f92ab29f 8669 { 0.040386107340619266, 2.0000000000000000, 5.0000000000000000,
7c62b943 8670 2.0000000000000000, -0.90000000000000002 },
f92ab29f 8671 { 0.052922149401344633, 2.0000000000000000, 5.0000000000000000,
7c62b943 8672 2.0000000000000000, -0.80000000000000004 },
f92ab29f 8673 { 0.070429627772374270, 2.0000000000000000, 5.0000000000000000,
7c62b943 8674 2.0000000000000000, -0.69999999999999996 },
f92ab29f 8675 { 0.095367431640624972, 2.0000000000000000, 5.0000000000000000,
7c62b943 8676 2.0000000000000000, -0.59999999999999998 },
f92ab29f 8677 { 0.13168724279835387, 2.0000000000000000, 5.0000000000000000,
7c62b943 8678 2.0000000000000000, -0.50000000000000000 },
f92ab29f 8679 { 0.18593443208187066, 2.0000000000000000, 5.0000000000000000,
7c62b943 8680 2.0000000000000000, -0.40000000000000002 },
f92ab29f 8681 { 0.26932907434290437, 2.0000000000000000, 5.0000000000000000,
7c62b943 8682 2.0000000000000000, -0.30000000000000004 },
f92ab29f 8683 { 0.40187757201646096, 2.0000000000000000, 5.0000000000000000,
7c62b943 8684 2.0000000000000000, -0.19999999999999996 },
f92ab29f 8685 { 0.62092132305915493, 2.0000000000000000, 5.0000000000000000,
7c62b943 8686 2.0000000000000000, -0.099999999999999978 },
f92ab29f 8687 { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
7c62b943 8688 2.0000000000000000, 0.0000000000000000 },
f92ab29f 8689 { 1.6935087808430296, 2.0000000000000000, 5.0000000000000000,
7c62b943 8690 2.0000000000000000, 0.10000000000000009 },
f92ab29f 8691 { 3.0517578124999991, 2.0000000000000000, 5.0000000000000000,
7c62b943 8692 2.0000000000000000, 0.19999999999999996 },
f92ab29f 8693 { 5.9499018266198629, 2.0000000000000000, 5.0000000000000000,
7c62b943 8694 2.0000000000000000, 0.30000000000000004 },
f92ab29f 8695 { 12.860082304526737, 2.0000000000000000, 5.0000000000000000,
7c62b943 8696 2.0000000000000000, 0.39999999999999991 },
f92ab29f 8697 { 32.000000000000000, 2.0000000000000000, 5.0000000000000000,
7c62b943 8698 2.0000000000000000, 0.50000000000000000 },
f92ab29f 8699 { 97.656250000000114, 2.0000000000000000, 5.0000000000000000,
7c62b943 8700 2.0000000000000000, 0.60000000000000009 },
f92ab29f 8701 { 411.52263374485580, 2.0000000000000000, 5.0000000000000000,
7c62b943 8702 2.0000000000000000, 0.69999999999999996 },
f92ab29f 8703 { 3124.9999999999991, 2.0000000000000000, 5.0000000000000000,
7c62b943 8704 2.0000000000000000, 0.80000000000000004 },
f92ab29f 8705 { 99999.999999999665, 2.0000000000000000, 5.0000000000000000,
7c62b943
BK
8706 2.0000000000000000, 0.89999999999999991 },
8707};
8708
8709// Test function for a=2.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
8710template <typename Tp>
8711void test126()
8712{
8713 const Tp eps = std::numeric_limits<Tp>::epsilon();
8714 Tp max_abs_diff = -Tp(1);
8715 Tp max_abs_frac = -Tp(1);
8716 unsigned int num_datum = sizeof(data126)
8717 / sizeof(testcase_hyperg<double>);
8718 for (unsigned int i = 0; i < num_datum; ++i)
8719 {
8720 const Tp f = std::tr1::hyperg(Tp(data126[i].a), Tp(data126[i].b),
8721 Tp(data126[i].c), Tp(data126[i].x));
8722 const Tp f0 = data126[i].f0;
8723 const Tp diff = f - f0;
8724 if (std::abs(diff) > max_abs_diff)
8725 max_abs_diff = std::abs(diff);
8726 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8727 {
8728 const Tp frac = diff / f0;
8729 if (std::abs(frac) > max_abs_frac)
8730 max_abs_frac = std::abs(frac);
8731 }
8732 }
8733 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8734}
8735
8736// Test data for a=2.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
8737testcase_hyperg<double> data127[] = {
f92ab29f 8738 { 0.21140107887447140, 2.0000000000000000, 5.0000000000000000,
7c62b943 8739 4.0000000000000000, -0.90000000000000002 },
f92ab29f 8740 { 0.24005486968449935, 2.0000000000000000, 5.0000000000000000,
7c62b943 8741 4.0000000000000000, -0.80000000000000004 },
f92ab29f 8742 { 0.27478119275391821, 2.0000000000000000, 5.0000000000000000,
7c62b943 8743 4.0000000000000000, -0.69999999999999996 },
f92ab29f 8744 { 0.31738281249999994, 2.0000000000000000, 5.0000000000000000,
7c62b943 8745 4.0000000000000000, -0.59999999999999998 },
f92ab29f 8746 { 0.37037037037037035, 2.0000000000000000, 5.0000000000000000,
7c62b943 8747 4.0000000000000000, -0.50000000000000000 },
f92ab29f 8748 { 0.43731778425655982, 2.0000000000000000, 5.0000000000000000,
7c62b943 8749 4.0000000000000000, -0.40000000000000002 },
f92ab29f 8750 { 0.52344105598543444, 2.0000000000000000, 5.0000000000000000,
7c62b943 8751 4.0000000000000000, -0.30000000000000004 },
f92ab29f 8752 { 0.63657407407407429, 2.0000000000000000, 5.0000000000000000,
7c62b943 8753 4.0000000000000000, -0.19999999999999996 },
f92ab29f 8754 { 0.78888054094665638, 2.0000000000000000, 5.0000000000000000,
7c62b943 8755 4.0000000000000000, -0.099999999999999978 },
f92ab29f 8756 { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
7c62b943 8757 4.0000000000000000, 0.0000000000000000 },
f92ab29f 8758 { 1.3031550068587108, 2.0000000000000000, 5.0000000000000000,
7c62b943 8759 4.0000000000000000, 0.10000000000000009 },
f92ab29f 8760 { 1.7578125000000002, 2.0000000000000000, 5.0000000000000000,
7c62b943 8761 4.0000000000000000, 0.19999999999999996 },
f92ab29f 8762 { 2.4781341107871717, 2.0000000000000000, 5.0000000000000000,
7c62b943 8763 4.0000000000000000, 0.30000000000000004 },
f92ab29f 8764 { 3.7037037037037037, 2.0000000000000000, 5.0000000000000000,
7c62b943 8765 4.0000000000000000, 0.39999999999999991 },
f92ab29f 8766 { 5.9999999999999982, 2.0000000000000000, 5.0000000000000000,
7c62b943 8767 4.0000000000000000, 0.50000000000000000 },
f92ab29f 8768 { 10.937500000000005, 2.0000000000000000, 5.0000000000000000,
7c62b943 8769 4.0000000000000000, 0.60000000000000009 },
f92ab29f 8770 { 24.074074074074076, 2.0000000000000000, 5.0000000000000000,
7c62b943 8771 4.0000000000000000, 0.69999999999999996 },
f92ab29f 8772 { 74.999999999999957, 2.0000000000000000, 5.0000000000000000,
7c62b943 8773 4.0000000000000000, 0.80000000000000004 },
f92ab29f 8774 { 549.99999999999670, 2.0000000000000000, 5.0000000000000000,
7c62b943
BK
8775 4.0000000000000000, 0.89999999999999991 },
8776};
8777
8778// Test function for a=2.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
8779template <typename Tp>
8780void test127()
8781{
8782 const Tp eps = std::numeric_limits<Tp>::epsilon();
8783 Tp max_abs_diff = -Tp(1);
8784 Tp max_abs_frac = -Tp(1);
8785 unsigned int num_datum = sizeof(data127)
8786 / sizeof(testcase_hyperg<double>);
8787 for (unsigned int i = 0; i < num_datum; ++i)
8788 {
8789 const Tp f = std::tr1::hyperg(Tp(data127[i].a), Tp(data127[i].b),
8790 Tp(data127[i].c), Tp(data127[i].x));
8791 const Tp f0 = data127[i].f0;
8792 const Tp diff = f - f0;
8793 if (std::abs(diff) > max_abs_diff)
8794 max_abs_diff = std::abs(diff);
8795 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8796 {
8797 const Tp frac = diff / f0;
8798 if (std::abs(frac) > max_abs_frac)
8799 max_abs_frac = std::abs(frac);
8800 }
8801 }
8802 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8803}
8804
8805// Test data for a=2.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
8806testcase_hyperg<double> data128[] = {
f92ab29f 8807 { 0.33250915203252107, 2.0000000000000000, 5.0000000000000000,
7c62b943 8808 6.0000000000000000, -0.90000000000000002 },
f92ab29f 8809 { 0.36566851047721960, 2.0000000000000000, 5.0000000000000000,
7c62b943 8810 6.0000000000000000, -0.80000000000000004 },
f92ab29f 8811 { 0.40414812182437942, 2.0000000000000000, 5.0000000000000000,
7c62b943 8812 6.0000000000000000, -0.69999999999999996 },
f92ab29f 8813 { 0.44916943268118470, 2.0000000000000000, 5.0000000000000000,
7c62b943 8814 6.0000000000000000, -0.59999999999999998 },
f92ab29f 8815 { 0.50233081077479569, 2.0000000000000000, 5.0000000000000000,
7c62b943 8816 6.0000000000000000, -0.50000000000000000 },
f92ab29f 8817 { 0.56575808728873322, 2.0000000000000000, 5.0000000000000000,
7c62b943 8818 6.0000000000000000, -0.40000000000000002 },
f92ab29f 8819 { 0.64233106844971422, 2.0000000000000000, 5.0000000000000000,
7c62b943 8820 6.0000000000000000, -0.30000000000000004 },
f92ab29f 8821 { 0.73603371116919514, 2.0000000000000000, 5.0000000000000000,
7c62b943 8822 6.0000000000000000, -0.19999999999999996 },
f92ab29f 8823 { 0.85251256240112439, 2.0000000000000000, 5.0000000000000000,
7c62b943 8824 6.0000000000000000, -0.099999999999999978 },
f92ab29f 8825 { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
7c62b943 8826 6.0000000000000000, 0.0000000000000000 },
f92ab29f 8827 { 1.1909065696197674, 2.0000000000000000, 5.0000000000000000,
7c62b943 8828 6.0000000000000000, 0.10000000000000009 },
f92ab29f 8829 { 1.4447095285569311, 2.0000000000000000, 5.0000000000000000,
7c62b943 8830 6.0000000000000000, 0.19999999999999996 },
f92ab29f 8831 { 1.7935243137840653, 2.0000000000000000, 5.0000000000000000,
7c62b943 8832 6.0000000000000000, 0.30000000000000004 },
f92ab29f 8833 { 2.2937035820494454, 2.0000000000000000, 5.0000000000000000,
7c62b943 8834 6.0000000000000000, 0.39999999999999991 },
f92ab29f 8835 { 3.0524711083016687, 2.0000000000000000, 5.0000000000000000,
7c62b943 8836 6.0000000000000000, 0.50000000000000000 },
f92ab29f 8837 { 4.2976512669354259, 2.0000000000000000, 5.0000000000000000,
7c62b943 8838 6.0000000000000000, 0.60000000000000009 },
f92ab29f 8839 { 6.5977107563194677, 2.0000000000000000, 5.0000000000000000,
7c62b943 8840 6.0000000000000000, 0.69999999999999996 },
f92ab29f 8841 { 11.793747206577530, 2.0000000000000000, 5.0000000000000000,
7c62b943 8842 6.0000000000000000, 0.80000000000000004 },
f92ab29f 8843 { 29.997625937982058, 2.0000000000000000, 5.0000000000000000,
7c62b943
BK
8844 6.0000000000000000, 0.89999999999999991 },
8845};
8846
8847// Test function for a=2.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
8848template <typename Tp>
8849void test128()
8850{
8851 const Tp eps = std::numeric_limits<Tp>::epsilon();
8852 Tp max_abs_diff = -Tp(1);
8853 Tp max_abs_frac = -Tp(1);
8854 unsigned int num_datum = sizeof(data128)
8855 / sizeof(testcase_hyperg<double>);
8856 for (unsigned int i = 0; i < num_datum; ++i)
8857 {
8858 const Tp f = std::tr1::hyperg(Tp(data128[i].a), Tp(data128[i].b),
8859 Tp(data128[i].c), Tp(data128[i].x));
8860 const Tp f0 = data128[i].f0;
8861 const Tp diff = f - f0;
8862 if (std::abs(diff) > max_abs_diff)
8863 max_abs_diff = std::abs(diff);
8864 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8865 {
8866 const Tp frac = diff / f0;
8867 if (std::abs(frac) > max_abs_frac)
8868 max_abs_frac = std::abs(frac);
8869 }
8870 }
8871 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8872}
8873
8874// Test data for a=2.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
8875testcase_hyperg<double> data129[] = {
f92ab29f 8876 { 0.42108197362250305, 2.0000000000000000, 5.0000000000000000,
7c62b943 8877 8.0000000000000000, -0.90000000000000002 },
f92ab29f 8878 { 0.45503172013983051, 2.0000000000000000, 5.0000000000000000,
7c62b943 8879 8.0000000000000000, -0.80000000000000004 },
f92ab29f 8880 { 0.49345609813624303, 2.0000000000000000, 5.0000000000000000,
7c62b943 8881 8.0000000000000000, -0.69999999999999996 },
f92ab29f 8882 { 0.53720880551221295, 2.0000000000000000, 5.0000000000000000,
7c62b943 8883 8.0000000000000000, -0.59999999999999998 },
f92ab29f 8884 { 0.58736431524847466, 2.0000000000000000, 5.0000000000000000,
7c62b943 8885 8.0000000000000000, -0.50000000000000000 },
f92ab29f 8886 { 0.64529222467897962, 2.0000000000000000, 5.0000000000000000,
7c62b943 8887 8.0000000000000000, -0.40000000000000002 },
f92ab29f 8888 { 0.71276337354393904, 2.0000000000000000, 5.0000000000000000,
7c62b943 8889 8.0000000000000000, -0.30000000000000004 },
f92ab29f 8890 { 0.79210466220795306, 2.0000000000000000, 5.0000000000000000,
7c62b943 8891 8.0000000000000000, -0.19999999999999996 },
f92ab29f 8892 { 0.88643063455510596, 2.0000000000000000, 5.0000000000000000,
7c62b943 8893 8.0000000000000000, -0.099999999999999978 },
f92ab29f 8894 { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
7c62b943 8895 8.0000000000000000, 0.0000000000000000 },
f92ab29f 8896 { 1.1387832139040652, 2.0000000000000000, 5.0000000000000000,
7c62b943 8897 8.0000000000000000, 0.10000000000000009 },
f92ab29f 8898 { 1.3114025920844752, 2.0000000000000000, 5.0000000000000000,
7c62b943 8899 8.0000000000000000, 0.19999999999999996 },
f92ab29f 8900 { 1.5307655016768162, 2.0000000000000000, 5.0000000000000000,
7c62b943 8901 8.0000000000000000, 0.30000000000000004 },
f92ab29f 8902 { 1.8170727950333345, 2.0000000000000000, 5.0000000000000000,
7c62b943 8903 8.0000000000000000, 0.39999999999999991 },
f92ab29f 8904 { 2.2037865486700836, 2.0000000000000000, 5.0000000000000000,
7c62b943 8905 8.0000000000000000, 0.50000000000000000 },
f92ab29f 8906 { 2.7506766056439380, 2.0000000000000000, 5.0000000000000000,
7c62b943 8907 8.0000000000000000, 0.60000000000000009 },
f92ab29f 8908 { 3.5764534935716972, 2.0000000000000000, 5.0000000000000000,
7c62b943 8909 8.0000000000000000, 0.69999999999999996 },
f92ab29f 8910 { 4.9587762302155403, 2.0000000000000000, 5.0000000000000000,
7c62b943 8911 8.0000000000000000, 0.80000000000000004 },
f92ab29f 8912 { 7.7740847924166800, 2.0000000000000000, 5.0000000000000000,
7c62b943
BK
8913 8.0000000000000000, 0.89999999999999991 },
8914};
8915
8916// Test function for a=2.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
8917template <typename Tp>
8918void test129()
8919{
8920 const Tp eps = std::numeric_limits<Tp>::epsilon();
8921 Tp max_abs_diff = -Tp(1);
8922 Tp max_abs_frac = -Tp(1);
8923 unsigned int num_datum = sizeof(data129)
8924 / sizeof(testcase_hyperg<double>);
8925 for (unsigned int i = 0; i < num_datum; ++i)
8926 {
8927 const Tp f = std::tr1::hyperg(Tp(data129[i].a), Tp(data129[i].b),
8928 Tp(data129[i].c), Tp(data129[i].x));
8929 const Tp f0 = data129[i].f0;
8930 const Tp diff = f - f0;
8931 if (std::abs(diff) > max_abs_diff)
8932 max_abs_diff = std::abs(diff);
8933 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
8934 {
8935 const Tp frac = diff / f0;
8936 if (std::abs(frac) > max_abs_frac)
8937 max_abs_frac = std::abs(frac);
8938 }
8939 }
8940 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
8941}
8942
8943// Test data for a=2.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
8944testcase_hyperg<double> data130[] = {
f92ab29f 8945 { 0.48860241312958425, 2.0000000000000000, 5.0000000000000000,
7c62b943 8946 10.000000000000000, -0.90000000000000002 },
f92ab29f 8947 { 0.52193382517068487, 2.0000000000000000, 5.0000000000000000,
7c62b943 8948 10.000000000000000, -0.80000000000000004 },
f92ab29f 8949 { 0.55902375003954219, 2.0000000000000000, 5.0000000000000000,
7c62b943 8950 10.000000000000000, -0.69999999999999996 },
f92ab29f 8951 { 0.60049055150230346, 2.0000000000000000, 5.0000000000000000,
7c62b943 8952 10.000000000000000, -0.59999999999999998 },
f92ab29f 8953 { 0.64709127927203480, 2.0000000000000000, 5.0000000000000000,
7c62b943 8954 10.000000000000000, -0.50000000000000000 },
f92ab29f 8955 { 0.69976233335368998, 2.0000000000000000, 5.0000000000000000,
7c62b943 8956 10.000000000000000, -0.40000000000000002 },
f92ab29f 8957 { 0.75967529501081055, 2.0000000000000000, 5.0000000000000000,
7c62b943 8958 10.000000000000000, -0.30000000000000004 },
f92ab29f 8959 { 0.82831498895254407, 2.0000000000000000, 5.0000000000000000,
7c62b943 8960 10.000000000000000, -0.19999999999999996 },
f92ab29f 8961 { 0.90759090169653933, 2.0000000000000000, 5.0000000000000000,
7c62b943 8962 10.000000000000000, -0.099999999999999978 },
f92ab29f 8963 { 1.0000000000000000, 2.0000000000000000, 5.0000000000000000,
7c62b943 8964 10.000000000000000, 0.0000000000000000 },
f92ab29f 8965 { 1.1088712278667465, 2.0000000000000000, 5.0000000000000000,
7c62b943 8966 10.000000000000000, 0.10000000000000009 },
f92ab29f 8967 { 1.2387445478440853, 2.0000000000000000, 5.0000000000000000,
7c62b943 8968 10.000000000000000, 0.19999999999999996 },
f92ab29f 8969 { 1.3959812720437546, 2.0000000000000000, 5.0000000000000000,
7c62b943 8970 10.000000000000000, 0.30000000000000004 },
f92ab29f 8971 { 1.5897930661091164, 2.0000000000000000, 5.0000000000000000,
7c62b943 8972 10.000000000000000, 0.39999999999999991 },
f92ab29f 8973 { 1.8340789380307454, 2.0000000000000000, 5.0000000000000000,
7c62b943 8974 10.000000000000000, 0.50000000000000000 },
f92ab29f 8975 { 2.1509548085970764, 2.0000000000000000, 5.0000000000000000,
7c62b943 8976 10.000000000000000, 0.60000000000000009 },
f92ab29f 8977 { 2.5782406951207504, 2.0000000000000000, 5.0000000000000000,
7c62b943 8978 10.000000000000000, 0.69999999999999996 },
f92ab29f 8979 { 3.1877847194242737, 2.0000000000000000, 5.0000000000000000,
7c62b943 8980 10.000000000000000, 0.80000000000000004 },
f92ab29f 8981 { 4.1421596631676900, 2.0000000000000000, 5.0000000000000000,
7c62b943
BK
8982 10.000000000000000, 0.89999999999999991 },
8983};
8984
8985// Test function for a=2.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
8986template <typename Tp>
8987void test130()
8988{
8989 const Tp eps = std::numeric_limits<Tp>::epsilon();
8990 Tp max_abs_diff = -Tp(1);
8991 Tp max_abs_frac = -Tp(1);
8992 unsigned int num_datum = sizeof(data130)
8993 / sizeof(testcase_hyperg<double>);
8994 for (unsigned int i = 0; i < num_datum; ++i)
8995 {
8996 const Tp f = std::tr1::hyperg(Tp(data130[i].a), Tp(data130[i].b),
8997 Tp(data130[i].c), Tp(data130[i].x));
8998 const Tp f0 = data130[i].f0;
8999 const Tp diff = f - f0;
9000 if (std::abs(diff) > max_abs_diff)
9001 max_abs_diff = std::abs(diff);
9002 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9003 {
9004 const Tp frac = diff / f0;
9005 if (std::abs(frac) > max_abs_frac)
9006 max_abs_frac = std::abs(frac);
9007 }
9008 }
9009 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9010}
9011
9012// Test data for a=2.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
9013testcase_hyperg<double> data131[] = {
f92ab29f 9014 { 0.0016310376661280216, 2.0000000000000000, 10.000000000000000,
7c62b943 9015 2.0000000000000000, -0.90000000000000002 },
f92ab29f 9016 { 0.0028007538972582421, 2.0000000000000000, 10.000000000000000,
7c62b943 9017 2.0000000000000000, -0.80000000000000004 },
f92ab29f 9018 { 0.0049603324681551939, 2.0000000000000000, 10.000000000000000,
7c62b943 9019 2.0000000000000000, -0.69999999999999996 },
f92ab29f 9020 { 0.0090949470177292789, 2.0000000000000000, 10.000000000000000,
7c62b943 9021 2.0000000000000000, -0.59999999999999998 },
f92ab29f 9022 { 0.017341529915832606, 2.0000000000000000, 10.000000000000000,
7c62b943 9023 2.0000000000000000, -0.50000000000000000 },
f92ab29f 9024 { 0.034571613033607777, 2.0000000000000000, 10.000000000000000,
7c62b943 9025 2.0000000000000000, -0.40000000000000002 },
f92ab29f 9026 { 0.072538150286405714, 2.0000000000000000, 10.000000000000000,
7c62b943 9027 2.0000000000000000, -0.30000000000000004 },
f92ab29f 9028 { 0.16150558288984579, 2.0000000000000000, 10.000000000000000,
7c62b943 9029 2.0000000000000000, -0.19999999999999996 },
f92ab29f 9030 { 0.38554328942953148, 2.0000000000000000, 10.000000000000000,
7c62b943 9031 2.0000000000000000, -0.099999999999999978 },
f92ab29f 9032 { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
7c62b943 9033 2.0000000000000000, 0.0000000000000000 },
f92ab29f 9034 { 2.8679719907924444, 2.0000000000000000, 10.000000000000000,
7c62b943 9035 2.0000000000000000, 0.10000000000000009 },
f92ab29f 9036 { 9.3132257461547816, 2.0000000000000000, 10.000000000000000,
7c62b943 9037 2.0000000000000000, 0.19999999999999996 },
f92ab29f 9038 { 35.401331746414378, 2.0000000000000000, 10.000000000000000,
7c62b943 9039 2.0000000000000000, 0.30000000000000004 },
f92ab29f 9040 { 165.38171687920172, 2.0000000000000000, 10.000000000000000,
7c62b943 9041 2.0000000000000000, 0.39999999999999991 },
f92ab29f 9042 { 1024.0000000000000, 2.0000000000000000, 10.000000000000000,
7c62b943 9043 2.0000000000000000, 0.50000000000000000 },
f92ab29f 9044 { 9536.7431640625200, 2.0000000000000000, 10.000000000000000,
7c62b943 9045 2.0000000000000000, 0.60000000000000009 },
f92ab29f 9046 { 169350.87808430271, 2.0000000000000000, 10.000000000000000,
7c62b943 9047 2.0000000000000000, 0.69999999999999996 },
f92ab29f 9048 { 9765624.9999999944, 2.0000000000000000, 10.000000000000000,
7c62b943 9049 2.0000000000000000, 0.80000000000000004 },
f92ab29f 9050 { 9999999999.9999332, 2.0000000000000000, 10.000000000000000,
7c62b943
BK
9051 2.0000000000000000, 0.89999999999999991 },
9052};
9053
9054// Test function for a=2.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
9055template <typename Tp>
9056void test131()
9057{
9058 const Tp eps = std::numeric_limits<Tp>::epsilon();
9059 Tp max_abs_diff = -Tp(1);
9060 Tp max_abs_frac = -Tp(1);
9061 unsigned int num_datum = sizeof(data131)
9062 / sizeof(testcase_hyperg<double>);
9063 for (unsigned int i = 0; i < num_datum; ++i)
9064 {
9065 const Tp f = std::tr1::hyperg(Tp(data131[i].a), Tp(data131[i].b),
9066 Tp(data131[i].c), Tp(data131[i].x));
9067 const Tp f0 = data131[i].f0;
9068 const Tp diff = f - f0;
9069 if (std::abs(diff) > max_abs_diff)
9070 max_abs_diff = std::abs(diff);
9071 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9072 {
9073 const Tp frac = diff / f0;
9074 if (std::abs(frac) > max_abs_frac)
9075 max_abs_frac = std::abs(frac);
9076 }
9077 }
9078 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9079}
9080
9081// Test data for a=2.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
9082testcase_hyperg<double> data132[] = {
f92ab29f 9083 { 0.071191280690193509, 2.0000000000000000, 10.000000000000000,
7c62b943 9084 4.0000000000000000, -0.90000000000000002 },
f92ab29f 9085 { 0.085646504654238079, 2.0000000000000000, 10.000000000000000,
7c62b943 9086 4.0000000000000000, -0.80000000000000004 },
f92ab29f 9087 { 0.10478215656371073, 2.0000000000000000, 10.000000000000000,
7c62b943 9088 4.0000000000000000, -0.69999999999999996 },
f92ab29f 9089 { 0.13074816337653575, 2.0000000000000000, 10.000000000000000,
7c62b943 9090 4.0000000000000000, -0.59999999999999998 },
f92ab29f 9091 { 0.16701141666848116, 2.0000000000000000, 10.000000000000000,
7c62b943 9092 4.0000000000000000, -0.50000000000000000 },
f92ab29f 9093 { 0.21939323375313971, 2.0000000000000000, 10.000000000000000,
7c62b943 9094 4.0000000000000000, -0.40000000000000002 },
f92ab29f 9095 { 0.29813515331786627, 2.0000000000000000, 10.000000000000000,
7c62b943 9096 4.0000000000000000, -0.30000000000000004 },
f92ab29f 9097 { 0.42225974638874386, 2.0000000000000000, 10.000000000000000,
7c62b943 9098 4.0000000000000000, -0.19999999999999996 },
f92ab29f 9099 { 0.62942145962174867, 2.0000000000000000, 10.000000000000000,
7c62b943 9100 4.0000000000000000, -0.099999999999999978 },
f92ab29f 9101 { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
7c62b943 9102 4.0000000000000000, 0.0000000000000000 },
f92ab29f 9103 { 1.7218685262373197, 2.0000000000000000, 10.000000000000000,
7c62b943 9104 4.0000000000000000, 0.10000000000000009 },
f92ab29f 9105 { 3.2855760483514689, 2.0000000000000000, 10.000000000000000,
7c62b943 9106 4.0000000000000000, 0.19999999999999996 },
f92ab29f 9107 { 7.1616652508907093, 2.0000000000000000, 10.000000000000000,
7c62b943 9108 4.0000000000000000, 0.30000000000000004 },
f92ab29f 9109 { 18.612326808485907, 2.0000000000000000, 10.000000000000000,
7c62b943 9110 4.0000000000000000, 0.39999999999999991 },
f92ab29f 9111 { 61.476190476190474, 2.0000000000000000, 10.000000000000000,
7c62b943 9112 4.0000000000000000, 0.50000000000000000 },
f92ab29f 9113 { 286.27580915178623, 2.0000000000000000, 10.000000000000000,
7c62b943 9114 4.0000000000000000, 0.60000000000000009 },
f92ab29f 9115 { 2274.9441142102296, 2.0000000000000000, 10.000000000000000,
7c62b943 9116 4.0000000000000000, 0.69999999999999996 },
f92ab29f 9117 { 47229.761904761865, 2.0000000000000000, 10.000000000000000,
7c62b943 9118 4.0000000000000000, 0.80000000000000004 },
f92ab29f 9119 { 9961460.7142856438, 2.0000000000000000, 10.000000000000000,
7c62b943
BK
9120 4.0000000000000000, 0.89999999999999991 },
9121};
9122
9123// Test function for a=2.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
9124template <typename Tp>
9125void test132()
9126{
9127 const Tp eps = std::numeric_limits<Tp>::epsilon();
9128 Tp max_abs_diff = -Tp(1);
9129 Tp max_abs_frac = -Tp(1);
9130 unsigned int num_datum = sizeof(data132)
9131 / sizeof(testcase_hyperg<double>);
9132 for (unsigned int i = 0; i < num_datum; ++i)
9133 {
9134 const Tp f = std::tr1::hyperg(Tp(data132[i].a), Tp(data132[i].b),
9135 Tp(data132[i].c), Tp(data132[i].x));
9136 const Tp f0 = data132[i].f0;
9137 const Tp diff = f - f0;
9138 if (std::abs(diff) > max_abs_diff)
9139 max_abs_diff = std::abs(diff);
9140 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9141 {
9142 const Tp frac = diff / f0;
9143 if (std::abs(frac) > max_abs_frac)
9144 max_abs_frac = std::abs(frac);
9145 }
9146 }
9147 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9148}
9149
9150// Test data for a=2.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
9151testcase_hyperg<double> data133[] = {
f92ab29f 9152 { 0.14747230019381052, 2.0000000000000000, 10.000000000000000,
7c62b943 9153 6.0000000000000000, -0.90000000000000002 },
f92ab29f 9154 { 0.17073600100690603, 2.0000000000000000, 10.000000000000000,
7c62b943 9155 6.0000000000000000, -0.80000000000000004 },
f92ab29f 9156 { 0.19982795745135354, 2.0000000000000000, 10.000000000000000,
7c62b943 9157 6.0000000000000000, -0.69999999999999996 },
f92ab29f 9158 { 0.23681776864188067, 2.0000000000000000, 10.000000000000000,
7c62b943 9159 6.0000000000000000, -0.59999999999999998 },
f92ab29f 9160 { 0.28475624360398022, 2.0000000000000000, 10.000000000000000,
7c62b943 9161 6.0000000000000000, -0.50000000000000000 },
f92ab29f 9162 { 0.34827500743063144, 2.0000000000000000, 10.000000000000000,
7c62b943 9163 6.0000000000000000, -0.40000000000000002 },
f92ab29f 9164 { 0.43464829159684681, 2.0000000000000000, 10.000000000000000,
7c62b943 9165 6.0000000000000000, -0.30000000000000004 },
f92ab29f 9166 { 0.55576053438064787, 2.0000000000000000, 10.000000000000000,
7c62b943 9167 6.0000000000000000, -0.19999999999999996 },
f92ab29f 9168 { 0.73195020913445485, 2.0000000000000000, 10.000000000000000,
7c62b943 9169 6.0000000000000000, -0.099999999999999978 },
f92ab29f 9170 { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
7c62b943 9171 6.0000000000000000, 0.0000000000000000 },
f92ab29f 9172 { 1.4310223867822929, 2.0000000000000000, 10.000000000000000,
7c62b943 9173 6.0000000000000000, 0.10000000000000009 },
f92ab29f 9174 { 2.1742563399057540, 2.0000000000000000, 10.000000000000000,
7c62b943 9175 6.0000000000000000, 0.19999999999999996 },
f92ab29f 9176 { 3.5769231236256043, 2.0000000000000000, 10.000000000000000,
7c62b943 9177 6.0000000000000000, 0.30000000000000004 },
f92ab29f 9178 { 6.5620441134844363, 2.0000000000000000, 10.000000000000000,
7c62b943 9179 6.0000000000000000, 0.39999999999999991 },
f92ab29f 9180 { 14.063492063492063, 2.0000000000000000, 10.000000000000000,
7c62b943 9181 6.0000000000000000, 0.50000000000000000 },
f92ab29f 9182 { 38.085937500000036, 2.0000000000000000, 10.000000000000000,
7c62b943 9183 6.0000000000000000, 0.60000000000000009 },
f92ab29f 9184 { 150.92973632068282, 2.0000000000000000, 10.000000000000000,
7c62b943 9185 6.0000000000000000, 0.69999999999999996 },
f92ab29f 9186 { 1212.3015873015852, 2.0000000000000000, 10.000000000000000,
7c62b943 9187 6.0000000000000000, 0.80000000000000004 },
f92ab29f 9188 { 55107.142857142389, 2.0000000000000000, 10.000000000000000,
7c62b943
BK
9189 6.0000000000000000, 0.89999999999999991 },
9190};
9191
9192// Test function for a=2.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
9193template <typename Tp>
9194void test133()
9195{
9196 const Tp eps = std::numeric_limits<Tp>::epsilon();
9197 Tp max_abs_diff = -Tp(1);
9198 Tp max_abs_frac = -Tp(1);
9199 unsigned int num_datum = sizeof(data133)
9200 / sizeof(testcase_hyperg<double>);
9201 for (unsigned int i = 0; i < num_datum; ++i)
9202 {
9203 const Tp f = std::tr1::hyperg(Tp(data133[i].a), Tp(data133[i].b),
9204 Tp(data133[i].c), Tp(data133[i].x));
9205 const Tp f0 = data133[i].f0;
9206 const Tp diff = f - f0;
9207 if (std::abs(diff) > max_abs_diff)
9208 max_abs_diff = std::abs(diff);
9209 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9210 {
9211 const Tp frac = diff / f0;
9212 if (std::abs(frac) > max_abs_frac)
9213 max_abs_frac = std::abs(frac);
9214 }
9215 }
9216 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9217}
9218
9219// Test data for a=2.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
9220testcase_hyperg<double> data134[] = {
f92ab29f 9221 { 0.21658059714090588, 2.0000000000000000, 10.000000000000000,
7c62b943 9222 8.0000000000000000, -0.90000000000000002 },
f92ab29f 9223 { 0.24513539602702844, 2.0000000000000000, 10.000000000000000,
7c62b943 9224 8.0000000000000000, -0.80000000000000004 },
f92ab29f 9225 { 0.27967018274845046, 2.0000000000000000, 10.000000000000000,
7c62b943 9226 8.0000000000000000, -0.69999999999999996 },
f92ab29f 9227 { 0.32196044921874994, 2.0000000000000000, 10.000000000000000,
7c62b943 9228 8.0000000000000000, -0.59999999999999998 },
f92ab29f 9229 { 0.37448559670781900, 2.0000000000000000, 10.000000000000000,
7c62b943 9230 8.0000000000000000, -0.50000000000000000 },
f92ab29f 9231 { 0.44078856032208796, 2.0000000000000000, 10.000000000000000,
7c62b943 9232 8.0000000000000000, -0.40000000000000002 },
f92ab29f 9233 { 0.52606701446027815, 2.0000000000000000, 10.000000000000000,
7c62b943 9234 8.0000000000000000, -0.30000000000000004 },
f92ab29f 9235 { 0.63818158436214001, 2.0000000000000000, 10.000000000000000,
7c62b943 9236 8.0000000000000000, -0.19999999999999996 },
f92ab29f 9237 { 0.78944971882612769, 2.0000000000000000, 10.000000000000000,
7c62b943 9238 8.0000000000000000, -0.099999999999999978 },
f92ab29f 9239 { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
7c62b943 9240 8.0000000000000000, 0.0000000000000000 },
f92ab29f 9241 { 1.3044251384443430, 2.0000000000000000, 10.000000000000000,
7c62b943 9242 8.0000000000000000, 0.10000000000000009 },
f92ab29f 9243 { 1.7659505208333335, 2.0000000000000000, 10.000000000000000,
7c62b943 9244 8.0000000000000000, 0.19999999999999996 },
f92ab29f 9245 { 2.5093710953769270, 2.0000000000000000, 10.000000000000000,
7c62b943 9246 8.0000000000000000, 0.30000000000000004 },
f92ab29f 9247 { 3.8065843621399158, 2.0000000000000000, 10.000000000000000,
7c62b943 9248 8.0000000000000000, 0.39999999999999991 },
f92ab29f 9249 { 6.3333333333333313, 2.0000000000000000, 10.000000000000000,
7c62b943 9250 8.0000000000000000, 0.50000000000000000 },
f92ab29f 9251 { 12.109375000000004, 2.0000000000000000, 10.000000000000000,
7c62b943 9252 8.0000000000000000, 0.60000000000000009 },
f92ab29f 9253 { 29.115226337448540, 2.0000000000000000, 10.000000000000000,
7c62b943 9254 8.0000000000000000, 0.69999999999999996 },
f92ab29f 9255 { 108.33333333333330, 2.0000000000000000, 10.000000000000000,
7c62b943 9256 8.0000000000000000, 0.80000000000000004 },
f92ab29f 9257 { 1224.9999999999923, 2.0000000000000000, 10.000000000000000,
7c62b943
BK
9258 8.0000000000000000, 0.89999999999999991 },
9259};
9260
9261// Test function for a=2.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
9262template <typename Tp>
9263void test134()
9264{
9265 const Tp eps = std::numeric_limits<Tp>::epsilon();
9266 Tp max_abs_diff = -Tp(1);
9267 Tp max_abs_frac = -Tp(1);
9268 unsigned int num_datum = sizeof(data134)
9269 / sizeof(testcase_hyperg<double>);
9270 for (unsigned int i = 0; i < num_datum; ++i)
9271 {
9272 const Tp f = std::tr1::hyperg(Tp(data134[i].a), Tp(data134[i].b),
9273 Tp(data134[i].c), Tp(data134[i].x));
9274 const Tp f0 = data134[i].f0;
9275 const Tp diff = f - f0;
9276 if (std::abs(diff) > max_abs_diff)
9277 max_abs_diff = std::abs(diff);
9278 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9279 {
9280 const Tp frac = diff / f0;
9281 if (std::abs(frac) > max_abs_frac)
9282 max_abs_frac = std::abs(frac);
9283 }
9284 }
9285 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9286}
9287
9288// Test data for a=2.0000000000000000, b=10.000000000000000, c=10.000000000000000.
9289testcase_hyperg<double> data135[] = {
f92ab29f 9290 { 0.27700831024930750, 2.0000000000000000, 10.000000000000000,
7c62b943 9291 10.000000000000000, -0.90000000000000002 },
f92ab29f 9292 { 0.30864197530864196, 2.0000000000000000, 10.000000000000000,
7c62b943 9293 10.000000000000000, -0.80000000000000004 },
f92ab29f 9294 { 0.34602076124567477, 2.0000000000000000, 10.000000000000000,
7c62b943 9295 10.000000000000000, -0.69999999999999996 },
f92ab29f 9296 { 0.39062499999999994, 2.0000000000000000, 10.000000000000000,
7c62b943 9297 10.000000000000000, -0.59999999999999998 },
f92ab29f 9298 { 0.44444444444444442, 2.0000000000000000, 10.000000000000000,
7c62b943 9299 10.000000000000000, -0.50000000000000000 },
f92ab29f 9300 { 0.51020408163265307, 2.0000000000000000, 10.000000000000000,
7c62b943 9301 10.000000000000000, -0.40000000000000002 },
f92ab29f 9302 { 0.59171597633136097, 2.0000000000000000, 10.000000000000000,
7c62b943 9303 10.000000000000000, -0.30000000000000004 },
f92ab29f 9304 { 0.69444444444444453, 2.0000000000000000, 10.000000000000000,
7c62b943 9305 10.000000000000000, -0.19999999999999996 },
f92ab29f 9306 { 0.82644628099173545, 2.0000000000000000, 10.000000000000000,
7c62b943 9307 10.000000000000000, -0.099999999999999978 },
f92ab29f 9308 { 1.0000000000000000, 2.0000000000000000, 10.000000000000000,
7c62b943 9309 10.000000000000000, 0.0000000000000000 },
f92ab29f 9310 { 1.2345679012345681, 2.0000000000000000, 10.000000000000000,
7c62b943 9311 10.000000000000000, 0.10000000000000009 },
f92ab29f 9312 { 1.5624999999999998, 2.0000000000000000, 10.000000000000000,
7c62b943 9313 10.000000000000000, 0.19999999999999996 },
f92ab29f 9314 { 2.0408163265306127, 2.0000000000000000, 10.000000000000000,
7c62b943 9315 10.000000000000000, 0.30000000000000004 },
f92ab29f 9316 { 2.7777777777777768, 2.0000000000000000, 10.000000000000000,
7c62b943 9317 10.000000000000000, 0.39999999999999991 },
f92ab29f 9318 { 4.0000000000000000, 2.0000000000000000, 10.000000000000000,
7c62b943 9319 10.000000000000000, 0.50000000000000000 },
f92ab29f 9320 { 6.2500000000000036, 2.0000000000000000, 10.000000000000000,
7c62b943 9321 10.000000000000000, 0.60000000000000009 },
f92ab29f 9322 { 11.111111111111109, 2.0000000000000000, 10.000000000000000,
7c62b943 9323 10.000000000000000, 0.69999999999999996 },
f92ab29f 9324 { 25.000000000000007, 2.0000000000000000, 10.000000000000000,
7c62b943 9325 10.000000000000000, 0.80000000000000004 },
f92ab29f 9326 { 99.999999999999872, 2.0000000000000000, 10.000000000000000,
7c62b943
BK
9327 10.000000000000000, 0.89999999999999991 },
9328};
9329
9330// Test function for a=2.0000000000000000, b=10.000000000000000, c=10.000000000000000.
9331template <typename Tp>
9332void test135()
9333{
9334 const Tp eps = std::numeric_limits<Tp>::epsilon();
9335 Tp max_abs_diff = -Tp(1);
9336 Tp max_abs_frac = -Tp(1);
9337 unsigned int num_datum = sizeof(data135)
9338 / sizeof(testcase_hyperg<double>);
9339 for (unsigned int i = 0; i < num_datum; ++i)
9340 {
9341 const Tp f = std::tr1::hyperg(Tp(data135[i].a), Tp(data135[i].b),
9342 Tp(data135[i].c), Tp(data135[i].x));
9343 const Tp f0 = data135[i].f0;
9344 const Tp diff = f - f0;
9345 if (std::abs(diff) > max_abs_diff)
9346 max_abs_diff = std::abs(diff);
9347 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9348 {
9349 const Tp frac = diff / f0;
9350 if (std::abs(frac) > max_abs_frac)
9351 max_abs_frac = std::abs(frac);
9352 }
9353 }
9354 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9355}
9356
9357// Test data for a=2.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
9358testcase_hyperg<double> data136[] = {
f92ab29f 9359 { 2.6602838683283435e-06, 2.0000000000000000, 20.000000000000000,
7c62b943 9360 2.0000000000000000, -0.90000000000000002 },
f92ab29f 9361 { 7.8442223930072316e-06, 2.0000000000000000, 20.000000000000000,
7c62b943 9362 2.0000000000000000, -0.80000000000000004 },
f92ab29f 9363 { 2.4604898194634598e-05, 2.0000000000000000, 20.000000000000000,
7c62b943 9364 2.0000000000000000, -0.69999999999999996 },
f92ab29f 9365 { 8.2718061255302686e-05, 2.0000000000000000, 20.000000000000000,
7c62b943 9366 2.0000000000000000, -0.59999999999999998 },
f92ab29f 9367 { 0.00030072865982171723, 2.0000000000000000, 20.000000000000000,
7c62b943 9368 2.0000000000000000, -0.50000000000000000 },
f92ab29f 9369 { 0.0011951964277455193, 2.0000000000000000, 20.000000000000000,
7c62b943 9370 2.0000000000000000, -0.40000000000000002 },
f92ab29f 9371 { 0.0052617832469731814, 2.0000000000000000, 20.000000000000000,
7c62b943 9372 2.0000000000000000, -0.30000000000000004 },
f92ab29f 9373 { 0.026084053304588847, 2.0000000000000000, 20.000000000000000,
7c62b943 9374 2.0000000000000000, -0.19999999999999996 },
f92ab29f 9375 { 0.14864362802414346, 2.0000000000000000, 20.000000000000000,
7c62b943 9376 2.0000000000000000, -0.099999999999999978 },
f92ab29f 9377 { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
7c62b943 9378 2.0000000000000000, 0.0000000000000000 },
f92ab29f 9379 { 8.2252633399699757, 2.0000000000000000, 20.000000000000000,
7c62b943 9380 2.0000000000000000, 0.10000000000000009 },
f92ab29f 9381 { 86.736173798840269, 2.0000000000000000, 20.000000000000000,
7c62b943 9382 2.0000000000000000, 0.19999999999999996 },
f92ab29f 9383 { 1253.2542894196865, 2.0000000000000000, 20.000000000000000,
7c62b943 9384 2.0000000000000000, 0.30000000000000004 },
f92ab29f 9385 { 27351.112277912434, 2.0000000000000000, 20.000000000000000,
7c62b943 9386 2.0000000000000000, 0.39999999999999991 },
f92ab29f 9387 { 1048576.0000000000, 2.0000000000000000, 20.000000000000000,
7c62b943 9388 2.0000000000000000, 0.50000000000000000 },
f92ab29f 9389 { 90949470.177293226, 2.0000000000000000, 20.000000000000000,
7c62b943 9390 2.0000000000000000, 0.60000000000000009 },
f92ab29f 9391 { 28679719907.924358, 2.0000000000000000, 20.000000000000000,
7c62b943 9392 2.0000000000000000, 0.69999999999999996 },
f92ab29f 9393 { 95367431640624.906, 2.0000000000000000, 20.000000000000000,
7c62b943 9394 2.0000000000000000, 0.80000000000000004 },
f92ab29f 9395 { 9.9999999999998657e+19, 2.0000000000000000, 20.000000000000000,
7c62b943
BK
9396 2.0000000000000000, 0.89999999999999991 },
9397};
9398
9399// Test function for a=2.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
9400template <typename Tp>
9401void test136()
9402{
9403 const Tp eps = std::numeric_limits<Tp>::epsilon();
9404 Tp max_abs_diff = -Tp(1);
9405 Tp max_abs_frac = -Tp(1);
9406 unsigned int num_datum = sizeof(data136)
9407 / sizeof(testcase_hyperg<double>);
9408 for (unsigned int i = 0; i < num_datum; ++i)
9409 {
9410 const Tp f = std::tr1::hyperg(Tp(data136[i].a), Tp(data136[i].b),
9411 Tp(data136[i].c), Tp(data136[i].x));
9412 const Tp f0 = data136[i].f0;
9413 const Tp diff = f - f0;
9414 if (std::abs(diff) > max_abs_diff)
9415 max_abs_diff = std::abs(diff);
9416 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9417 {
9418 const Tp frac = diff / f0;
9419 if (std::abs(frac) > max_abs_frac)
9420 max_abs_frac = std::abs(frac);
9421 }
9422 }
9423 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
9424}
9425
9426// Test data for a=2.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
9427testcase_hyperg<double> data137[] = {
f92ab29f 9428 { 0.018828092583720951, 2.0000000000000000, 20.000000000000000,
7c62b943 9429 4.0000000000000000, -0.90000000000000002 },
f92ab29f 9430 { 0.023381944060455316, 2.0000000000000000, 20.000000000000000,
7c62b943 9431 4.0000000000000000, -0.80000000000000004 },
f92ab29f 9432 { 0.029789623984280793, 2.0000000000000000, 20.000000000000000,
7c62b943 9433 4.0000000000000000, -0.69999999999999996 },
f92ab29f 9434 { 0.039191021482500497, 2.0000000000000000, 20.000000000000000,
7c62b943 9435 4.0000000000000000, -0.59999999999999998 },
f92ab29f 9436 { 0.053727813036721514, 2.0000000000000000, 20.000000000000000,
7c62b943 9437 4.0000000000000000, -0.50000000000000000 },
f92ab29f 9438 { 0.077762010061669024, 2.0000000000000000, 20.000000000000000,
7c62b943 9439 4.0000000000000000, -0.40000000000000002 },
f92ab29f 9440 { 0.12110505620123302, 2.0000000000000000, 20.000000000000000,
7c62b943 9441 4.0000000000000000, -0.30000000000000004 },
f92ab29f 9442 { 0.20870149809080590, 2.0000000000000000, 20.000000000000000,
7c62b943 9443 4.0000000000000000, -0.19999999999999996 },
f92ab29f 9444 { 0.41429234328785769, 2.0000000000000000, 20.000000000000000,
7c62b943 9445 4.0000000000000000, -0.099999999999999978 },
f92ab29f 9446 { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
7c62b943 9447 4.0000000000000000, 0.0000000000000000 },
f92ab29f 9448 { 3.1308087404153113, 2.0000000000000000, 20.000000000000000,
7c62b943 9449 4.0000000000000000, 0.10000000000000009 },
f92ab29f 9450 { 13.586180626453050, 2.0000000000000000, 20.000000000000000,
7c62b943 9451 4.0000000000000000, 0.19999999999999996 },
f92ab29f 9452 { 87.117304082784415, 2.0000000000000000, 20.000000000000000,
7c62b943 9453 4.0000000000000000, 0.30000000000000004 },
f92ab29f 9454 { 889.26474381242826, 2.0000000000000000, 20.000000000000000,
7c62b943 9455 4.0000000000000000, 0.39999999999999991 },
f92ab29f 9456 { 16231.913312693494, 2.0000000000000000, 20.000000000000000,
7c62b943 9457 4.0000000000000000, 0.50000000000000000 },
f92ab29f 9458 { 653537.51168945129, 2.0000000000000000, 20.000000000000000,
7c62b943 9459 4.0000000000000000, 0.60000000000000009 },
f92ab29f 9460 { 87756230.793848589, 2.0000000000000000, 20.000000000000000,
7c62b943 9461 4.0000000000000000, 0.69999999999999996 },
f92ab29f 9462 { 101493977171.74945, 2.0000000000000000, 20.000000000000000,
7c62b943 9463 4.0000000000000000, 0.80000000000000004 },
f92ab29f 9464 { 21375960679556916., 2.0000000000000000, 20.000000000000000,
7c62b943
BK
9465 4.0000000000000000, 0.89999999999999991 },
9466};
9467
9468// Test function for a=2.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
9469template <typename Tp>
9470void test137()
9471{
9472 const Tp eps = std::numeric_limits<Tp>::epsilon();
9473 Tp max_abs_diff = -Tp(1);
9474 Tp max_abs_frac = -Tp(1);
9475 unsigned int num_datum = sizeof(data137)
9476 / sizeof(testcase_hyperg<double>);
9477 for (unsigned int i = 0; i < num_datum; ++i)
9478 {
9479 const Tp f = std::tr1::hyperg(Tp(data137[i].a), Tp(data137[i].b),
9480 Tp(data137[i].c), Tp(data137[i].x));
9481 const Tp f0 = data137[i].f0;
9482 const Tp diff = f - f0;
9483 if (std::abs(diff) > max_abs_diff)
9484 max_abs_diff = std::abs(diff);
9485 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9486 {
9487 const Tp frac = diff / f0;
9488 if (std::abs(frac) > max_abs_frac)
9489 max_abs_frac = std::abs(frac);
9490 }
9491 }
9492 VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
9493}
9494
9495// Test data for a=2.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
9496testcase_hyperg<double> data138[] = {
f92ab29f 9497 { 0.049200410661854252, 2.0000000000000000, 20.000000000000000,
7c62b943 9498 6.0000000000000000, -0.90000000000000002 },
f92ab29f 9499 { 0.059460876757152226, 2.0000000000000000, 20.000000000000000,
7c62b943 9500 6.0000000000000000, -0.80000000000000004 },
f92ab29f 9501 { 0.073244762686653350, 2.0000000000000000, 20.000000000000000,
7c62b943 9502 6.0000000000000000, -0.69999999999999996 },
f92ab29f 9503 { 0.092334626017932922, 2.0000000000000000, 20.000000000000000,
7c62b943 9504 6.0000000000000000, -0.59999999999999998 },
f92ab29f 9505 { 0.11976760350696837, 2.0000000000000000, 20.000000000000000,
7c62b943 9506 6.0000000000000000, -0.50000000000000000 },
f92ab29f 9507 { 0.16102414609169383, 2.0000000000000000, 20.000000000000000,
7c62b943 9508 6.0000000000000000, -0.40000000000000002 },
f92ab29f 9509 { 0.22670456785796222, 2.0000000000000000, 20.000000000000000,
7c62b943 9510 6.0000000000000000, -0.30000000000000004 },
f92ab29f 9511 { 0.33912903252727361, 2.0000000000000000, 20.000000000000000,
7c62b943 9512 6.0000000000000000, -0.19999999999999996 },
f92ab29f 9513 { 0.55049794600858060, 2.0000000000000000, 20.000000000000000,
7c62b943 9514 6.0000000000000000, -0.099999999999999978 },
f92ab29f 9515 { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
7c62b943 9516 6.0000000000000000, 0.0000000000000000 },
f92ab29f 9517 { 2.1254722872032232, 2.0000000000000000, 20.000000000000000,
7c62b943 9518 6.0000000000000000, 0.10000000000000009 },
f92ab29f 9519 { 5.6261213886736172, 2.0000000000000000, 20.000000000000000,
7c62b943 9520 6.0000000000000000, 0.19999999999999996 },
f92ab29f 9521 { 20.137315891130996, 2.0000000000000000, 20.000000000000000,
7c62b943 9522 6.0000000000000000, 0.30000000000000004 },
f92ab29f 9523 { 108.04381584643853, 2.0000000000000000, 20.000000000000000,
7c62b943 9524 6.0000000000000000, 0.39999999999999991 },
f92ab29f 9525 { 992.41692466460245, 2.0000000000000000, 20.000000000000000,
7c62b943 9526 6.0000000000000000, 0.50000000000000000 },
f92ab29f 9527 { 19055.363816004465, 2.0000000000000000, 20.000000000000000,
7c62b943 9528 6.0000000000000000, 0.60000000000000009 },
f92ab29f 9529 { 1105471.9504312086, 2.0000000000000000, 20.000000000000000,
7c62b943 9530 6.0000000000000000, 0.69999999999999996 },
f92ab29f 9531 { 448521363.90608919, 2.0000000000000000, 20.000000000000000,
7c62b943 9532 6.0000000000000000, 0.80000000000000004 },
f92ab29f 9533 { 19078917293639.004, 2.0000000000000000, 20.000000000000000,
7c62b943
BK
9534 6.0000000000000000, 0.89999999999999991 },
9535};
9536
9537// Test function for a=2.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
9538template <typename Tp>
9539void test138()
9540{
9541 const Tp eps = std::numeric_limits<Tp>::epsilon();
9542 Tp max_abs_diff = -Tp(1);
9543 Tp max_abs_frac = -Tp(1);
9544 unsigned int num_datum = sizeof(data138)
9545 / sizeof(testcase_hyperg<double>);
9546 for (unsigned int i = 0; i < num_datum; ++i)
9547 {
9548 const Tp f = std::tr1::hyperg(Tp(data138[i].a), Tp(data138[i].b),
9549 Tp(data138[i].c), Tp(data138[i].x));
9550 const Tp f0 = data138[i].f0;
9551 const Tp diff = f - f0;
9552 if (std::abs(diff) > max_abs_diff)
9553 max_abs_diff = std::abs(diff);
9554 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9555 {
9556 const Tp frac = diff / f0;
9557 if (std::abs(frac) > max_abs_frac)
9558 max_abs_frac = std::abs(frac);
9559 }
9560 }
9561 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
9562}
9563
9564// Test data for a=2.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
9565testcase_hyperg<double> data139[] = {
f92ab29f 9566 { 0.083753547015334745, 2.0000000000000000, 20.000000000000000,
7c62b943 9567 8.0000000000000000, -0.90000000000000002 },
f92ab29f 9568 { 0.099238444687035701, 2.0000000000000000, 20.000000000000000,
7c62b943 9569 8.0000000000000000, -0.80000000000000004 },
f92ab29f 9570 { 0.11938294012867758, 2.0000000000000000, 20.000000000000000,
7c62b943 9571 8.0000000000000000, -0.69999999999999996 },
f92ab29f 9572 { 0.14622683905023326, 2.0000000000000000, 20.000000000000000,
7c62b943 9573 8.0000000000000000, -0.59999999999999998 },
f92ab29f 9574 { 0.18303556733713025, 2.0000000000000000, 20.000000000000000,
7c62b943 9575 8.0000000000000000, -0.50000000000000000 },
f92ab29f 9576 { 0.23527764069382409, 2.0000000000000000, 20.000000000000000,
7c62b943 9577 8.0000000000000000, -0.40000000000000002 },
f92ab29f 9578 { 0.31261681740827085, 2.0000000000000000, 20.000000000000000,
7c62b943 9579 8.0000000000000000, -0.30000000000000004 },
f92ab29f 9580 { 0.43327581880538862, 2.0000000000000000, 20.000000000000000,
7c62b943 9581 8.0000000000000000, -0.19999999999999996 },
f92ab29f 9582 { 0.63445840637296658, 2.0000000000000000, 20.000000000000000,
7c62b943 9583 8.0000000000000000, -0.099999999999999978 },
f92ab29f 9584 { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
7c62b943 9585 8.0000000000000000, 0.0000000000000000 },
f92ab29f 9586 { 1.7438842395813297, 2.0000000000000000, 20.000000000000000,
7c62b943 9587 8.0000000000000000, 0.10000000000000009 },
f92ab29f 9588 { 3.5070840938209269, 2.0000000000000000, 20.000000000000000,
7c62b943 9589 8.0000000000000000, 0.19999999999999996 },
f92ab29f 9590 { 8.6573372006089713, 2.0000000000000000, 20.000000000000000,
7c62b943 9591 8.0000000000000000, 0.30000000000000004 },
f92ab29f 9592 { 28.779342118408906, 2.0000000000000000, 20.000000000000000,
7c62b943 9593 8.0000000000000000, 0.39999999999999991 },
f92ab29f 9594 { 147.50178613955714, 2.0000000000000000, 20.000000000000000,
7c62b943 9595 8.0000000000000000, 0.50000000000000000 },
f92ab29f 9596 { 1427.1686016136398, 2.0000000000000000, 20.000000000000000,
7c62b943 9597 8.0000000000000000, 0.60000000000000009 },
f92ab29f 9598 { 36780.643714655642, 2.0000000000000000, 20.000000000000000,
7c62b943 9599 8.0000000000000000, 0.69999999999999996 },
f92ab29f 9600 { 5313869.6058585485, 2.0000000000000000, 20.000000000000000,
7c62b943 9601 8.0000000000000000, 0.80000000000000004 },
f92ab29f 9602 { 46057280607.381966, 2.0000000000000000, 20.000000000000000,
7c62b943
BK
9603 8.0000000000000000, 0.89999999999999991 },
9604};
9605
9606// Test function for a=2.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
9607template <typename Tp>
9608void test139()
9609{
9610 const Tp eps = std::numeric_limits<Tp>::epsilon();
9611 Tp max_abs_diff = -Tp(1);
9612 Tp max_abs_frac = -Tp(1);
9613 unsigned int num_datum = sizeof(data139)
9614 / sizeof(testcase_hyperg<double>);
9615 for (unsigned int i = 0; i < num_datum; ++i)
9616 {
9617 const Tp f = std::tr1::hyperg(Tp(data139[i].a), Tp(data139[i].b),
9618 Tp(data139[i].c), Tp(data139[i].x));
9619 const Tp f0 = data139[i].f0;
9620 const Tp diff = f - f0;
9621 if (std::abs(diff) > max_abs_diff)
9622 max_abs_diff = std::abs(diff);
9623 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9624 {
9625 const Tp frac = diff / f0;
9626 if (std::abs(frac) > max_abs_frac)
9627 max_abs_frac = std::abs(frac);
9628 }
9629 }
9630 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9631}
9632
9633// Test data for a=2.0000000000000000, b=20.000000000000000, c=10.000000000000000.
9634testcase_hyperg<double> data140[] = {
f92ab29f 9635 { 0.11920045035073683, 2.0000000000000000, 20.000000000000000,
7c62b943 9636 10.000000000000000, -0.90000000000000002 },
f92ab29f 9637 { 0.13907946814302774, 2.0000000000000000, 20.000000000000000,
7c62b943 9638 10.000000000000000, -0.80000000000000004 },
f92ab29f 9639 { 0.16431439792559688, 2.0000000000000000, 20.000000000000000,
7c62b943 9640 10.000000000000000, -0.69999999999999996 },
f92ab29f 9641 { 0.19698796016987008, 2.0000000000000000, 20.000000000000000,
7c62b943 9642 10.000000000000000, -0.59999999999999998 },
f92ab29f 9643 { 0.24028510928790570, 2.0000000000000000, 20.000000000000000,
7c62b943 9644 10.000000000000000, -0.50000000000000000 },
f92ab29f 9645 { 0.29926031296483119, 2.0000000000000000, 20.000000000000000,
7c62b943 9646 10.000000000000000, -0.40000000000000002 },
f92ab29f 9647 { 0.38229327814229169, 2.0000000000000000, 20.000000000000000,
7c62b943 9648 10.000000000000000, -0.30000000000000004 },
f92ab29f 9649 { 0.50402047283093110, 2.0000000000000000, 20.000000000000000,
7c62b943 9650 10.000000000000000, -0.19999999999999996 },
f92ab29f 9651 { 0.69167261179586503, 2.0000000000000000, 20.000000000000000,
7c62b943 9652 10.000000000000000, -0.099999999999999978 },
f92ab29f 9653 { 1.0000000000000000, 2.0000000000000000, 20.000000000000000,
7c62b943 9654 10.000000000000000, 0.0000000000000000 },
f92ab29f 9655 { 1.5503152253394308, 2.0000000000000000, 20.000000000000000,
7c62b943 9656 10.000000000000000, 0.10000000000000009 },
f92ab29f 9657 { 2.6469548193635797, 2.0000000000000000, 20.000000000000000,
7c62b943 9658 10.000000000000000, 0.19999999999999996 },
f92ab29f 9659 { 5.1882631330566813, 2.0000000000000000, 20.000000000000000,
7c62b943 9660 10.000000000000000, 0.30000000000000004 },
f92ab29f 9661 { 12.476792759124516, 2.0000000000000000, 20.000000000000000,
7c62b943 9662 10.000000000000000, 0.39999999999999991 },
f92ab29f 9663 { 41.026391565091259, 2.0000000000000000, 20.000000000000000,
7c62b943 9664 10.000000000000000, 0.50000000000000000 },
f92ab29f 9665 { 220.92584715988204, 2.0000000000000000, 20.000000000000000,
7c62b943 9666 10.000000000000000, 0.60000000000000009 },
f92ab29f 9667 { 2677.0834450236207, 2.0000000000000000, 20.000000000000000,
7c62b943 9668 10.000000000000000, 0.69999999999999996 },
f92ab29f 9669 { 141774.31260689779, 2.0000000000000000, 20.000000000000000,
7c62b943 9670 10.000000000000000, 0.80000000000000004 },
f92ab29f 9671 { 254267148.83196995, 2.0000000000000000, 20.000000000000000,
7c62b943
BK
9672 10.000000000000000, 0.89999999999999991 },
9673};
9674
9675// Test function for a=2.0000000000000000, b=20.000000000000000, c=10.000000000000000.
9676template <typename Tp>
9677void test140()
9678{
9679 const Tp eps = std::numeric_limits<Tp>::epsilon();
9680 Tp max_abs_diff = -Tp(1);
9681 Tp max_abs_frac = -Tp(1);
9682 unsigned int num_datum = sizeof(data140)
9683 / sizeof(testcase_hyperg<double>);
9684 for (unsigned int i = 0; i < num_datum; ++i)
9685 {
9686 const Tp f = std::tr1::hyperg(Tp(data140[i].a), Tp(data140[i].b),
9687 Tp(data140[i].c), Tp(data140[i].x));
9688 const Tp f0 = data140[i].f0;
9689 const Tp diff = f - f0;
9690 if (std::abs(diff) > max_abs_diff)
9691 max_abs_diff = std::abs(diff);
9692 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9693 {
9694 const Tp frac = diff / f0;
9695 if (std::abs(frac) > max_abs_frac)
9696 max_abs_frac = std::abs(frac);
9697 }
9698 }
9699 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9700}
9701
9702// Test data for a=5.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
9703testcase_hyperg<double> data141[] = {
f92ab29f 9704 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9705 2.0000000000000000, -0.90000000000000002 },
f92ab29f 9706 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9707 2.0000000000000000, -0.80000000000000004 },
f92ab29f 9708 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9709 2.0000000000000000, -0.69999999999999996 },
f92ab29f 9710 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9711 2.0000000000000000, -0.59999999999999998 },
f92ab29f 9712 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9713 2.0000000000000000, -0.50000000000000000 },
f92ab29f 9714 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9715 2.0000000000000000, -0.40000000000000002 },
f92ab29f 9716 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9717 2.0000000000000000, -0.30000000000000004 },
f92ab29f 9718 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9719 2.0000000000000000, -0.19999999999999996 },
f92ab29f 9720 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9721 2.0000000000000000, -0.099999999999999978 },
f92ab29f 9722 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9723 2.0000000000000000, 0.0000000000000000 },
f92ab29f 9724 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9725 2.0000000000000000, 0.10000000000000009 },
f92ab29f 9726 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9727 2.0000000000000000, 0.19999999999999996 },
f92ab29f 9728 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9729 2.0000000000000000, 0.30000000000000004 },
f92ab29f 9730 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9731 2.0000000000000000, 0.39999999999999991 },
f92ab29f 9732 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9733 2.0000000000000000, 0.50000000000000000 },
f92ab29f 9734 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9735 2.0000000000000000, 0.60000000000000009 },
f92ab29f 9736 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9737 2.0000000000000000, 0.69999999999999996 },
f92ab29f 9738 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9739 2.0000000000000000, 0.80000000000000004 },
f92ab29f 9740 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943
BK
9741 2.0000000000000000, 0.89999999999999991 },
9742};
9743
9744// Test function for a=5.0000000000000000, b=0.0000000000000000, c=2.0000000000000000.
9745template <typename Tp>
9746void test141()
9747{
9748 const Tp eps = std::numeric_limits<Tp>::epsilon();
9749 Tp max_abs_diff = -Tp(1);
9750 Tp max_abs_frac = -Tp(1);
9751 unsigned int num_datum = sizeof(data141)
9752 / sizeof(testcase_hyperg<double>);
9753 for (unsigned int i = 0; i < num_datum; ++i)
9754 {
9755 const Tp f = std::tr1::hyperg(Tp(data141[i].a), Tp(data141[i].b),
9756 Tp(data141[i].c), Tp(data141[i].x));
9757 const Tp f0 = data141[i].f0;
9758 const Tp diff = f - f0;
9759 if (std::abs(diff) > max_abs_diff)
9760 max_abs_diff = std::abs(diff);
9761 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9762 {
9763 const Tp frac = diff / f0;
9764 if (std::abs(frac) > max_abs_frac)
9765 max_abs_frac = std::abs(frac);
9766 }
9767 }
9768 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9769}
9770
9771// Test data for a=5.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
9772testcase_hyperg<double> data142[] = {
f92ab29f 9773 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9774 4.0000000000000000, -0.90000000000000002 },
f92ab29f 9775 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9776 4.0000000000000000, -0.80000000000000004 },
f92ab29f 9777 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9778 4.0000000000000000, -0.69999999999999996 },
f92ab29f 9779 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9780 4.0000000000000000, -0.59999999999999998 },
f92ab29f 9781 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9782 4.0000000000000000, -0.50000000000000000 },
f92ab29f 9783 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9784 4.0000000000000000, -0.40000000000000002 },
f92ab29f 9785 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9786 4.0000000000000000, -0.30000000000000004 },
f92ab29f 9787 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9788 4.0000000000000000, -0.19999999999999996 },
f92ab29f 9789 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9790 4.0000000000000000, -0.099999999999999978 },
f92ab29f 9791 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9792 4.0000000000000000, 0.0000000000000000 },
f92ab29f 9793 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9794 4.0000000000000000, 0.10000000000000009 },
f92ab29f 9795 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9796 4.0000000000000000, 0.19999999999999996 },
f92ab29f 9797 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9798 4.0000000000000000, 0.30000000000000004 },
f92ab29f 9799 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9800 4.0000000000000000, 0.39999999999999991 },
f92ab29f 9801 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9802 4.0000000000000000, 0.50000000000000000 },
f92ab29f 9803 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9804 4.0000000000000000, 0.60000000000000009 },
f92ab29f 9805 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9806 4.0000000000000000, 0.69999999999999996 },
f92ab29f 9807 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9808 4.0000000000000000, 0.80000000000000004 },
f92ab29f 9809 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943
BK
9810 4.0000000000000000, 0.89999999999999991 },
9811};
9812
9813// Test function for a=5.0000000000000000, b=0.0000000000000000, c=4.0000000000000000.
9814template <typename Tp>
9815void test142()
9816{
9817 const Tp eps = std::numeric_limits<Tp>::epsilon();
9818 Tp max_abs_diff = -Tp(1);
9819 Tp max_abs_frac = -Tp(1);
9820 unsigned int num_datum = sizeof(data142)
9821 / sizeof(testcase_hyperg<double>);
9822 for (unsigned int i = 0; i < num_datum; ++i)
9823 {
9824 const Tp f = std::tr1::hyperg(Tp(data142[i].a), Tp(data142[i].b),
9825 Tp(data142[i].c), Tp(data142[i].x));
9826 const Tp f0 = data142[i].f0;
9827 const Tp diff = f - f0;
9828 if (std::abs(diff) > max_abs_diff)
9829 max_abs_diff = std::abs(diff);
9830 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9831 {
9832 const Tp frac = diff / f0;
9833 if (std::abs(frac) > max_abs_frac)
9834 max_abs_frac = std::abs(frac);
9835 }
9836 }
9837 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9838}
9839
9840// Test data for a=5.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
9841testcase_hyperg<double> data143[] = {
f92ab29f 9842 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9843 6.0000000000000000, -0.90000000000000002 },
f92ab29f 9844 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9845 6.0000000000000000, -0.80000000000000004 },
f92ab29f 9846 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9847 6.0000000000000000, -0.69999999999999996 },
f92ab29f 9848 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9849 6.0000000000000000, -0.59999999999999998 },
f92ab29f 9850 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9851 6.0000000000000000, -0.50000000000000000 },
f92ab29f 9852 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9853 6.0000000000000000, -0.40000000000000002 },
f92ab29f 9854 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9855 6.0000000000000000, -0.30000000000000004 },
f92ab29f 9856 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9857 6.0000000000000000, -0.19999999999999996 },
f92ab29f 9858 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9859 6.0000000000000000, -0.099999999999999978 },
f92ab29f 9860 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9861 6.0000000000000000, 0.0000000000000000 },
f92ab29f 9862 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9863 6.0000000000000000, 0.10000000000000009 },
f92ab29f 9864 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9865 6.0000000000000000, 0.19999999999999996 },
f92ab29f 9866 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9867 6.0000000000000000, 0.30000000000000004 },
f92ab29f 9868 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9869 6.0000000000000000, 0.39999999999999991 },
f92ab29f 9870 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9871 6.0000000000000000, 0.50000000000000000 },
f92ab29f 9872 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9873 6.0000000000000000, 0.60000000000000009 },
f92ab29f 9874 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9875 6.0000000000000000, 0.69999999999999996 },
f92ab29f 9876 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9877 6.0000000000000000, 0.80000000000000004 },
f92ab29f 9878 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943
BK
9879 6.0000000000000000, 0.89999999999999991 },
9880};
9881
9882// Test function for a=5.0000000000000000, b=0.0000000000000000, c=6.0000000000000000.
9883template <typename Tp>
9884void test143()
9885{
9886 const Tp eps = std::numeric_limits<Tp>::epsilon();
9887 Tp max_abs_diff = -Tp(1);
9888 Tp max_abs_frac = -Tp(1);
9889 unsigned int num_datum = sizeof(data143)
9890 / sizeof(testcase_hyperg<double>);
9891 for (unsigned int i = 0; i < num_datum; ++i)
9892 {
9893 const Tp f = std::tr1::hyperg(Tp(data143[i].a), Tp(data143[i].b),
9894 Tp(data143[i].c), Tp(data143[i].x));
9895 const Tp f0 = data143[i].f0;
9896 const Tp diff = f - f0;
9897 if (std::abs(diff) > max_abs_diff)
9898 max_abs_diff = std::abs(diff);
9899 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9900 {
9901 const Tp frac = diff / f0;
9902 if (std::abs(frac) > max_abs_frac)
9903 max_abs_frac = std::abs(frac);
9904 }
9905 }
9906 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9907}
9908
9909// Test data for a=5.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
9910testcase_hyperg<double> data144[] = {
f92ab29f 9911 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9912 8.0000000000000000, -0.90000000000000002 },
f92ab29f 9913 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9914 8.0000000000000000, -0.80000000000000004 },
f92ab29f 9915 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9916 8.0000000000000000, -0.69999999999999996 },
f92ab29f 9917 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9918 8.0000000000000000, -0.59999999999999998 },
f92ab29f 9919 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9920 8.0000000000000000, -0.50000000000000000 },
f92ab29f 9921 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9922 8.0000000000000000, -0.40000000000000002 },
f92ab29f 9923 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9924 8.0000000000000000, -0.30000000000000004 },
f92ab29f 9925 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9926 8.0000000000000000, -0.19999999999999996 },
f92ab29f 9927 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9928 8.0000000000000000, -0.099999999999999978 },
f92ab29f 9929 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9930 8.0000000000000000, 0.0000000000000000 },
f92ab29f 9931 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9932 8.0000000000000000, 0.10000000000000009 },
f92ab29f 9933 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9934 8.0000000000000000, 0.19999999999999996 },
f92ab29f 9935 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9936 8.0000000000000000, 0.30000000000000004 },
f92ab29f 9937 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9938 8.0000000000000000, 0.39999999999999991 },
f92ab29f 9939 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9940 8.0000000000000000, 0.50000000000000000 },
f92ab29f 9941 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9942 8.0000000000000000, 0.60000000000000009 },
f92ab29f 9943 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9944 8.0000000000000000, 0.69999999999999996 },
f92ab29f 9945 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9946 8.0000000000000000, 0.80000000000000004 },
f92ab29f 9947 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943
BK
9948 8.0000000000000000, 0.89999999999999991 },
9949};
9950
9951// Test function for a=5.0000000000000000, b=0.0000000000000000, c=8.0000000000000000.
9952template <typename Tp>
9953void test144()
9954{
9955 const Tp eps = std::numeric_limits<Tp>::epsilon();
9956 Tp max_abs_diff = -Tp(1);
9957 Tp max_abs_frac = -Tp(1);
9958 unsigned int num_datum = sizeof(data144)
9959 / sizeof(testcase_hyperg<double>);
9960 for (unsigned int i = 0; i < num_datum; ++i)
9961 {
9962 const Tp f = std::tr1::hyperg(Tp(data144[i].a), Tp(data144[i].b),
9963 Tp(data144[i].c), Tp(data144[i].x));
9964 const Tp f0 = data144[i].f0;
9965 const Tp diff = f - f0;
9966 if (std::abs(diff) > max_abs_diff)
9967 max_abs_diff = std::abs(diff);
9968 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
9969 {
9970 const Tp frac = diff / f0;
9971 if (std::abs(frac) > max_abs_frac)
9972 max_abs_frac = std::abs(frac);
9973 }
9974 }
9975 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
9976}
9977
9978// Test data for a=5.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
9979testcase_hyperg<double> data145[] = {
f92ab29f 9980 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9981 10.000000000000000, -0.90000000000000002 },
f92ab29f 9982 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9983 10.000000000000000, -0.80000000000000004 },
f92ab29f 9984 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9985 10.000000000000000, -0.69999999999999996 },
f92ab29f 9986 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9987 10.000000000000000, -0.59999999999999998 },
f92ab29f 9988 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9989 10.000000000000000, -0.50000000000000000 },
f92ab29f 9990 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9991 10.000000000000000, -0.40000000000000002 },
f92ab29f 9992 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9993 10.000000000000000, -0.30000000000000004 },
f92ab29f 9994 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9995 10.000000000000000, -0.19999999999999996 },
f92ab29f 9996 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9997 10.000000000000000, -0.099999999999999978 },
f92ab29f 9998 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 9999 10.000000000000000, 0.0000000000000000 },
f92ab29f 10000 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 10001 10.000000000000000, 0.10000000000000009 },
f92ab29f 10002 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 10003 10.000000000000000, 0.19999999999999996 },
f92ab29f 10004 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 10005 10.000000000000000, 0.30000000000000004 },
f92ab29f 10006 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 10007 10.000000000000000, 0.39999999999999991 },
f92ab29f 10008 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 10009 10.000000000000000, 0.50000000000000000 },
f92ab29f 10010 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 10011 10.000000000000000, 0.60000000000000009 },
f92ab29f 10012 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 10013 10.000000000000000, 0.69999999999999996 },
f92ab29f 10014 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943 10015 10.000000000000000, 0.80000000000000004 },
f92ab29f 10016 { 1.0000000000000000, 5.0000000000000000, 0.0000000000000000,
7c62b943
BK
10017 10.000000000000000, 0.89999999999999991 },
10018};
10019
10020// Test function for a=5.0000000000000000, b=0.0000000000000000, c=10.000000000000000.
10021template <typename Tp>
10022void test145()
10023{
10024 const Tp eps = std::numeric_limits<Tp>::epsilon();
10025 Tp max_abs_diff = -Tp(1);
10026 Tp max_abs_frac = -Tp(1);
10027 unsigned int num_datum = sizeof(data145)
10028 / sizeof(testcase_hyperg<double>);
10029 for (unsigned int i = 0; i < num_datum; ++i)
10030 {
10031 const Tp f = std::tr1::hyperg(Tp(data145[i].a), Tp(data145[i].b),
10032 Tp(data145[i].c), Tp(data145[i].x));
10033 const Tp f0 = data145[i].f0;
10034 const Tp diff = f - f0;
10035 if (std::abs(diff) > max_abs_diff)
10036 max_abs_diff = std::abs(diff);
10037 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10038 {
10039 const Tp frac = diff / f0;
10040 if (std::abs(frac) > max_abs_frac)
10041 max_abs_frac = std::abs(frac);
10042 }
10043 }
10044 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10045}
10046
10047// Test data for a=5.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
10048testcase_hyperg<double> data146[] = {
f92ab29f 10049 { 0.52275983209457511, 5.0000000000000000, 0.50000000000000000,
7c62b943 10050 2.0000000000000000, -0.90000000000000002 },
f92ab29f 10051 { 0.54700336898142965, 5.0000000000000000, 0.50000000000000000,
7c62b943 10052 2.0000000000000000, -0.80000000000000004 },
f92ab29f 10053 { 0.57468955512601971, 5.0000000000000000, 0.50000000000000000,
7c62b943 10054 2.0000000000000000, -0.69999999999999996 },
f92ab29f 10055 { 0.60665490543315015, 5.0000000000000000, 0.50000000000000000,
7c62b943 10056 2.0000000000000000, -0.59999999999999998 },
f92ab29f 10057 { 0.64403057859056123, 5.0000000000000000, 0.50000000000000000,
7c62b943 10058 2.0000000000000000, -0.50000000000000000 },
f92ab29f 10059 { 0.68838183648623719, 5.0000000000000000, 0.50000000000000000,
7c62b943 10060 2.0000000000000000, -0.40000000000000002 },
f92ab29f 10061 { 0.74193265039311085, 5.0000000000000000, 0.50000000000000000,
7c62b943 10062 2.0000000000000000, -0.30000000000000004 },
f92ab29f 10063 { 0.80794095908995300, 5.0000000000000000, 0.50000000000000000,
7c62b943 10064 2.0000000000000000, -0.19999999999999996 },
f92ab29f 10065 { 0.89135275749639320, 5.0000000000000000, 0.50000000000000000,
7c62b943 10066 2.0000000000000000, -0.099999999999999978 },
f92ab29f 10067 { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
7c62b943 10068 2.0000000000000000, 0.0000000000000000 },
f92ab29f 10069 { 1.1469266219310688, 5.0000000000000000, 0.50000000000000000,
7c62b943 10070 2.0000000000000000, 0.10000000000000009 },
f92ab29f 10071 { 1.3552340708357489, 5.0000000000000000, 0.50000000000000000,
7c62b943 10072 2.0000000000000000, 0.19999999999999996 },
f92ab29f 10073 { 1.6690840478838305, 5.0000000000000000, 0.50000000000000000,
7c62b943 10074 2.0000000000000000, 0.30000000000000004 },
f92ab29f 10075 { 2.1815415453174483, 5.0000000000000000, 0.50000000000000000,
7c62b943 10076 2.0000000000000000, 0.39999999999999991 },
f92ab29f 10077 { 3.1156892546032235, 5.0000000000000000, 0.50000000000000000,
7c62b943 10078 2.0000000000000000, 0.50000000000000000 },
f92ab29f 10079 { 5.1109077417760416, 5.0000000000000000, 0.50000000000000000,
7c62b943 10080 2.0000000000000000, 0.60000000000000009 },
f92ab29f 10081 { 10.560352936466296, 5.0000000000000000, 0.50000000000000000,
7c62b943 10082 2.0000000000000000, 0.69999999999999996 },
f92ab29f 10083 { 33.541019662496815, 5.0000000000000000, 0.50000000000000000,
7c62b943 10084 2.0000000000000000, 0.80000000000000004 },
f92ab29f 10085 { 300.66343065819501, 5.0000000000000000, 0.50000000000000000,
7c62b943
BK
10086 2.0000000000000000, 0.89999999999999991 },
10087};
10088
10089// Test function for a=5.0000000000000000, b=0.50000000000000000, c=2.0000000000000000.
10090template <typename Tp>
10091void test146()
10092{
10093 const Tp eps = std::numeric_limits<Tp>::epsilon();
10094 Tp max_abs_diff = -Tp(1);
10095 Tp max_abs_frac = -Tp(1);
10096 unsigned int num_datum = sizeof(data146)
10097 / sizeof(testcase_hyperg<double>);
10098 for (unsigned int i = 0; i < num_datum; ++i)
10099 {
10100 const Tp f = std::tr1::hyperg(Tp(data146[i].a), Tp(data146[i].b),
10101 Tp(data146[i].c), Tp(data146[i].x));
10102 const Tp f0 = data146[i].f0;
10103 const Tp diff = f - f0;
10104 if (std::abs(diff) > max_abs_diff)
10105 max_abs_diff = std::abs(diff);
10106 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10107 {
10108 const Tp frac = diff / f0;
10109 if (std::abs(frac) > max_abs_frac)
10110 max_abs_frac = std::abs(frac);
10111 }
10112 }
10113 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10114}
10115
10116// Test data for a=5.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
10117testcase_hyperg<double> data147[] = {
f92ab29f 10118 { 0.68252041951139264, 5.0000000000000000, 0.50000000000000000,
7c62b943 10119 4.0000000000000000, -0.90000000000000002 },
f92ab29f 10120 { 0.70394732624993395, 5.0000000000000000, 0.50000000000000000,
7c62b943 10121 4.0000000000000000, -0.80000000000000004 },
f92ab29f 10122 { 0.72748884971552041, 5.0000000000000000, 0.50000000000000000,
7c62b943 10123 4.0000000000000000, -0.69999999999999996 },
f92ab29f 10124 { 0.75351147371199689, 5.0000000000000000, 0.50000000000000000,
7c62b943 10125 4.0000000000000000, -0.59999999999999998 },
f92ab29f 10126 { 0.78247589005573748, 5.0000000000000000, 0.50000000000000000,
7c62b943 10127 4.0000000000000000, -0.50000000000000000 },
f92ab29f 10128 { 0.81497017420249818, 5.0000000000000000, 0.50000000000000000,
7c62b943 10129 4.0000000000000000, -0.40000000000000002 },
f92ab29f 10130 { 0.85175826875009564, 5.0000000000000000, 0.50000000000000000,
7c62b943 10131 4.0000000000000000, -0.30000000000000004 },
f92ab29f 10132 { 0.89385278481745867, 5.0000000000000000, 0.50000000000000000,
7c62b943 10133 4.0000000000000000, -0.19999999999999996 },
f92ab29f 10134 { 0.94262778709507411, 5.0000000000000000, 0.50000000000000000,
7c62b943 10135 4.0000000000000000, -0.099999999999999978 },
f92ab29f 10136 { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
7c62b943 10137 4.0000000000000000, 0.0000000000000000 },
f92ab29f 10138 { 1.0687327277420910, 5.0000000000000000, 0.50000000000000000,
7c62b943 10139 4.0000000000000000, 0.10000000000000009 },
f92ab29f 10140 { 1.1529725508983291, 5.0000000000000000, 0.50000000000000000,
7c62b943 10141 4.0000000000000000, 0.19999999999999996 },
f92ab29f 10142 { 1.2592587134058799, 5.0000000000000000, 0.50000000000000000,
7c62b943 10143 4.0000000000000000, 0.30000000000000004 },
f92ab29f 10144 { 1.3985773194637892, 5.0000000000000000, 0.50000000000000000,
7c62b943 10145 4.0000000000000000, 0.39999999999999991 },
f92ab29f 10146 { 1.5909902576697317, 5.0000000000000000, 0.50000000000000000,
7c62b943 10147 4.0000000000000000, 0.50000000000000000 },
f92ab29f 10148 { 1.8776023607249752, 5.0000000000000000, 0.50000000000000000,
7c62b943 10149 4.0000000000000000, 0.60000000000000009 },
f92ab29f 10150 { 2.3582499003694646, 5.0000000000000000, 0.50000000000000000,
7c62b943 10151 4.0000000000000000, 0.69999999999999996 },
f92ab29f 10152 { 3.3541019662496838, 5.0000000000000000, 0.50000000000000000,
7c62b943 10153 4.0000000000000000, 0.80000000000000004 },
f92ab29f 10154 { 6.7198400278577859, 5.0000000000000000, 0.50000000000000000,
7c62b943
BK
10155 4.0000000000000000, 0.89999999999999991 },
10156};
10157
10158// Test function for a=5.0000000000000000, b=0.50000000000000000, c=4.0000000000000000.
10159template <typename Tp>
10160void test147()
10161{
10162 const Tp eps = std::numeric_limits<Tp>::epsilon();
10163 Tp max_abs_diff = -Tp(1);
10164 Tp max_abs_frac = -Tp(1);
10165 unsigned int num_datum = sizeof(data147)
10166 / sizeof(testcase_hyperg<double>);
10167 for (unsigned int i = 0; i < num_datum; ++i)
10168 {
10169 const Tp f = std::tr1::hyperg(Tp(data147[i].a), Tp(data147[i].b),
10170 Tp(data147[i].c), Tp(data147[i].x));
10171 const Tp f0 = data147[i].f0;
10172 const Tp diff = f - f0;
10173 if (std::abs(diff) > max_abs_diff)
10174 max_abs_diff = std::abs(diff);
10175 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10176 {
10177 const Tp frac = diff / f0;
10178 if (std::abs(frac) > max_abs_frac)
10179 max_abs_frac = std::abs(frac);
10180 }
10181 }
10182 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10183}
10184
10185// Test data for a=5.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
10186testcase_hyperg<double> data148[] = {
f92ab29f 10187 { 0.75755211927082589, 5.0000000000000000, 0.50000000000000000,
7c62b943 10188 6.0000000000000000, -0.90000000000000002 },
f92ab29f 10189 { 0.77603550233010998, 5.0000000000000000, 0.50000000000000000,
7c62b943 10190 6.0000000000000000, -0.80000000000000004 },
f92ab29f 10191 { 0.79596241913438492, 5.0000000000000000, 0.50000000000000000,
7c62b943 10192 6.0000000000000000, -0.69999999999999996 },
f92ab29f 10193 { 0.81753360792105201, 5.0000000000000000, 0.50000000000000000,
7c62b943 10194 6.0000000000000000, -0.59999999999999998 },
f92ab29f 10195 { 0.84099165409805521, 5.0000000000000000, 0.50000000000000000,
7c62b943 10196 6.0000000000000000, -0.50000000000000000 },
f92ab29f 10197 { 0.86663303852180873, 5.0000000000000000, 0.50000000000000000,
7c62b943 10198 6.0000000000000000, -0.40000000000000002 },
f92ab29f 10199 { 0.89482475828629970, 5.0000000000000000, 0.50000000000000000,
7c62b943 10200 6.0000000000000000, -0.30000000000000004 },
f92ab29f 10201 { 0.92602774279590350, 5.0000000000000000, 0.50000000000000000,
7c62b943 10202 6.0000000000000000, -0.19999999999999996 },
f92ab29f 10203 { 0.96083064727087386, 5.0000000000000000, 0.50000000000000000,
7c62b943 10204 6.0000000000000000, -0.099999999999999978 },
f92ab29f 10205 { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
7c62b943 10206 6.0000000000000000, 0.0000000000000000 },
f92ab29f 10207 { 1.0445570841313008, 5.0000000000000000, 0.50000000000000000,
7c62b943 10208 6.0000000000000000, 0.10000000000000009 },
f92ab29f 10209 { 1.0959004638926031, 5.0000000000000000, 0.50000000000000000,
7c62b943 10210 6.0000000000000000, 0.19999999999999996 },
f92ab29f 10211 { 1.1560106261370562, 5.0000000000000000, 0.50000000000000000,
7c62b943 10212 6.0000000000000000, 0.30000000000000004 },
f92ab29f 10213 { 1.2278121770678145, 5.0000000000000000, 0.50000000000000000,
7c62b943 10214 6.0000000000000000, 0.39999999999999991 },
f92ab29f 10215 { 1.3158640214709998, 5.0000000000000000, 0.50000000000000000,
7c62b943 10216 6.0000000000000000, 0.50000000000000000 },
f92ab29f 10217 { 1.4278095344155000, 5.0000000000000000, 0.50000000000000000,
7c62b943 10218 6.0000000000000000, 0.60000000000000009 },
f92ab29f 10219 { 1.5778700502946612, 5.0000000000000000, 0.50000000000000000,
7c62b943 10220 6.0000000000000000, 0.69999999999999996 },
f92ab29f 10221 { 1.7972173289196469, 5.0000000000000000, 0.50000000000000000,
7c62b943 10222 6.0000000000000000, 0.80000000000000004 },
f92ab29f 10223 { 2.1789970569269732, 5.0000000000000000, 0.50000000000000000,
7c62b943
BK
10224 6.0000000000000000, 0.89999999999999991 },
10225};
10226
10227// Test function for a=5.0000000000000000, b=0.50000000000000000, c=6.0000000000000000.
10228template <typename Tp>
10229void test148()
10230{
10231 const Tp eps = std::numeric_limits<Tp>::epsilon();
10232 Tp max_abs_diff = -Tp(1);
10233 Tp max_abs_frac = -Tp(1);
10234 unsigned int num_datum = sizeof(data148)
10235 / sizeof(testcase_hyperg<double>);
10236 for (unsigned int i = 0; i < num_datum; ++i)
10237 {
10238 const Tp f = std::tr1::hyperg(Tp(data148[i].a), Tp(data148[i].b),
10239 Tp(data148[i].c), Tp(data148[i].x));
10240 const Tp f0 = data148[i].f0;
10241 const Tp diff = f - f0;
10242 if (std::abs(diff) > max_abs_diff)
10243 max_abs_diff = std::abs(diff);
10244 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10245 {
10246 const Tp frac = diff / f0;
10247 if (std::abs(frac) > max_abs_frac)
10248 max_abs_frac = std::abs(frac);
10249 }
10250 }
10251 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10252}
10253
10254// Test data for a=5.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
10255testcase_hyperg<double> data149[] = {
f92ab29f 10256 { 0.80270093579329471, 5.0000000000000000, 0.50000000000000000,
7c62b943 10257 8.0000000000000000, -0.90000000000000002 },
f92ab29f 10258 { 0.81884974572462788, 5.0000000000000000, 0.50000000000000000,
7c62b943 10259 8.0000000000000000, -0.80000000000000004 },
f92ab29f 10260 { 0.83605266330015271, 5.0000000000000000, 0.50000000000000000,
7c62b943 10261 8.0000000000000000, -0.69999999999999996 },
f92ab29f 10262 { 0.85443340762795972, 5.0000000000000000, 0.50000000000000000,
7c62b943 10263 8.0000000000000000, -0.59999999999999998 },
f92ab29f 10264 { 0.87413762182790655, 5.0000000000000000, 0.50000000000000000,
7c62b943 10265 8.0000000000000000, -0.50000000000000000 },
f92ab29f 10266 { 0.89533826626907331, 5.0000000000000000, 0.50000000000000000,
7c62b943 10267 8.0000000000000000, -0.40000000000000002 },
f92ab29f 10268 { 0.91824276674115268, 5.0000000000000000, 0.50000000000000000,
7c62b943 10269 8.0000000000000000, -0.30000000000000004 },
f92ab29f 10270 { 0.94310265050720576, 5.0000000000000000, 0.50000000000000000,
7c62b943 10271 8.0000000000000000, -0.19999999999999996 },
f92ab29f 10272 { 0.97022678857609712, 5.0000000000000000, 0.50000000000000000,
7c62b943 10273 8.0000000000000000, -0.099999999999999978 },
f92ab29f 10274 { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
7c62b943 10275 8.0000000000000000, 0.0000000000000000 },
f92ab29f 10276 { 1.0329098673199812, 5.0000000000000000, 0.50000000000000000,
7c62b943 10277 8.0000000000000000, 0.10000000000000009 },
f92ab29f 10278 { 1.0695865684573389, 5.0000000000000000, 0.50000000000000000,
7c62b943 10279 8.0000000000000000, 0.19999999999999996 },
f92ab29f 10280 { 1.1108642103944570, 5.0000000000000000, 0.50000000000000000,
7c62b943 10281 8.0000000000000000, 0.30000000000000004 },
f92ab29f 10282 { 1.1578795055970506, 5.0000000000000000, 0.50000000000000000,
7c62b943 10283 8.0000000000000000, 0.39999999999999991 },
f92ab29f 10284 { 1.2122394794169442, 5.0000000000000000, 0.50000000000000000,
7c62b943 10285 8.0000000000000000, 0.50000000000000000 },
f92ab29f 10286 { 1.2763274721556934, 5.0000000000000000, 0.50000000000000000,
7c62b943 10287 8.0000000000000000, 0.60000000000000009 },
f92ab29f 10288 { 1.3539179650251021, 5.0000000000000000, 0.50000000000000000,
7c62b943 10289 8.0000000000000000, 0.69999999999999996 },
f92ab29f 10290 { 1.4515986118197148, 5.0000000000000000, 0.50000000000000000,
7c62b943 10291 8.0000000000000000, 0.80000000000000004 },
f92ab29f 10292 { 1.5829284571614219, 5.0000000000000000, 0.50000000000000000,
7c62b943
BK
10293 8.0000000000000000, 0.89999999999999991 },
10294};
10295
10296// Test function for a=5.0000000000000000, b=0.50000000000000000, c=8.0000000000000000.
10297template <typename Tp>
10298void test149()
10299{
10300 const Tp eps = std::numeric_limits<Tp>::epsilon();
10301 Tp max_abs_diff = -Tp(1);
10302 Tp max_abs_frac = -Tp(1);
10303 unsigned int num_datum = sizeof(data149)
10304 / sizeof(testcase_hyperg<double>);
10305 for (unsigned int i = 0; i < num_datum; ++i)
10306 {
10307 const Tp f = std::tr1::hyperg(Tp(data149[i].a), Tp(data149[i].b),
10308 Tp(data149[i].c), Tp(data149[i].x));
10309 const Tp f0 = data149[i].f0;
10310 const Tp diff = f - f0;
10311 if (std::abs(diff) > max_abs_diff)
10312 max_abs_diff = std::abs(diff);
10313 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10314 {
10315 const Tp frac = diff / f0;
10316 if (std::abs(frac) > max_abs_frac)
10317 max_abs_frac = std::abs(frac);
10318 }
10319 }
10320 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10321}
10322
10323// Test data for a=5.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
10324testcase_hyperg<double> data150[] = {
f92ab29f 10325 { 0.83322694172301959, 5.0000000000000000, 0.50000000000000000,
7c62b943 10326 10.000000000000000, -0.90000000000000002 },
f92ab29f 10327 { 0.84753931604765664, 5.0000000000000000, 0.50000000000000000,
7c62b943 10328 10.000000000000000, -0.80000000000000004 },
f92ab29f 10329 { 0.86265784532195022, 5.0000000000000000, 0.50000000000000000,
7c62b943 10330 10.000000000000000, -0.69999999999999996 },
f92ab29f 10331 { 0.87866479300707079, 5.0000000000000000, 0.50000000000000000,
7c62b943 10332 10.000000000000000, -0.59999999999999998 },
f92ab29f 10333 { 0.89565516540263501, 5.0000000000000000, 0.50000000000000000,
7c62b943 10334 10.000000000000000, -0.50000000000000000 },
f92ab29f 10335 { 0.91373946207610557, 5.0000000000000000, 0.50000000000000000,
7c62b943 10336 10.000000000000000, -0.40000000000000002 },
f92ab29f 10337 { 0.93304721345881891, 5.0000000000000000, 0.50000000000000000,
7c62b943 10338 10.000000000000000, -0.30000000000000004 },
f92ab29f 10339 { 0.95373159512905148, 5.0000000000000000, 0.50000000000000000,
7c62b943 10340 10.000000000000000, -0.19999999999999996 },
f92ab29f 10341 { 0.97597554238828121, 5.0000000000000000, 0.50000000000000000,
7c62b943 10342 10.000000000000000, -0.099999999999999978 },
f92ab29f 10343 { 1.0000000000000000, 5.0000000000000000, 0.50000000000000000,
7c62b943 10344 10.000000000000000, 0.0000000000000000 },
f92ab29f 10345 { 1.0260752851887982, 5.0000000000000000, 0.50000000000000000,
7c62b943 10346 10.000000000000000, 0.10000000000000009 },
f92ab29f 10347 { 1.0545371197996178, 5.0000000000000000, 0.50000000000000000,
7c62b943 10348 10.000000000000000, 0.19999999999999996 },
f92ab29f 10349 { 1.0858099017045830, 5.0000000000000000, 0.50000000000000000,
7c62b943 10350 10.000000000000000, 0.30000000000000004 },
f92ab29f 10351 { 1.1204416568688709, 5.0000000000000000, 0.50000000000000000,
7c62b943 10352 10.000000000000000, 0.39999999999999991 },
f92ab29f 10353 { 1.1591587835964847, 5.0000000000000000, 0.50000000000000000,
7c62b943 10354 10.000000000000000, 0.50000000000000000 },
f92ab29f 10355 { 1.2029564720303347, 5.0000000000000000, 0.50000000000000000,
7c62b943 10356 10.000000000000000, 0.60000000000000009 },
f92ab29f 10357 { 1.2532588722007874, 5.0000000000000000, 0.50000000000000000,
7c62b943 10358 10.000000000000000, 0.69999999999999996 },
f92ab29f 10359 { 1.3122319926925459, 5.0000000000000000, 0.50000000000000000,
7c62b943 10360 10.000000000000000, 0.80000000000000004 },
f92ab29f 10361 { 1.3834948587364100, 5.0000000000000000, 0.50000000000000000,
7c62b943
BK
10362 10.000000000000000, 0.89999999999999991 },
10363};
10364
10365// Test function for a=5.0000000000000000, b=0.50000000000000000, c=10.000000000000000.
10366template <typename Tp>
10367void test150()
10368{
10369 const Tp eps = std::numeric_limits<Tp>::epsilon();
10370 Tp max_abs_diff = -Tp(1);
10371 Tp max_abs_frac = -Tp(1);
10372 unsigned int num_datum = sizeof(data150)
10373 / sizeof(testcase_hyperg<double>);
10374 for (unsigned int i = 0; i < num_datum; ++i)
10375 {
10376 const Tp f = std::tr1::hyperg(Tp(data150[i].a), Tp(data150[i].b),
10377 Tp(data150[i].c), Tp(data150[i].x));
10378 const Tp f0 = data150[i].f0;
10379 const Tp diff = f - f0;
10380 if (std::abs(diff) > max_abs_diff)
10381 max_abs_diff = std::abs(diff);
10382 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10383 {
10384 const Tp frac = diff / f0;
10385 if (std::abs(frac) > max_abs_frac)
10386 max_abs_frac = std::abs(frac);
10387 }
10388 }
10389 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10390}
10391
10392// Test data for a=5.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
10393testcase_hyperg<double> data151[] = {
f92ab29f 10394 { 0.25646288779245091, 5.0000000000000000, 1.0000000000000000,
7c62b943 10395 2.0000000000000000, -0.90000000000000002 },
f92ab29f 10396 { 0.28273129096174382, 5.0000000000000000, 1.0000000000000000,
7c62b943 10397 2.0000000000000000, -0.80000000000000004 },
f92ab29f 10398 { 0.31438201170962976, 5.0000000000000000, 1.0000000000000000,
7c62b943 10399 2.0000000000000000, -0.69999999999999996 },
f92ab29f 10400 { 0.35308837890625017, 5.0000000000000000, 1.0000000000000000,
7c62b943 10401 2.0000000000000000, -0.59999999999999998 },
f92ab29f 10402 { 0.40123456790123463, 5.0000000000000000, 1.0000000000000000,
7c62b943 10403 2.0000000000000000, -0.50000000000000000 },
f92ab29f 10404 { 0.46230737192836319, 5.0000000000000000, 1.0000000000000000,
7c62b943 10405 2.0000000000000000, -0.40000000000000002 },
f92ab29f 10406 { 0.54156016946185359, 5.0000000000000000, 1.0000000000000000,
7c62b943 10407 2.0000000000000000, -0.30000000000000004 },
f92ab29f 10408 { 0.64718364197530875, 5.0000000000000000, 1.0000000000000000,
7c62b943 10409 2.0000000000000000, -0.19999999999999996 },
f92ab29f 10410 { 0.79246636158732342, 5.0000000000000000, 1.0000000000000000,
7c62b943 10411 2.0000000000000000, -0.099999999999999978 },
f92ab29f 10412 { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
7c62b943 10413 2.0000000000000000, 0.0000000000000000 },
f92ab29f 10414 { 1.3103947568968148, 5.0000000000000000, 1.0000000000000000,
7c62b943 10415 2.0000000000000000, 0.10000000000000009 },
f92ab29f 10416 { 1.8017578125000004, 5.0000000000000000, 1.0000000000000000,
7c62b943 10417 2.0000000000000000, 0.19999999999999996 },
f92ab29f 10418 { 2.6374427321949185, 5.0000000000000000, 1.0000000000000000,
7c62b943 10419 2.0000000000000000, 0.30000000000000004 },
f92ab29f 10420 { 4.1975308641975282, 5.0000000000000000, 1.0000000000000000,
7c62b943 10421 2.0000000000000000, 0.39999999999999991 },
f92ab29f 10422 { 7.4999999999999964, 5.0000000000000000, 1.0000000000000000,
7c62b943 10423 2.0000000000000000, 0.50000000000000000 },
f92ab29f 10424 { 15.859375000000012, 5.0000000000000000, 1.0000000000000000,
7c62b943 10425 2.0000000000000000, 0.60000000000000009 },
f92ab29f 10426 { 43.734567901234513, 5.0000000000000000, 1.0000000000000000,
7c62b943 10427 2.0000000000000000, 0.69999999999999996 },
f92ab29f 10428 { 194.99999999999994, 5.0000000000000000, 1.0000000000000000,
7c62b943 10429 2.0000000000000000, 0.80000000000000004 },
f92ab29f 10430 { 2777.4999999999832, 5.0000000000000000, 1.0000000000000000,
7c62b943
BK
10431 2.0000000000000000, 0.89999999999999991 },
10432};
10433
10434// Test function for a=5.0000000000000000, b=1.0000000000000000, c=2.0000000000000000.
10435template <typename Tp>
10436void test151()
10437{
10438 const Tp eps = std::numeric_limits<Tp>::epsilon();
10439 Tp max_abs_diff = -Tp(1);
10440 Tp max_abs_frac = -Tp(1);
10441 unsigned int num_datum = sizeof(data151)
10442 / sizeof(testcase_hyperg<double>);
10443 for (unsigned int i = 0; i < num_datum; ++i)
10444 {
10445 const Tp f = std::tr1::hyperg(Tp(data151[i].a), Tp(data151[i].b),
10446 Tp(data151[i].c), Tp(data151[i].x));
10447 const Tp f0 = data151[i].f0;
10448 const Tp diff = f - f0;
10449 if (std::abs(diff) > max_abs_diff)
10450 max_abs_diff = std::abs(diff);
10451 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10452 {
10453 const Tp frac = diff / f0;
10454 if (std::abs(frac) > max_abs_frac)
10455 max_abs_frac = std::abs(frac);
10456 }
10457 }
10458 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10459}
10460
10461// Test data for a=5.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
10462testcase_hyperg<double> data152[] = {
f92ab29f 10463 { 0.46398891966759004, 5.0000000000000000, 1.0000000000000000,
7c62b943 10464 4.0000000000000000, -0.90000000000000002 },
f92ab29f 10465 { 0.49382716049382713, 5.0000000000000000, 1.0000000000000000,
7c62b943 10466 4.0000000000000000, -0.80000000000000004 },
f92ab29f 10467 { 0.52768166089965396, 5.0000000000000000, 1.0000000000000000,
7c62b943 10468 4.0000000000000000, -0.69999999999999996 },
f92ab29f 10469 { 0.56640624999999978, 5.0000000000000000, 1.0000000000000000,
7c62b943 10470 4.0000000000000000, -0.59999999999999998 },
f92ab29f 10471 { 0.61111111111111116, 5.0000000000000000, 1.0000000000000000,
7c62b943 10472 4.0000000000000000, -0.50000000000000000 },
f92ab29f 10473 { 0.66326530612244894, 5.0000000000000000, 1.0000000000000000,
7c62b943 10474 4.0000000000000000, -0.40000000000000002 },
f92ab29f 10475 { 0.72485207100591698, 5.0000000000000000, 1.0000000000000000,
7c62b943 10476 4.0000000000000000, -0.30000000000000004 },
f92ab29f 10477 { 0.79861111111111094, 5.0000000000000000, 1.0000000000000000,
7c62b943 10478 4.0000000000000000, -0.19999999999999996 },
f92ab29f 10479 { 0.88842975206611552, 5.0000000000000000, 1.0000000000000000,
7c62b943 10480 4.0000000000000000, -0.099999999999999978 },
f92ab29f 10481 { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
7c62b943 10482 4.0000000000000000, 0.0000000000000000 },
f92ab29f 10483 { 1.1419753086419753, 5.0000000000000000, 1.0000000000000000,
7c62b943 10484 4.0000000000000000, 0.10000000000000009 },
f92ab29f 10485 { 1.3281249999999998, 5.0000000000000000, 1.0000000000000000,
7c62b943 10486 4.0000000000000000, 0.19999999999999996 },
f92ab29f 10487 { 1.5816326530612239, 5.0000000000000000, 1.0000000000000000,
7c62b943 10488 4.0000000000000000, 0.30000000000000004 },
f92ab29f 10489 { 1.9444444444444444, 5.0000000000000000, 1.0000000000000000,
7c62b943 10490 4.0000000000000000, 0.39999999999999991 },
f92ab29f 10491 { 2.5000000000000000, 5.0000000000000000, 1.0000000000000000,
7c62b943 10492 4.0000000000000000, 0.50000000000000000 },
f92ab29f 10493 { 3.4374999999999996, 5.0000000000000000, 1.0000000000000000,
7c62b943 10494 4.0000000000000000, 0.60000000000000009 },
f92ab29f 10495 { 5.2777777777777715, 5.0000000000000000, 1.0000000000000000,
7c62b943 10496 4.0000000000000000, 0.69999999999999996 },
f92ab29f 10497 { 9.9999999999999947, 5.0000000000000000, 1.0000000000000000,
7c62b943 10498 4.0000000000000000, 0.80000000000000004 },
f92ab29f 10499 { 32.499999999999837, 5.0000000000000000, 1.0000000000000000,
7c62b943
BK
10500 4.0000000000000000, 0.89999999999999991 },
10501};
10502
10503// Test function for a=5.0000000000000000, b=1.0000000000000000, c=4.0000000000000000.
10504template <typename Tp>
10505void test152()
10506{
10507 const Tp eps = std::numeric_limits<Tp>::epsilon();
10508 Tp max_abs_diff = -Tp(1);
10509 Tp max_abs_frac = -Tp(1);
10510 unsigned int num_datum = sizeof(data152)
10511 / sizeof(testcase_hyperg<double>);
10512 for (unsigned int i = 0; i < num_datum; ++i)
10513 {
10514 const Tp f = std::tr1::hyperg(Tp(data152[i].a), Tp(data152[i].b),
10515 Tp(data152[i].c), Tp(data152[i].x));
10516 const Tp f0 = data152[i].f0;
10517 const Tp diff = f - f0;
10518 if (std::abs(diff) > max_abs_diff)
10519 max_abs_diff = std::abs(diff);
10520 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10521 {
10522 const Tp frac = diff / f0;
10523 if (std::abs(frac) > max_abs_frac)
10524 max_abs_frac = std::abs(frac);
10525 }
10526 }
10527 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10528}
10529
10530// Test data for a=5.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
10531testcase_hyperg<double> data153[] = {
f92ab29f 10532 { 0.57476744883397501, 5.0000000000000000, 1.0000000000000000,
7c62b943 10533 6.0000000000000000, -0.90000000000000002 },
f92ab29f 10534 { 0.60302731682513933, 5.0000000000000000, 1.0000000000000000,
7c62b943 10535 6.0000000000000000, -0.80000000000000004 },
f92ab29f 10536 { 0.63425708719096396, 5.0000000000000000, 1.0000000000000000,
7c62b943 10537 6.0000000000000000, -0.69999999999999996 },
f92ab29f 10538 { 0.66895764182970419, 5.0000000000000000, 1.0000000000000000,
7c62b943 10539 6.0000000000000000, -0.59999999999999998 },
f92ab29f 10540 { 0.70775063063963428, 5.0000000000000000, 1.0000000000000000,
7c62b943 10541 6.0000000000000000, -0.50000000000000000 },
f92ab29f 10542 { 0.75141762103495924, 5.0000000000000000, 1.0000000000000000,
7c62b943 10543 6.0000000000000000, -0.40000000000000002 },
f92ab29f 10544 { 0.80095569442603298, 5.0000000000000000, 1.0000000000000000,
7c62b943 10545 6.0000000000000000, -0.30000000000000004 },
f92ab29f 10546 { 0.85765823887436754, 5.0000000000000000, 1.0000000000000000,
7c62b943 10547 6.0000000000000000, -0.19999999999999996 },
f92ab29f 10548 { 0.92323549576335540, 5.0000000000000000, 1.0000000000000000,
7c62b943 10549 6.0000000000000000, -0.099999999999999978 },
f92ab29f 10550 { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
7c62b943 10551 6.0000000000000000, 0.0000000000000000 },
f92ab29f 10552 { 1.0911622464839472, 5.0000000000000000, 1.0000000000000000,
7c62b943 10553 6.0000000000000000, 0.10000000000000009 },
f92ab29f 10554 { 1.2013226178607666, 5.0000000000000000, 1.0000000000000000,
7c62b943 10555 6.0000000000000000, 0.19999999999999996 },
f92ab29f 10556 { 1.3373332072682687, 5.0000000000000000, 1.0000000000000000,
7c62b943 10557 6.0000000000000000, 0.30000000000000004 },
f92ab29f 10558 { 1.5099074378209716, 5.0000000000000000, 1.0000000000000000,
7c62b943 10559 6.0000000000000000, 0.39999999999999991 },
f92ab29f 10560 { 1.7368822229245819, 5.0000000000000000, 1.0000000000000000,
7c62b943 10561 6.0000000000000000, 0.50000000000000000 },
f92ab29f 10562 { 2.0505871832661429, 5.0000000000000000, 1.0000000000000000,
7c62b943 10563 6.0000000000000000, 0.60000000000000009 },
f92ab29f 10564 { 2.5172389775867967, 5.0000000000000000, 1.0000000000000000,
7c62b943 10565 6.0000000000000000, 0.69999999999999996 },
f92ab29f 10566 { 3.3015631983556144, 5.0000000000000000, 1.0000000000000000,
7c62b943 10567 6.0000000000000000, 0.80000000000000004 },
f92ab29f 10568 { 5.0005935155044519, 5.0000000000000000, 1.0000000000000000,
7c62b943
BK
10569 6.0000000000000000, 0.89999999999999991 },
10570};
10571
10572// Test function for a=5.0000000000000000, b=1.0000000000000000, c=6.0000000000000000.
10573template <typename Tp>
10574void test153()
10575{
10576 const Tp eps = std::numeric_limits<Tp>::epsilon();
10577 Tp max_abs_diff = -Tp(1);
10578 Tp max_abs_frac = -Tp(1);
10579 unsigned int num_datum = sizeof(data153)
10580 / sizeof(testcase_hyperg<double>);
10581 for (unsigned int i = 0; i < num_datum; ++i)
10582 {
10583 const Tp f = std::tr1::hyperg(Tp(data153[i].a), Tp(data153[i].b),
10584 Tp(data153[i].c), Tp(data153[i].x));
10585 const Tp f0 = data153[i].f0;
10586 const Tp diff = f - f0;
10587 if (std::abs(diff) > max_abs_diff)
10588 max_abs_diff = std::abs(diff);
10589 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10590 {
10591 const Tp frac = diff / f0;
10592 if (std::abs(frac) > max_abs_frac)
10593 max_abs_frac = std::abs(frac);
10594 }
10595 }
10596 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10597}
10598
10599// Test data for a=5.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
10600testcase_hyperg<double> data154[] = {
f92ab29f 10601 { 0.64582752605387961, 5.0000000000000000, 1.0000000000000000,
7c62b943 10602 8.0000000000000000, -0.90000000000000002 },
f92ab29f 10603 { 0.67184161997264169, 5.0000000000000000, 1.0000000000000000,
7c62b943 10604 8.0000000000000000, -0.80000000000000004 },
f92ab29f 10605 { 0.70012779922368040, 5.0000000000000000, 1.0000000000000000,
7c62b943 10606 8.0000000000000000, -0.69999999999999996 },
f92ab29f 10607 { 0.73100784656910256, 5.0000000000000000, 1.0000000000000000,
7c62b943 10608 8.0000000000000000, -0.59999999999999998 },
f92ab29f 10609 { 0.76486919089091077, 5.0000000000000000, 1.0000000000000000,
7c62b943 10610 8.0000000000000000, -0.50000000000000000 },
f92ab29f 10611 { 0.80218301124334579, 5.0000000000000000, 1.0000000000000000,
7c62b943 10612 8.0000000000000000, -0.40000000000000002 },
f92ab29f 10613 { 0.84352883533234446, 5.0000000000000000, 1.0000000000000000,
7c62b943 10614 8.0000000000000000, -0.30000000000000004 },
f92ab29f 10615 { 0.88962858902212572, 5.0000000000000000, 1.0000000000000000,
7c62b943 10616 8.0000000000000000, -0.19999999999999996 },
f92ab29f 10617 { 0.94139473468584123, 5.0000000000000000, 1.0000000000000000,
7c62b943 10618 8.0000000000000000, -0.099999999999999978 },
f92ab29f 10619 { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
7c62b943 10620 8.0000000000000000, 0.0000000000000000 },
f92ab29f 10621 { 1.0669812691939897, 5.0000000000000000, 1.0000000000000000,
7c62b943 10622 8.0000000000000000, 0.10000000000000009 },
f92ab29f 10623 { 1.1443996012177726, 5.0000000000000000, 1.0000000000000000,
7c62b943 10624 8.0000000000000000, 0.19999999999999996 },
f92ab29f 10625 { 1.2350966976721314, 5.0000000000000000, 1.0000000000000000,
7c62b943 10626 8.0000000000000000, 0.30000000000000004 },
f92ab29f 10627 { 1.3431264370409088, 5.0000000000000000, 1.0000000000000000,
7c62b943 10628 8.0000000000000000, 0.39999999999999991 },
f92ab29f 10629 { 1.4745266814162399, 5.0000000000000000, 1.0000000000000000,
7c62b943 10630 8.0000000000000000, 0.50000000000000000 },
f92ab29f 10631 { 1.6388137104840066, 5.0000000000000000, 1.0000000000000000,
7c62b943 10632 8.0000000000000000, 0.60000000000000009 },
f92ab29f 10633 { 1.8522074849776518, 5.0000000000000000, 1.0000000000000000,
7c62b943 10634 8.0000000000000000, 0.69999999999999996 },
f92ab29f 10635 { 2.1458016978417458, 5.0000000000000000, 1.0000000000000000,
7c62b943 10636 8.0000000000000000, 0.80000000000000004 },
f92ab29f 10637 { 2.5927464669826339, 5.0000000000000000, 1.0000000000000000,
7c62b943
BK
10638 8.0000000000000000, 0.89999999999999991 },
10639};
10640
10641// Test function for a=5.0000000000000000, b=1.0000000000000000, c=8.0000000000000000.
10642template <typename Tp>
10643void test154()
10644{
10645 const Tp eps = std::numeric_limits<Tp>::epsilon();
10646 Tp max_abs_diff = -Tp(1);
10647 Tp max_abs_frac = -Tp(1);
10648 unsigned int num_datum = sizeof(data154)
10649 / sizeof(testcase_hyperg<double>);
10650 for (unsigned int i = 0; i < num_datum; ++i)
10651 {
10652 const Tp f = std::tr1::hyperg(Tp(data154[i].a), Tp(data154[i].b),
10653 Tp(data154[i].c), Tp(data154[i].x));
10654 const Tp f0 = data154[i].f0;
10655 const Tp diff = f - f0;
10656 if (std::abs(diff) > max_abs_diff)
10657 max_abs_diff = std::abs(diff);
10658 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10659 {
10660 const Tp frac = diff / f0;
10661 if (std::abs(frac) > max_abs_frac)
10662 max_abs_frac = std::abs(frac);
10663 }
10664 }
10665 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10666}
10667
10668// Test data for a=5.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
10669testcase_hyperg<double> data155[] = {
f92ab29f 10670 { 0.69583236336670629, 5.0000000000000000, 1.0000000000000000,
7c62b943 10671 10.000000000000000, -0.90000000000000002 },
f92ab29f 10672 { 0.71968920666899694, 5.0000000000000000, 1.0000000000000000,
7c62b943 10673 10.000000000000000, -0.80000000000000004 },
f92ab29f 10674 { 0.74533885416044232, 5.0000000000000000, 1.0000000000000000,
7c62b943 10675 10.000000000000000, -0.69999999999999996 },
f92ab29f 10676 { 0.77300145361503014, 5.0000000000000000, 1.0000000000000000,
7c62b943 10677 10.000000000000000, -0.59999999999999998 },
f92ab29f 10678 { 0.80293630810919514, 5.0000000000000000, 1.0000000000000000,
7c62b943 10679 10.000000000000000, -0.50000000000000000 },
f92ab29f 10680 { 0.83545132638592035, 5.0000000000000000, 1.0000000000000000,
7c62b943 10681 10.000000000000000, -0.40000000000000002 },
f92ab29f 10682 { 0.87091544744412508, 5.0000000000000000, 1.0000000000000000,
7c62b943 10683 10.000000000000000, -0.30000000000000004 },
f92ab29f 10684 { 0.90977522877919847, 5.0000000000000000, 1.0000000000000000,
7c62b943 10685 10.000000000000000, -0.19999999999999996 },
f92ab29f 10686 { 0.95257738192069130, 5.0000000000000000, 1.0000000000000000,
7c62b943 10687 10.000000000000000, -0.099999999999999978 },
f92ab29f 10688 { 1.0000000000000000, 5.0000000000000000, 1.0000000000000000,
7c62b943 10689 10.000000000000000, 0.0000000000000000 },
f92ab29f 10690 { 1.0528968282789379, 5.0000000000000000, 1.0000000000000000,
7c62b943 10691 10.000000000000000, 0.10000000000000009 },
f92ab29f 10692 { 1.1123617169062123, 5.0000000000000000, 1.0000000000000000,
7c62b943 10693 10.000000000000000, 0.19999999999999996 },
f92ab29f 10694 { 1.1798254572896132, 5.0000000000000000, 1.0000000000000000,
7c62b943 10695 10.000000000000000, 0.30000000000000004 },
f92ab29f 10696 { 1.2572069000522696, 5.0000000000000000, 1.0000000000000000,
7c62b943 10697 10.000000000000000, 0.39999999999999991 },
f92ab29f 10698 { 1.3471600884974377, 5.0000000000000000, 1.0000000000000000,
7c62b943 10699 10.000000000000000, 0.50000000000000000 },
f92ab29f 10700 { 1.4535032279573519, 5.0000000000000000, 1.0000000000000000,
7c62b943 10701 10.000000000000000, 0.60000000000000009 },
f92ab29f 10702 { 1.5820245752814948, 5.0000000000000000, 1.0000000000000000,
7c62b943 10703 10.000000000000000, 0.69999999999999996 },
f92ab29f 10704 { 1.7421756366906538, 5.0000000000000000, 1.0000000000000000,
7c62b943 10705 10.000000000000000, 0.80000000000000004 },
f92ab29f 10706 { 1.9513145531098233, 5.0000000000000000, 1.0000000000000000,
7c62b943
BK
10707 10.000000000000000, 0.89999999999999991 },
10708};
10709
10710// Test function for a=5.0000000000000000, b=1.0000000000000000, c=10.000000000000000.
10711template <typename Tp>
10712void test155()
10713{
10714 const Tp eps = std::numeric_limits<Tp>::epsilon();
10715 Tp max_abs_diff = -Tp(1);
10716 Tp max_abs_frac = -Tp(1);
10717 unsigned int num_datum = sizeof(data155)
10718 / sizeof(testcase_hyperg<double>);
10719 for (unsigned int i = 0; i < num_datum; ++i)
10720 {
10721 const Tp f = std::tr1::hyperg(Tp(data155[i].a), Tp(data155[i].b),
10722 Tp(data155[i].c), Tp(data155[i].x));
10723 const Tp f0 = data155[i].f0;
10724 const Tp diff = f - f0;
10725 if (std::abs(diff) > max_abs_diff)
10726 max_abs_diff = std::abs(diff);
10727 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10728 {
10729 const Tp frac = diff / f0;
10730 if (std::abs(frac) > max_abs_frac)
10731 max_abs_frac = std::abs(frac);
10732 }
10733 }
10734 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10735}
10736
10737// Test data for a=5.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
10738testcase_hyperg<double> data156[] = {
f92ab29f 10739 { 0.040386107340619266, 5.0000000000000000, 2.0000000000000000,
7c62b943 10740 2.0000000000000000, -0.90000000000000002 },
f92ab29f 10741 { 0.052922149401344633, 5.0000000000000000, 2.0000000000000000,
7c62b943 10742 2.0000000000000000, -0.80000000000000004 },
f92ab29f 10743 { 0.070429627772374270, 5.0000000000000000, 2.0000000000000000,
7c62b943 10744 2.0000000000000000, -0.69999999999999996 },
f92ab29f 10745 { 0.095367431640624972, 5.0000000000000000, 2.0000000000000000,
7c62b943 10746 2.0000000000000000, -0.59999999999999998 },
f92ab29f 10747 { 0.13168724279835387, 5.0000000000000000, 2.0000000000000000,
7c62b943 10748 2.0000000000000000, -0.50000000000000000 },
f92ab29f 10749 { 0.18593443208187066, 5.0000000000000000, 2.0000000000000000,
7c62b943 10750 2.0000000000000000, -0.40000000000000002 },
f92ab29f 10751 { 0.26932907434290437, 5.0000000000000000, 2.0000000000000000,
7c62b943 10752 2.0000000000000000, -0.30000000000000004 },
f92ab29f 10753 { 0.40187757201646096, 5.0000000000000000, 2.0000000000000000,
7c62b943 10754 2.0000000000000000, -0.19999999999999996 },
f92ab29f 10755 { 0.62092132305915493, 5.0000000000000000, 2.0000000000000000,
7c62b943 10756 2.0000000000000000, -0.099999999999999978 },
f92ab29f 10757 { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
7c62b943 10758 2.0000000000000000, 0.0000000000000000 },
f92ab29f 10759 { 1.6935087808430296, 5.0000000000000000, 2.0000000000000000,
7c62b943 10760 2.0000000000000000, 0.10000000000000009 },
f92ab29f 10761 { 3.0517578124999991, 5.0000000000000000, 2.0000000000000000,
7c62b943 10762 2.0000000000000000, 0.19999999999999996 },
f92ab29f 10763 { 5.9499018266198629, 5.0000000000000000, 2.0000000000000000,
7c62b943 10764 2.0000000000000000, 0.30000000000000004 },
f92ab29f 10765 { 12.860082304526737, 5.0000000000000000, 2.0000000000000000,
7c62b943 10766 2.0000000000000000, 0.39999999999999991 },
f92ab29f 10767 { 32.000000000000000, 5.0000000000000000, 2.0000000000000000,
7c62b943 10768 2.0000000000000000, 0.50000000000000000 },
f92ab29f 10769 { 97.656250000000114, 5.0000000000000000, 2.0000000000000000,
7c62b943 10770 2.0000000000000000, 0.60000000000000009 },
f92ab29f 10771 { 411.52263374485580, 5.0000000000000000, 2.0000000000000000,
7c62b943 10772 2.0000000000000000, 0.69999999999999996 },
f92ab29f 10773 { 3124.9999999999991, 5.0000000000000000, 2.0000000000000000,
7c62b943 10774 2.0000000000000000, 0.80000000000000004 },
f92ab29f 10775 { 99999.999999999665, 5.0000000000000000, 2.0000000000000000,
7c62b943
BK
10776 2.0000000000000000, 0.89999999999999991 },
10777};
10778
10779// Test function for a=5.0000000000000000, b=2.0000000000000000, c=2.0000000000000000.
10780template <typename Tp>
10781void test156()
10782{
10783 const Tp eps = std::numeric_limits<Tp>::epsilon();
10784 Tp max_abs_diff = -Tp(1);
10785 Tp max_abs_frac = -Tp(1);
10786 unsigned int num_datum = sizeof(data156)
10787 / sizeof(testcase_hyperg<double>);
10788 for (unsigned int i = 0; i < num_datum; ++i)
10789 {
10790 const Tp f = std::tr1::hyperg(Tp(data156[i].a), Tp(data156[i].b),
10791 Tp(data156[i].c), Tp(data156[i].x));
10792 const Tp f0 = data156[i].f0;
10793 const Tp diff = f - f0;
10794 if (std::abs(diff) > max_abs_diff)
10795 max_abs_diff = std::abs(diff);
10796 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10797 {
10798 const Tp frac = diff / f0;
10799 if (std::abs(frac) > max_abs_frac)
10800 max_abs_frac = std::abs(frac);
10801 }
10802 }
10803 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10804}
10805
10806// Test data for a=5.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
10807testcase_hyperg<double> data157[] = {
f92ab29f 10808 { 0.21140107887447140, 5.0000000000000000, 2.0000000000000000,
7c62b943 10809 4.0000000000000000, -0.90000000000000002 },
f92ab29f 10810 { 0.24005486968449935, 5.0000000000000000, 2.0000000000000000,
7c62b943 10811 4.0000000000000000, -0.80000000000000004 },
f92ab29f 10812 { 0.27478119275391821, 5.0000000000000000, 2.0000000000000000,
7c62b943 10813 4.0000000000000000, -0.69999999999999996 },
f92ab29f 10814 { 0.31738281249999994, 5.0000000000000000, 2.0000000000000000,
7c62b943 10815 4.0000000000000000, -0.59999999999999998 },
f92ab29f 10816 { 0.37037037037037035, 5.0000000000000000, 2.0000000000000000,
7c62b943 10817 4.0000000000000000, -0.50000000000000000 },
f92ab29f 10818 { 0.43731778425655982, 5.0000000000000000, 2.0000000000000000,
7c62b943 10819 4.0000000000000000, -0.40000000000000002 },
f92ab29f 10820 { 0.52344105598543444, 5.0000000000000000, 2.0000000000000000,
7c62b943 10821 4.0000000000000000, -0.30000000000000004 },
f92ab29f 10822 { 0.63657407407407429, 5.0000000000000000, 2.0000000000000000,
7c62b943 10823 4.0000000000000000, -0.19999999999999996 },
f92ab29f 10824 { 0.78888054094665638, 5.0000000000000000, 2.0000000000000000,
7c62b943 10825 4.0000000000000000, -0.099999999999999978 },
f92ab29f 10826 { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
7c62b943 10827 4.0000000000000000, 0.0000000000000000 },
f92ab29f 10828 { 1.3031550068587108, 5.0000000000000000, 2.0000000000000000,
7c62b943 10829 4.0000000000000000, 0.10000000000000009 },
f92ab29f 10830 { 1.7578125000000002, 5.0000000000000000, 2.0000000000000000,
7c62b943 10831 4.0000000000000000, 0.19999999999999996 },
f92ab29f 10832 { 2.4781341107871717, 5.0000000000000000, 2.0000000000000000,
7c62b943 10833 4.0000000000000000, 0.30000000000000004 },
f92ab29f 10834 { 3.7037037037037037, 5.0000000000000000, 2.0000000000000000,
7c62b943 10835 4.0000000000000000, 0.39999999999999991 },
f92ab29f 10836 { 5.9999999999999982, 5.0000000000000000, 2.0000000000000000,
7c62b943 10837 4.0000000000000000, 0.50000000000000000 },
f92ab29f 10838 { 10.937500000000005, 5.0000000000000000, 2.0000000000000000,
7c62b943 10839 4.0000000000000000, 0.60000000000000009 },
f92ab29f 10840 { 24.074074074074076, 5.0000000000000000, 2.0000000000000000,
7c62b943 10841 4.0000000000000000, 0.69999999999999996 },
f92ab29f 10842 { 74.999999999999957, 5.0000000000000000, 2.0000000000000000,
7c62b943 10843 4.0000000000000000, 0.80000000000000004 },
f92ab29f 10844 { 549.99999999999670, 5.0000000000000000, 2.0000000000000000,
7c62b943
BK
10845 4.0000000000000000, 0.89999999999999991 },
10846};
10847
10848// Test function for a=5.0000000000000000, b=2.0000000000000000, c=4.0000000000000000.
10849template <typename Tp>
10850void test157()
10851{
10852 const Tp eps = std::numeric_limits<Tp>::epsilon();
10853 Tp max_abs_diff = -Tp(1);
10854 Tp max_abs_frac = -Tp(1);
10855 unsigned int num_datum = sizeof(data157)
10856 / sizeof(testcase_hyperg<double>);
10857 for (unsigned int i = 0; i < num_datum; ++i)
10858 {
10859 const Tp f = std::tr1::hyperg(Tp(data157[i].a), Tp(data157[i].b),
10860 Tp(data157[i].c), Tp(data157[i].x));
10861 const Tp f0 = data157[i].f0;
10862 const Tp diff = f - f0;
10863 if (std::abs(diff) > max_abs_diff)
10864 max_abs_diff = std::abs(diff);
10865 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10866 {
10867 const Tp frac = diff / f0;
10868 if (std::abs(frac) > max_abs_frac)
10869 max_abs_frac = std::abs(frac);
10870 }
10871 }
10872 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10873}
10874
10875// Test data for a=5.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
10876testcase_hyperg<double> data158[] = {
f92ab29f 10877 { 0.33250915203252107, 5.0000000000000000, 2.0000000000000000,
7c62b943 10878 6.0000000000000000, -0.90000000000000002 },
f92ab29f 10879 { 0.36566851047721960, 5.0000000000000000, 2.0000000000000000,
7c62b943 10880 6.0000000000000000, -0.80000000000000004 },
f92ab29f 10881 { 0.40414812182437942, 5.0000000000000000, 2.0000000000000000,
7c62b943 10882 6.0000000000000000, -0.69999999999999996 },
f92ab29f 10883 { 0.44916943268118470, 5.0000000000000000, 2.0000000000000000,
7c62b943 10884 6.0000000000000000, -0.59999999999999998 },
f92ab29f 10885 { 0.50233081077479569, 5.0000000000000000, 2.0000000000000000,
7c62b943 10886 6.0000000000000000, -0.50000000000000000 },
f92ab29f 10887 { 0.56575808728873322, 5.0000000000000000, 2.0000000000000000,
7c62b943 10888 6.0000000000000000, -0.40000000000000002 },
f92ab29f 10889 { 0.64233106844971422, 5.0000000000000000, 2.0000000000000000,
7c62b943 10890 6.0000000000000000, -0.30000000000000004 },
f92ab29f 10891 { 0.73603371116919514, 5.0000000000000000, 2.0000000000000000,
7c62b943 10892 6.0000000000000000, -0.19999999999999996 },
f92ab29f 10893 { 0.85251256240112439, 5.0000000000000000, 2.0000000000000000,
7c62b943 10894 6.0000000000000000, -0.099999999999999978 },
f92ab29f 10895 { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
7c62b943 10896 6.0000000000000000, 0.0000000000000000 },
f92ab29f 10897 { 1.1909065696197674, 5.0000000000000000, 2.0000000000000000,
7c62b943 10898 6.0000000000000000, 0.10000000000000009 },
f92ab29f 10899 { 1.4447095285569311, 5.0000000000000000, 2.0000000000000000,
7c62b943 10900 6.0000000000000000, 0.19999999999999996 },
f92ab29f 10901 { 1.7935243137840653, 5.0000000000000000, 2.0000000000000000,
7c62b943 10902 6.0000000000000000, 0.30000000000000004 },
f92ab29f 10903 { 2.2937035820494454, 5.0000000000000000, 2.0000000000000000,
7c62b943 10904 6.0000000000000000, 0.39999999999999991 },
f92ab29f 10905 { 3.0524711083016687, 5.0000000000000000, 2.0000000000000000,
7c62b943 10906 6.0000000000000000, 0.50000000000000000 },
f92ab29f 10907 { 4.2976512669354259, 5.0000000000000000, 2.0000000000000000,
7c62b943 10908 6.0000000000000000, 0.60000000000000009 },
f92ab29f 10909 { 6.5977107563194677, 5.0000000000000000, 2.0000000000000000,
7c62b943 10910 6.0000000000000000, 0.69999999999999996 },
f92ab29f 10911 { 11.793747206577530, 5.0000000000000000, 2.0000000000000000,
7c62b943 10912 6.0000000000000000, 0.80000000000000004 },
f92ab29f 10913 { 29.997625937982058, 5.0000000000000000, 2.0000000000000000,
7c62b943
BK
10914 6.0000000000000000, 0.89999999999999991 },
10915};
10916
10917// Test function for a=5.0000000000000000, b=2.0000000000000000, c=6.0000000000000000.
10918template <typename Tp>
10919void test158()
10920{
10921 const Tp eps = std::numeric_limits<Tp>::epsilon();
10922 Tp max_abs_diff = -Tp(1);
10923 Tp max_abs_frac = -Tp(1);
10924 unsigned int num_datum = sizeof(data158)
10925 / sizeof(testcase_hyperg<double>);
10926 for (unsigned int i = 0; i < num_datum; ++i)
10927 {
10928 const Tp f = std::tr1::hyperg(Tp(data158[i].a), Tp(data158[i].b),
10929 Tp(data158[i].c), Tp(data158[i].x));
10930 const Tp f0 = data158[i].f0;
10931 const Tp diff = f - f0;
10932 if (std::abs(diff) > max_abs_diff)
10933 max_abs_diff = std::abs(diff);
10934 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
10935 {
10936 const Tp frac = diff / f0;
10937 if (std::abs(frac) > max_abs_frac)
10938 max_abs_frac = std::abs(frac);
10939 }
10940 }
10941 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
10942}
10943
10944// Test data for a=5.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
10945testcase_hyperg<double> data159[] = {
f92ab29f 10946 { 0.42108197362250305, 5.0000000000000000, 2.0000000000000000,
7c62b943 10947 8.0000000000000000, -0.90000000000000002 },
f92ab29f 10948 { 0.45503172013983051, 5.0000000000000000, 2.0000000000000000,
7c62b943 10949 8.0000000000000000, -0.80000000000000004 },
f92ab29f 10950 { 0.49345609813624303, 5.0000000000000000, 2.0000000000000000,
7c62b943 10951 8.0000000000000000, -0.69999999999999996 },
f92ab29f 10952 { 0.53720880551221295, 5.0000000000000000, 2.0000000000000000,
7c62b943 10953 8.0000000000000000, -0.59999999999999998 },
f92ab29f 10954 { 0.58736431524847466, 5.0000000000000000, 2.0000000000000000,
7c62b943 10955 8.0000000000000000, -0.50000000000000000 },
f92ab29f 10956 { 0.64529222467897962, 5.0000000000000000, 2.0000000000000000,
7c62b943 10957 8.0000000000000000, -0.40000000000000002 },
f92ab29f 10958 { 0.71276337354393904, 5.0000000000000000, 2.0000000000000000,
7c62b943 10959 8.0000000000000000, -0.30000000000000004 },
f92ab29f 10960 { 0.79210466220795306, 5.0000000000000000, 2.0000000000000000,
7c62b943 10961 8.0000000000000000, -0.19999999999999996 },
f92ab29f 10962 { 0.88643063455510596, 5.0000000000000000, 2.0000000000000000,
7c62b943 10963 8.0000000000000000, -0.099999999999999978 },
f92ab29f 10964 { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
7c62b943 10965 8.0000000000000000, 0.0000000000000000 },
f92ab29f 10966 { 1.1387832139040652, 5.0000000000000000, 2.0000000000000000,
7c62b943 10967 8.0000000000000000, 0.10000000000000009 },
f92ab29f 10968 { 1.3114025920844752, 5.0000000000000000, 2.0000000000000000,
7c62b943 10969 8.0000000000000000, 0.19999999999999996 },
f92ab29f 10970 { 1.5307655016768162, 5.0000000000000000, 2.0000000000000000,
7c62b943 10971 8.0000000000000000, 0.30000000000000004 },
f92ab29f 10972 { 1.8170727950333345, 5.0000000000000000, 2.0000000000000000,
7c62b943 10973 8.0000000000000000, 0.39999999999999991 },
f92ab29f 10974 { 2.2037865486700836, 5.0000000000000000, 2.0000000000000000,
7c62b943 10975 8.0000000000000000, 0.50000000000000000 },
f92ab29f 10976 { 2.7506766056439380, 5.0000000000000000, 2.0000000000000000,
7c62b943 10977 8.0000000000000000, 0.60000000000000009 },
f92ab29f 10978 { 3.5764534935716972, 5.0000000000000000, 2.0000000000000000,
7c62b943 10979 8.0000000000000000, 0.69999999999999996 },
f92ab29f 10980 { 4.9587762302155403, 5.0000000000000000, 2.0000000000000000,
7c62b943 10981 8.0000000000000000, 0.80000000000000004 },
f92ab29f 10982 { 7.7740847924166800, 5.0000000000000000, 2.0000000000000000,
7c62b943
BK
10983 8.0000000000000000, 0.89999999999999991 },
10984};
10985
10986// Test function for a=5.0000000000000000, b=2.0000000000000000, c=8.0000000000000000.
10987template <typename Tp>
10988void test159()
10989{
10990 const Tp eps = std::numeric_limits<Tp>::epsilon();
10991 Tp max_abs_diff = -Tp(1);
10992 Tp max_abs_frac = -Tp(1);
10993 unsigned int num_datum = sizeof(data159)
10994 / sizeof(testcase_hyperg<double>);
10995 for (unsigned int i = 0; i < num_datum; ++i)
10996 {
10997 const Tp f = std::tr1::hyperg(Tp(data159[i].a), Tp(data159[i].b),
10998 Tp(data159[i].c), Tp(data159[i].x));
10999 const Tp f0 = data159[i].f0;
11000 const Tp diff = f - f0;
11001 if (std::abs(diff) > max_abs_diff)
11002 max_abs_diff = std::abs(diff);
11003 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11004 {
11005 const Tp frac = diff / f0;
11006 if (std::abs(frac) > max_abs_frac)
11007 max_abs_frac = std::abs(frac);
11008 }
11009 }
11010 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11011}
11012
11013// Test data for a=5.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
11014testcase_hyperg<double> data160[] = {
f92ab29f 11015 { 0.48860241312958425, 5.0000000000000000, 2.0000000000000000,
7c62b943 11016 10.000000000000000, -0.90000000000000002 },
f92ab29f 11017 { 0.52193382517068487, 5.0000000000000000, 2.0000000000000000,
7c62b943 11018 10.000000000000000, -0.80000000000000004 },
f92ab29f 11019 { 0.55902375003954219, 5.0000000000000000, 2.0000000000000000,
7c62b943 11020 10.000000000000000, -0.69999999999999996 },
f92ab29f 11021 { 0.60049055150230346, 5.0000000000000000, 2.0000000000000000,
7c62b943 11022 10.000000000000000, -0.59999999999999998 },
f92ab29f 11023 { 0.64709127927203480, 5.0000000000000000, 2.0000000000000000,
7c62b943 11024 10.000000000000000, -0.50000000000000000 },
f92ab29f 11025 { 0.69976233335368998, 5.0000000000000000, 2.0000000000000000,
7c62b943 11026 10.000000000000000, -0.40000000000000002 },
f92ab29f 11027 { 0.75967529501081055, 5.0000000000000000, 2.0000000000000000,
7c62b943 11028 10.000000000000000, -0.30000000000000004 },
f92ab29f 11029 { 0.82831498895254407, 5.0000000000000000, 2.0000000000000000,
7c62b943 11030 10.000000000000000, -0.19999999999999996 },
f92ab29f 11031 { 0.90759090169653933, 5.0000000000000000, 2.0000000000000000,
7c62b943 11032 10.000000000000000, -0.099999999999999978 },
f92ab29f 11033 { 1.0000000000000000, 5.0000000000000000, 2.0000000000000000,
7c62b943 11034 10.000000000000000, 0.0000000000000000 },
f92ab29f 11035 { 1.1088712278667465, 5.0000000000000000, 2.0000000000000000,
7c62b943 11036 10.000000000000000, 0.10000000000000009 },
f92ab29f 11037 { 1.2387445478440853, 5.0000000000000000, 2.0000000000000000,
7c62b943 11038 10.000000000000000, 0.19999999999999996 },
f92ab29f 11039 { 1.3959812720437546, 5.0000000000000000, 2.0000000000000000,
7c62b943 11040 10.000000000000000, 0.30000000000000004 },
f92ab29f 11041 { 1.5897930661091164, 5.0000000000000000, 2.0000000000000000,
7c62b943 11042 10.000000000000000, 0.39999999999999991 },
f92ab29f 11043 { 1.8340789380307454, 5.0000000000000000, 2.0000000000000000,
7c62b943 11044 10.000000000000000, 0.50000000000000000 },
f92ab29f 11045 { 2.1509548085970764, 5.0000000000000000, 2.0000000000000000,
7c62b943 11046 10.000000000000000, 0.60000000000000009 },
f92ab29f 11047 { 2.5782406951207504, 5.0000000000000000, 2.0000000000000000,
7c62b943 11048 10.000000000000000, 0.69999999999999996 },
f92ab29f 11049 { 3.1877847194242737, 5.0000000000000000, 2.0000000000000000,
7c62b943 11050 10.000000000000000, 0.80000000000000004 },
f92ab29f 11051 { 4.1421596631676900, 5.0000000000000000, 2.0000000000000000,
7c62b943
BK
11052 10.000000000000000, 0.89999999999999991 },
11053};
11054
11055// Test function for a=5.0000000000000000, b=2.0000000000000000, c=10.000000000000000.
11056template <typename Tp>
11057void test160()
11058{
11059 const Tp eps = std::numeric_limits<Tp>::epsilon();
11060 Tp max_abs_diff = -Tp(1);
11061 Tp max_abs_frac = -Tp(1);
11062 unsigned int num_datum = sizeof(data160)
11063 / sizeof(testcase_hyperg<double>);
11064 for (unsigned int i = 0; i < num_datum; ++i)
11065 {
11066 const Tp f = std::tr1::hyperg(Tp(data160[i].a), Tp(data160[i].b),
11067 Tp(data160[i].c), Tp(data160[i].x));
11068 const Tp f0 = data160[i].f0;
11069 const Tp diff = f - f0;
11070 if (std::abs(diff) > max_abs_diff)
11071 max_abs_diff = std::abs(diff);
11072 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11073 {
11074 const Tp frac = diff / f0;
11075 if (std::abs(frac) > max_abs_frac)
11076 max_abs_frac = std::abs(frac);
11077 }
11078 }
11079 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11080}
11081
11082// Test data for a=5.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
11083testcase_hyperg<double> data161[] = {
f92ab29f 11084 { -0.0047236848832209691, 5.0000000000000000, 5.0000000000000000,
7c62b943 11085 2.0000000000000000, -0.90000000000000002 },
f92ab29f 11086 { -0.0073321496427103212, 5.0000000000000000, 5.0000000000000000,
7c62b943 11087 2.0000000000000000, -0.80000000000000004 },
f92ab29f 11088 { -0.010977302557845672, 5.0000000000000000, 5.0000000000000000,
7c62b943 11089 2.0000000000000000, -0.69999999999999996 },
f92ab29f 11090 { -0.015692785382270907, 5.0000000000000000, 5.0000000000000000,
7c62b943 11091 2.0000000000000000, -0.59999999999999998 },
f92ab29f 11092 { -0.020728547477518677, 5.0000000000000000, 5.0000000000000000,
7c62b943 11093 2.0000000000000000, -0.50000000000000000 },
f92ab29f 11094 { -0.022767481479412769, 5.0000000000000000, 5.0000000000000000,
7c62b943 11095 2.0000000000000000, -0.40000000000000002 },
f92ab29f 11096 { -0.010634636868114139, 5.0000000000000000, 5.0000000000000000,
7c62b943 11097 2.0000000000000000, -0.30000000000000004 },
f92ab29f 11098 { 0.050699832580781923, 5.0000000000000000, 5.0000000000000000,
7c62b943 11099 2.0000000000000000, -0.19999999999999996 },
f92ab29f 11100 { 0.27045765367659280, 5.0000000000000000, 5.0000000000000000,
7c62b943 11101 2.0000000000000000, -0.099999999999999978 },
f92ab29f 11102 { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
7c62b943 11103 2.0000000000000000, 0.0000000000000000 },
f92ab29f 11104 { 3.4387055868901171, 5.0000000000000000, 5.0000000000000000,
7c62b943 11105 2.0000000000000000, 0.10000000000000009 },
f92ab29f 11106 { 12.052059173583981, 5.0000000000000000, 5.0000000000000000,
7c62b943 11107 2.0000000000000000, 0.19999999999999996 },
f92ab29f 11108 { 45.565319600798020, 5.0000000000000000, 5.0000000000000000,
7c62b943 11109 2.0000000000000000, 0.30000000000000004 },
f92ab29f 11110 { 196.23532998018572, 5.0000000000000000, 5.0000000000000000,
7c62b943 11111 2.0000000000000000, 0.39999999999999991 },
f92ab29f 11112 { 1032.0000000000002, 5.0000000000000000, 5.0000000000000000,
7c62b943 11113 2.0000000000000000, 0.50000000000000000 },
f92ab29f 11114 { 7376.0986328125073, 5.0000000000000000, 5.0000000000000000,
7c62b943 11115 2.0000000000000000, 0.60000000000000009 },
f92ab29f 11116 { 86964.639536655843, 5.0000000000000000, 5.0000000000000000,
7c62b943 11117 2.0000000000000000, 0.69999999999999996 },
f92ab29f 11118 { 2596875.0000000009, 5.0000000000000000, 5.0000000000000000,
7c62b943 11119 2.0000000000000000, 0.80000000000000004 },
f92ab29f 11120 { 766224999.99999273, 5.0000000000000000, 5.0000000000000000,
7c62b943
BK
11121 2.0000000000000000, 0.89999999999999991 },
11122};
11123
11124// Test function for a=5.0000000000000000, b=5.0000000000000000, c=2.0000000000000000.
11125template <typename Tp>
11126void test161()
11127{
11128 const Tp eps = std::numeric_limits<Tp>::epsilon();
11129 Tp max_abs_diff = -Tp(1);
11130 Tp max_abs_frac = -Tp(1);
11131 unsigned int num_datum = sizeof(data161)
11132 / sizeof(testcase_hyperg<double>);
11133 for (unsigned int i = 0; i < num_datum; ++i)
11134 {
11135 const Tp f = std::tr1::hyperg(Tp(data161[i].a), Tp(data161[i].b),
11136 Tp(data161[i].c), Tp(data161[i].x));
11137 const Tp f0 = data161[i].f0;
11138 const Tp diff = f - f0;
11139 if (std::abs(diff) > max_abs_diff)
11140 max_abs_diff = std::abs(diff);
11141 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11142 {
11143 const Tp frac = diff / f0;
11144 if (std::abs(frac) > max_abs_frac)
11145 max_abs_frac = std::abs(frac);
11146 }
11147 }
11148 VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
11149}
11150
11151// Test data for a=5.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
11152testcase_hyperg<double> data162[] = {
f92ab29f 11153 { 0.016473280625778897, 5.0000000000000000, 5.0000000000000000,
7c62b943 11154 4.0000000000000000, -0.90000000000000002 },
f92ab29f 11155 { 0.023520955289486407, 5.0000000000000000, 5.0000000000000000,
7c62b943 11156 4.0000000000000000, -0.80000000000000004 },
f92ab29f 11157 { 0.034179084066004943, 5.0000000000000000, 5.0000000000000000,
7c62b943 11158 4.0000000000000000, -0.69999999999999996 },
f92ab29f 11159 { 0.050663948059082052, 5.0000000000000000, 5.0000000000000000,
7c62b943 11160 4.0000000000000000, -0.59999999999999998 },
f92ab29f 11161 { 0.076817558299039843, 5.0000000000000000, 5.0000000000000000,
7c62b943 11162 4.0000000000000000, -0.50000000000000000 },
f92ab29f 11163 { 0.11952927776691676, 5.0000000000000000, 5.0000000000000000,
7c62b943 11164 4.0000000000000000, -0.40000000000000002 },
f92ab29f 11165 { 0.19163799520552813, 5.0000000000000000, 5.0000000000000000,
7c62b943 11166 4.0000000000000000, -0.30000000000000004 },
f92ab29f 11167 { 0.31815307784636504, 5.0000000000000000, 5.0000000000000000,
7c62b943 11168 4.0000000000000000, -0.19999999999999996 },
f92ab29f 11169 { 0.55036208180243285, 5.0000000000000000, 5.0000000000000000,
7c62b943 11170 4.0000000000000000, -0.099999999999999978 },
f92ab29f 11171 { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
7c62b943 11172 4.0000000000000000, 0.0000000000000000 },
f92ab29f 11173 { 1.9287183337378946, 5.0000000000000000, 5.0000000000000000,
7c62b943 11174 4.0000000000000000, 0.10000000000000009 },
f92ab29f 11175 { 4.0054321289062473, 5.0000000000000000, 5.0000000000000000,
7c62b943 11176 4.0000000000000000, 0.19999999999999996 },
f92ab29f 11177 { 9.1373492337376394, 5.0000000000000000, 5.0000000000000000,
7c62b943 11178 4.0000000000000000, 0.30000000000000004 },
f92ab29f 11179 { 23.576817558299005, 5.0000000000000000, 5.0000000000000000,
7c62b943 11180 4.0000000000000000, 0.39999999999999991 },
f92ab29f 11181 { 71.999999999999972, 5.0000000000000000, 5.0000000000000000,
7c62b943 11182 4.0000000000000000, 0.50000000000000000 },
f92ab29f 11183 { 280.76171875000023, 5.0000000000000000, 5.0000000000000000,
7c62b943 11184 4.0000000000000000, 0.60000000000000009 },
f92ab29f 11185 { 1611.7969821673514, 5.0000000000000000, 5.0000000000000000,
7c62b943 11186 4.0000000000000000, 0.69999999999999996 },
f92ab29f 11187 { 18749.999999999996, 5.0000000000000000, 5.0000000000000000,
7c62b943 11188 4.0000000000000000, 0.80000000000000004 },
f92ab29f 11189 { 1224999.9999999879, 5.0000000000000000, 5.0000000000000000,
7c62b943
BK
11190 4.0000000000000000, 0.89999999999999991 },
11191};
11192
11193// Test function for a=5.0000000000000000, b=5.0000000000000000, c=4.0000000000000000.
11194template <typename Tp>
11195void test162()
11196{
11197 const Tp eps = std::numeric_limits<Tp>::epsilon();
11198 Tp max_abs_diff = -Tp(1);
11199 Tp max_abs_frac = -Tp(1);
11200 unsigned int num_datum = sizeof(data162)
11201 / sizeof(testcase_hyperg<double>);
11202 for (unsigned int i = 0; i < num_datum; ++i)
11203 {
11204 const Tp f = std::tr1::hyperg(Tp(data162[i].a), Tp(data162[i].b),
11205 Tp(data162[i].c), Tp(data162[i].x));
11206 const Tp f0 = data162[i].f0;
11207 const Tp diff = f - f0;
11208 if (std::abs(diff) > max_abs_diff)
11209 max_abs_diff = std::abs(diff);
11210 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11211 {
11212 const Tp frac = diff / f0;
11213 if (std::abs(frac) > max_abs_frac)
11214 max_abs_frac = std::abs(frac);
11215 }
11216 }
11217 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
11218}
11219
11220// Test data for a=5.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
11221testcase_hyperg<double> data163[] = {
f92ab29f 11222 { 0.067462409738203513, 5.0000000000000000, 5.0000000000000000,
7c62b943 11223 6.0000000000000000, -0.90000000000000002 },
f92ab29f 11224 { 0.084813629887172517, 5.0000000000000000, 5.0000000000000000,
7c62b943 11225 6.0000000000000000, -0.80000000000000004 },
f92ab29f 11226 { 0.10799223563666410, 5.0000000000000000, 5.0000000000000000,
7c62b943 11227 6.0000000000000000, -0.69999999999999996 },
f92ab29f 11228 { 0.13947766136095369, 5.0000000000000000, 5.0000000000000000,
7c62b943 11229 6.0000000000000000, -0.59999999999999998 },
f92ab29f 11230 { 0.18305927261494304, 5.0000000000000000, 5.0000000000000000,
7c62b943 11231 6.0000000000000000, -0.50000000000000000 },
f92ab29f 11232 { 0.24468431546783445, 5.0000000000000000, 5.0000000000000000,
7c62b943 11233 6.0000000000000000, -0.40000000000000002 },
f92ab29f 11234 { 0.33397274564972956, 5.0000000000000000, 5.0000000000000000,
7c62b943 11235 6.0000000000000000, -0.30000000000000004 },
f92ab29f 11236 { 0.46703323887436765, 5.0000000000000000, 5.0000000000000000,
7c62b943 11237 6.0000000000000000, -0.19999999999999996 },
f92ab29f 11238 { 0.67194346197695642, 5.0000000000000000, 5.0000000000000000,
7c62b943 11239 6.0000000000000000, -0.099999999999999978 },
f92ab29f 11240 { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
7c62b943 11241 6.0000000000000000, 0.0000000000000000 },
f92ab29f 11242 { 1.5503148146900136, 5.0000000000000000, 5.0000000000000000,
7c62b943 11243 6.0000000000000000, 0.10000000000000009 },
f92ab29f 11244 { 2.5278200136940998, 5.0000000000000000, 5.0000000000000000,
7c62b943 11245 6.0000000000000000, 0.19999999999999996 },
f92ab29f 11246 { 4.3933515329658954, 5.0000000000000000, 5.0000000000000000,
7c62b943 11247 6.0000000000000000, 0.30000000000000004 },
f92ab29f 11248 { 8.3000308946110888, 5.0000000000000000, 5.0000000000000000,
7c62b943 11249 6.0000000000000000, 0.39999999999999991 },
f92ab29f 11250 { 17.570215556257921, 5.0000000000000000, 5.0000000000000000,
7c62b943 11251 6.0000000000000000, 0.50000000000000000 },
f92ab29f 11252 { 43.847462183266167, 5.0000000000000000, 5.0000000000000000,
7c62b943 11253 6.0000000000000000, 0.60000000000000009 },
f92ab29f 11254 { 141.86909082943853, 5.0000000000000000, 5.0000000000000000,
7c62b943 11255 6.0000000000000000, 0.69999999999999996 },
f92ab29f 11256 { 736.63489653168926, 5.0000000000000000, 5.0000000000000000,
7c62b943 11257 6.0000000000000000, 0.80000000000000004 },
f92ab29f 11258 { 12117.500593515439, 5.0000000000000000, 5.0000000000000000,
7c62b943
BK
11259 6.0000000000000000, 0.89999999999999991 },
11260};
11261
11262// Test function for a=5.0000000000000000, b=5.0000000000000000, c=6.0000000000000000.
11263template <typename Tp>
11264void test163()
11265{
11266 const Tp eps = std::numeric_limits<Tp>::epsilon();
11267 Tp max_abs_diff = -Tp(1);
11268 Tp max_abs_frac = -Tp(1);
11269 unsigned int num_datum = sizeof(data163)
11270 / sizeof(testcase_hyperg<double>);
11271 for (unsigned int i = 0; i < num_datum; ++i)
11272 {
11273 const Tp f = std::tr1::hyperg(Tp(data163[i].a), Tp(data163[i].b),
11274 Tp(data163[i].c), Tp(data163[i].x));
11275 const Tp f0 = data163[i].f0;
11276 const Tp diff = f - f0;
11277 if (std::abs(diff) > max_abs_diff)
11278 max_abs_diff = std::abs(diff);
11279 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11280 {
11281 const Tp frac = diff / f0;
11282 if (std::abs(frac) > max_abs_frac)
11283 max_abs_frac = std::abs(frac);
11284 }
11285 }
11286 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11287}
11288
11289// Test data for a=5.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
11290testcase_hyperg<double> data164[] = {
f92ab29f 11291 { 0.12409443806004232, 5.0000000000000000, 5.0000000000000000,
7c62b943 11292 8.0000000000000000, -0.90000000000000002 },
f92ab29f 11293 { 0.14886910375100412, 5.0000000000000000, 5.0000000000000000,
7c62b943 11294 8.0000000000000000, -0.80000000000000004 },
f92ab29f 11295 { 0.18023328876836334, 5.0000000000000000, 5.0000000000000000,
7c62b943 11296 8.0000000000000000, -0.69999999999999996 },
f92ab29f 11297 { 0.22044046981094714, 5.0000000000000000, 5.0000000000000000,
7c62b943 11298 8.0000000000000000, -0.59999999999999998 },
f92ab29f 11299 { 0.27271160690708801, 5.0000000000000000, 5.0000000000000000,
7c62b943 11300 8.0000000000000000, -0.50000000000000000 },
f92ab29f 11301 { 0.34174821195025840, 5.0000000000000000, 5.0000000000000000,
7c62b943 11302 8.0000000000000000, -0.40000000000000002 },
f92ab29f 11303 { 0.43457788826160237, 5.0000000000000000, 5.0000000000000000,
7c62b943 11304 8.0000000000000000, -0.30000000000000004 },
f92ab29f 11305 { 0.56199385898404552, 5.0000000000000000, 5.0000000000000000,
7c62b943 11306 8.0000000000000000, -0.19999999999999996 },
f92ab29f 11307 { 0.74109892753745221, 5.0000000000000000, 5.0000000000000000,
7c62b943 11308 8.0000000000000000, -0.099999999999999978 },
f92ab29f 11309 { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
7c62b943 11310 8.0000000000000000, 0.0000000000000000 },
f92ab29f 11311 { 1.3869229400096228, 5.0000000000000000, 5.0000000000000000,
7c62b943 11312 8.0000000000000000, 0.10000000000000009 },
f92ab29f 11313 { 1.9890168748121255, 5.0000000000000000, 5.0000000000000000,
7c62b943 11314 8.0000000000000000, 0.19999999999999996 },
f92ab29f 11315 { 2.9741205609307424, 5.0000000000000000, 5.0000000000000000,
7c62b943 11316 8.0000000000000000, 0.30000000000000004 },
f92ab29f 11317 { 4.6924751038237300, 5.0000000000000000, 5.0000000000000000,
7c62b943 11318 8.0000000000000000, 0.39999999999999991 },
f92ab29f 11319 { 7.9555939380658254, 5.0000000000000000, 5.0000000000000000,
7c62b943 11320 8.0000000000000000, 0.50000000000000000 },
f92ab29f 11321 { 14.933102063314404, 5.0000000000000000, 5.0000000000000000,
7c62b943 11322 8.0000000000000000, 0.60000000000000009 },
f92ab29f 11323 { 32.780461638447491, 5.0000000000000000, 5.0000000000000000,
7c62b943 11324 8.0000000000000000, 0.69999999999999996 },
f92ab29f 11325 { 94.848124287773530, 5.0000000000000000, 5.0000000000000000,
7c62b943 11326 8.0000000000000000, 0.80000000000000004 },
f92ab29f 11327 { 523.16034401517425, 5.0000000000000000, 5.0000000000000000,
7c62b943
BK
11328 8.0000000000000000, 0.89999999999999991 },
11329};
11330
11331// Test function for a=5.0000000000000000, b=5.0000000000000000, c=8.0000000000000000.
11332template <typename Tp>
11333void test164()
11334{
11335 const Tp eps = std::numeric_limits<Tp>::epsilon();
11336 Tp max_abs_diff = -Tp(1);
11337 Tp max_abs_frac = -Tp(1);
11338 unsigned int num_datum = sizeof(data164)
11339 / sizeof(testcase_hyperg<double>);
11340 for (unsigned int i = 0; i < num_datum; ++i)
11341 {
11342 const Tp f = std::tr1::hyperg(Tp(data164[i].a), Tp(data164[i].b),
11343 Tp(data164[i].c), Tp(data164[i].x));
11344 const Tp f0 = data164[i].f0;
11345 const Tp diff = f - f0;
11346 if (std::abs(diff) > max_abs_diff)
11347 max_abs_diff = std::abs(diff);
11348 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11349 {
11350 const Tp frac = diff / f0;
11351 if (std::abs(frac) > max_abs_frac)
11352 max_abs_frac = std::abs(frac);
11353 }
11354 }
11355 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11356}
11357
11358// Test data for a=5.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
11359testcase_hyperg<double> data165[] = {
f92ab29f 11360 { 0.17885405888526873, 5.0000000000000000, 5.0000000000000000,
7c62b943 11361 10.000000000000000, -0.90000000000000002 },
f92ab29f 11362 { 0.20861302518993380, 5.0000000000000000, 5.0000000000000000,
7c62b943 11363 10.000000000000000, -0.80000000000000004 },
f92ab29f 11364 { 0.24504033307244924, 5.0000000000000000, 5.0000000000000000,
7c62b943 11365 10.000000000000000, -0.69999999999999996 },
f92ab29f 11366 { 0.29007236051133478, 5.0000000000000000, 5.0000000000000000,
7c62b943 11367 10.000000000000000, -0.59999999999999998 },
f92ab29f 11368 { 0.34635542859732726, 5.0000000000000000, 5.0000000000000000,
7c62b943 11369 10.000000000000000, -0.50000000000000000 },
f92ab29f 11370 { 0.41756858504598376, 5.0000000000000000, 5.0000000000000000,
7c62b943 11371 10.000000000000000, -0.40000000000000002 },
f92ab29f 11372 { 0.50892615622124382, 5.0000000000000000, 5.0000000000000000,
7c62b943 11373 10.000000000000000, -0.30000000000000004 },
f92ab29f 11374 { 0.62798173270509761, 5.0000000000000000, 5.0000000000000000,
7c62b943 11375 10.000000000000000, -0.19999999999999996 },
f92ab29f 11376 { 0.78595487360378424, 5.0000000000000000, 5.0000000000000000,
7c62b943 11377 10.000000000000000, -0.099999999999999978 },
f92ab29f 11378 { 1.0000000000000000, 5.0000000000000000, 5.0000000000000000,
7c62b943 11379 10.000000000000000, 0.0000000000000000 },
f92ab29f 11380 { 1.2972517637384813, 5.0000000000000000, 5.0000000000000000,
7c62b943 11381 10.000000000000000, 0.10000000000000009 },
f92ab29f 11382 { 1.7224028197396388, 5.0000000000000000, 5.0000000000000000,
7c62b943 11383 10.000000000000000, 0.19999999999999996 },
f92ab29f 11384 { 2.3527690438263305, 5.0000000000000000, 5.0000000000000000,
7c62b943 11385 10.000000000000000, 0.30000000000000004 },
f92ab29f 11386 { 3.3305218060101116, 5.0000000000000000, 5.0000000000000000,
7c62b943 11387 10.000000000000000, 0.39999999999999991 },
f92ab29f 11388 { 4.9383884076775466, 5.0000000000000000, 5.0000000000000000,
7c62b943 11389 10.000000000000000, 0.50000000000000000 },
f92ab29f 11390 { 7.8007604680775229, 5.0000000000000000, 5.0000000000000000,
7c62b943 11391 10.000000000000000, 0.60000000000000009 },
f92ab29f 11392 { 13.518663719271885, 5.0000000000000000, 5.0000000000000000,
7c62b943 11393 10.000000000000000, 0.69999999999999996 },
f92ab29f 11394 { 27.285345906502567, 5.0000000000000000, 5.0000000000000000,
7c62b943 11395 10.000000000000000, 0.80000000000000004 },
f92ab29f 11396 { 75.572415101501988, 5.0000000000000000, 5.0000000000000000,
7c62b943
BK
11397 10.000000000000000, 0.89999999999999991 },
11398};
11399
11400// Test function for a=5.0000000000000000, b=5.0000000000000000, c=10.000000000000000.
11401template <typename Tp>
11402void test165()
11403{
11404 const Tp eps = std::numeric_limits<Tp>::epsilon();
11405 Tp max_abs_diff = -Tp(1);
11406 Tp max_abs_frac = -Tp(1);
11407 unsigned int num_datum = sizeof(data165)
11408 / sizeof(testcase_hyperg<double>);
11409 for (unsigned int i = 0; i < num_datum; ++i)
11410 {
11411 const Tp f = std::tr1::hyperg(Tp(data165[i].a), Tp(data165[i].b),
11412 Tp(data165[i].c), Tp(data165[i].x));
11413 const Tp f0 = data165[i].f0;
11414 const Tp diff = f - f0;
11415 if (std::abs(diff) > max_abs_diff)
11416 max_abs_diff = std::abs(diff);
11417 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11418 {
11419 const Tp frac = diff / f0;
11420 if (std::abs(frac) > max_abs_frac)
11421 max_abs_frac = std::abs(frac);
11422 }
11423 }
11424 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11425}
11426
11427// Test data for a=5.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
11428testcase_hyperg<double> data166[] = {
f92ab29f 11429 { 0.00063586451658060152, 5.0000000000000000, 10.000000000000000,
7c62b943 11430 2.0000000000000000, -0.90000000000000002 },
f92ab29f 11431 { 0.0010334743461762443, 5.0000000000000000, 10.000000000000000,
7c62b943 11432 2.0000000000000000, -0.80000000000000004 },
f92ab29f 11433 { 0.0015326246054669515, 5.0000000000000000, 10.000000000000000,
7c62b943 11434 2.0000000000000000, -0.69999999999999996 },
f92ab29f 11435 { 0.0019007018181583387, 5.0000000000000000, 10.000000000000000,
7c62b943 11436 2.0000000000000000, -0.59999999999999998 },
f92ab29f 11437 { 0.0012845577715431577, 5.0000000000000000, 10.000000000000000,
7c62b943 11438 2.0000000000000000, -0.50000000000000000 },
f92ab29f 11439 { -0.0027213806178058826, 5.0000000000000000, 10.000000000000000,
7c62b943 11440 2.0000000000000000, -0.40000000000000002 },
f92ab29f 11441 { -0.015121744574954068, 5.0000000000000000, 10.000000000000000,
7c62b943 11442 2.0000000000000000, -0.30000000000000004 },
f92ab29f 11443 { -0.036637840562974443, 5.0000000000000000, 10.000000000000000,
7c62b943 11444 2.0000000000000000, -0.19999999999999996 },
f92ab29f 11445 { 0.019117849062621491, 5.0000000000000000, 10.000000000000000,
7c62b943 11446 2.0000000000000000, -0.099999999999999978 },
f92ab29f 11447 { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
7c62b943 11448 2.0000000000000000, 0.0000000000000000 },
f92ab29f 11449 { 9.8116901852350615, 5.0000000000000000, 10.000000000000000,
7c62b943 11450 2.0000000000000000, 0.10000000000000009 },
f92ab29f 11451 { 84.255589172244044, 5.0000000000000000, 10.000000000000000,
7c62b943 11452 2.0000000000000000, 0.19999999999999996 },
f92ab29f 11453 { 773.87517619421294, 5.0000000000000000, 10.000000000000000,
7c62b943 11454 2.0000000000000000, 0.30000000000000004 },
f92ab29f 11455 { 8556.9725363053585, 5.0000000000000000, 10.000000000000000,
7c62b943 11456 2.0000000000000000, 0.39999999999999991 },
f92ab29f 11457 { 129023.99999999996, 5.0000000000000000, 10.000000000000000,
7c62b943 11458 2.0000000000000000, 0.50000000000000000 },
f92ab29f 11459 { 3174543.3807373112, 5.0000000000000000, 10.000000000000000,
7c62b943 11460 2.0000000000000000, 0.60000000000000009 },
f92ab29f 11461 { 175133896.95814410, 5.0000000000000000, 10.000000000000000,
7c62b943 11462 2.0000000000000000, 0.69999999999999996 },
f92ab29f 11463 { 43564453125.000061, 5.0000000000000000, 10.000000000000000,
7c62b943 11464 2.0000000000000000, 0.80000000000000004 },
f92ab29f 11465 { 446859999999993.50, 5.0000000000000000, 10.000000000000000,
7c62b943
BK
11466 2.0000000000000000, 0.89999999999999991 },
11467};
11468
11469// Test function for a=5.0000000000000000, b=10.000000000000000, c=2.0000000000000000.
11470template <typename Tp>
11471void test166()
11472{
11473 const Tp eps = std::numeric_limits<Tp>::epsilon();
11474 Tp max_abs_diff = -Tp(1);
11475 Tp max_abs_frac = -Tp(1);
11476 unsigned int num_datum = sizeof(data166)
11477 / sizeof(testcase_hyperg<double>);
11478 for (unsigned int i = 0; i < num_datum; ++i)
11479 {
11480 const Tp f = std::tr1::hyperg(Tp(data166[i].a), Tp(data166[i].b),
11481 Tp(data166[i].c), Tp(data166[i].x));
11482 const Tp f0 = data166[i].f0;
11483 const Tp diff = f - f0;
11484 if (std::abs(diff) > max_abs_diff)
11485 max_abs_diff = std::abs(diff);
11486 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11487 {
11488 const Tp frac = diff / f0;
11489 if (std::abs(frac) > max_abs_frac)
11490 max_abs_frac = std::abs(frac);
11491 }
11492 }
11493 VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
11494}
11495
11496// Test data for a=5.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
11497testcase_hyperg<double> data167[] = {
f92ab29f 11498 { -0.00030045430691819899, 5.0000000000000000, 10.000000000000000,
7c62b943 11499 4.0000000000000000, -0.90000000000000002 },
f92ab29f 11500 { -0.00031119487747328581, 5.0000000000000000, 10.000000000000000,
7c62b943 11501 4.0000000000000000, -0.80000000000000004 },
f92ab29f 11502 { -0.00014589213141649274, 5.0000000000000000, 10.000000000000000,
7c62b943 11503 4.0000000000000000, -0.69999999999999996 },
f92ab29f 11504 { 0.00056843418860809121, 5.0000000000000000, 10.000000000000000,
7c62b943 11505 4.0000000000000000, -0.59999999999999998 },
f92ab29f 11506 { 0.0028902549859721725, 5.0000000000000000, 10.000000000000000,
7c62b943 11507 4.0000000000000000, -0.50000000000000000 },
f92ab29f 11508 { 0.0098776037238877470, 5.0000000000000000, 10.000000000000000,
7c62b943 11509 4.0000000000000000, -0.40000000000000002 },
f92ab29f 11510 { 0.030689217428863914, 5.0000000000000000, 10.000000000000000,
7c62b943 11511 4.0000000000000000, -0.30000000000000004 },
f92ab29f 11512 { 0.094211590019076599, 5.0000000000000000, 10.000000000000000,
7c62b943 11513 4.0000000000000000, -0.19999999999999996 },
f92ab29f 11514 { 0.29791981455918376, 5.0000000000000000, 10.000000000000000,
7c62b943 11515 4.0000000000000000, -0.099999999999999978 },
f92ab29f 11516 { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
7c62b943 11517 4.0000000000000000, 0.0000000000000000 },
f92ab29f 11518 { 3.6646308771236793, 5.0000000000000000, 10.000000000000000,
7c62b943 11519 4.0000000000000000, 0.10000000000000009 },
f92ab29f 11520 { 15.133991837501521, 5.0000000000000000, 10.000000000000000,
7c62b943 11521 4.0000000000000000, 0.19999999999999996 },
f92ab29f 11522 { 73.331330046144089, 5.0000000000000000, 10.000000000000000,
7c62b943 11523 4.0000000000000000, 0.30000000000000004 },
f92ab29f 11524 { 441.01791167787133, 5.0000000000000000, 10.000000000000000,
7c62b943 11525 4.0000000000000000, 0.39999999999999991 },
f92ab29f 11526 { 3583.9999999999991, 5.0000000000000000, 10.000000000000000,
7c62b943 11527 4.0000000000000000, 0.50000000000000000 },
f92ab29f 11528 { 45299.530029296984, 5.0000000000000000, 10.000000000000000,
7c62b943 11529 4.0000000000000000, 0.60000000000000009 },
f92ab29f 11530 { 1157231.0002427341, 5.0000000000000000, 10.000000000000000,
7c62b943 11531 4.0000000000000000, 0.69999999999999996 },
f92ab29f 11532 { 107421875.00000016, 5.0000000000000000, 10.000000000000000,
7c62b943 11533 4.0000000000000000, 0.80000000000000004 },
f92ab29f 11534 { 234999999999.99734, 5.0000000000000000, 10.000000000000000,
7c62b943
BK
11535 4.0000000000000000, 0.89999999999999991 },
11536};
11537
11538// Test function for a=5.0000000000000000, b=10.000000000000000, c=4.0000000000000000.
11539template <typename Tp>
11540void test167()
11541{
11542 const Tp eps = std::numeric_limits<Tp>::epsilon();
11543 Tp max_abs_diff = -Tp(1);
11544 Tp max_abs_frac = -Tp(1);
11545 unsigned int num_datum = sizeof(data167)
11546 / sizeof(testcase_hyperg<double>);
11547 for (unsigned int i = 0; i < num_datum; ++i)
11548 {
11549 const Tp f = std::tr1::hyperg(Tp(data167[i].a), Tp(data167[i].b),
11550 Tp(data167[i].c), Tp(data167[i].x));
11551 const Tp f0 = data167[i].f0;
11552 const Tp diff = f - f0;
11553 if (std::abs(diff) > max_abs_diff)
11554 max_abs_diff = std::abs(diff);
11555 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11556 {
11557 const Tp frac = diff / f0;
11558 if (std::abs(frac) > max_abs_frac)
11559 max_abs_frac = std::abs(frac);
11560 }
11561 }
11562 VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
11563}
11564
11565// Test data for a=5.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
11566testcase_hyperg<double> data168[] = {
f92ab29f 11567 { 0.0058530497315411210, 5.0000000000000000, 10.000000000000000,
7c62b943 11568 6.0000000000000000, -0.90000000000000002 },
f92ab29f 11569 { 0.0088526869356855692, 5.0000000000000000, 10.000000000000000,
7c62b943 11570 6.0000000000000000, -0.80000000000000004 },
f92ab29f 11571 { 0.013770987983443108, 5.0000000000000000, 10.000000000000000,
7c62b943 11572 6.0000000000000000, -0.69999999999999996 },
f92ab29f 11573 { 0.022108932690960800, 5.0000000000000000, 10.000000000000000,
7c62b943 11574 6.0000000000000000, -0.59999999999999998 },
f92ab29f 11575 { 0.036786236450921578, 5.0000000000000000, 10.000000000000000,
7c62b943 11576 6.0000000000000000, -0.50000000000000000 },
f92ab29f 11577 { 0.063750669040426422, 5.0000000000000000, 10.000000000000000,
7c62b943 11578 6.0000000000000000, -0.40000000000000002 },
f92ab29f 11579 { 0.11577228680714464, 5.0000000000000000, 10.000000000000000,
7c62b943 11580 6.0000000000000000, -0.30000000000000004 },
f92ab29f 11581 { 0.22197573416125735, 5.0000000000000000, 10.000000000000000,
7c62b943 11582 6.0000000000000000, -0.19999999999999996 },
f92ab29f 11583 { 0.45361312968415268, 5.0000000000000000, 10.000000000000000,
7c62b943 11584 6.0000000000000000, -0.099999999999999978 },
f92ab29f 11585 { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
7c62b943 11586 6.0000000000000000, 0.0000000000000000 },
f92ab29f 11587 { 2.4162889363082747, 5.0000000000000000, 10.000000000000000,
7c62b943 11588 6.0000000000000000, 0.10000000000000009 },
f92ab29f 11589 { 6.5381564791240399, 5.0000000000000000, 10.000000000000000,
7c62b943 11590 6.0000000000000000, 0.19999999999999996 },
f92ab29f 11591 { 20.415771011498428, 5.0000000000000000, 10.000000000000000,
7c62b943 11592 6.0000000000000000, 0.30000000000000004 },
f92ab29f 11593 { 76.870682056629221, 5.0000000000000000, 10.000000000000000,
7c62b943 11594 6.0000000000000000, 0.39999999999999991 },
f92ab29f 11595 { 373.58730158730162, 5.0000000000000000, 10.000000000000000,
7c62b943 11596 6.0000000000000000, 0.50000000000000000 },
f92ab29f 11597 { 2626.2555803571477, 5.0000000000000000, 10.000000000000000,
7c62b943 11598 6.0000000000000000, 0.60000000000000009 },
f92ab29f 11599 { 33060.960671081048, 5.0000000000000000, 10.000000000000000,
7c62b943 11600 6.0000000000000000, 0.69999999999999996 },
f92ab29f 11601 { 1203521.8253968258, 5.0000000000000000, 10.000000000000000,
7c62b943 11602 6.0000000000000000, 0.80000000000000004 },
f92ab29f 11603 { 584564285.71427989, 5.0000000000000000, 10.000000000000000,
7c62b943
BK
11604 6.0000000000000000, 0.89999999999999991 },
11605};
11606
11607// Test function for a=5.0000000000000000, b=10.000000000000000, c=6.0000000000000000.
11608template <typename Tp>
11609void test168()
11610{
11611 const Tp eps = std::numeric_limits<Tp>::epsilon();
11612 Tp max_abs_diff = -Tp(1);
11613 Tp max_abs_frac = -Tp(1);
11614 unsigned int num_datum = sizeof(data168)
11615 / sizeof(testcase_hyperg<double>);
11616 for (unsigned int i = 0; i < num_datum; ++i)
11617 {
11618 const Tp f = std::tr1::hyperg(Tp(data168[i].a), Tp(data168[i].b),
11619 Tp(data168[i].c), Tp(data168[i].x));
11620 const Tp f0 = data168[i].f0;
11621 const Tp diff = f - f0;
11622 if (std::abs(diff) > max_abs_diff)
11623 max_abs_diff = std::abs(diff);
11624 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11625 {
11626 const Tp frac = diff / f0;
11627 if (std::abs(frac) > max_abs_frac)
11628 max_abs_frac = std::abs(frac);
11629 }
11630 }
11631 VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
11632}
11633
11634// Test data for a=5.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
11635testcase_hyperg<double> data169[] = {
f92ab29f 11636 { 0.020248990107069400, 5.0000000000000000, 10.000000000000000,
7c62b943 11637 8.0000000000000000, -0.90000000000000002 },
f92ab29f 11638 { 0.027876687750502421, 5.0000000000000000, 10.000000000000000,
7c62b943 11639 8.0000000000000000, -0.80000000000000004 },
f92ab29f 11640 { 0.039154648888447781, 5.0000000000000000, 10.000000000000000,
7c62b943 11641 8.0000000000000000, -0.69999999999999996 },
f92ab29f 11642 { 0.056251883506774923, 5.0000000000000000, 10.000000000000000,
7c62b943 11643 8.0000000000000000, -0.59999999999999998 },
f92ab29f 11644 { 0.082914189910074432, 5.0000000000000000, 10.000000000000000,
7c62b943 11645 8.0000000000000000, -0.50000000000000000 },
f92ab29f 11646 { 0.12585357817786477, 5.0000000000000000, 10.000000000000000,
7c62b943 11647 8.0000000000000000, -0.40000000000000002 },
f92ab29f 11648 { 0.19761423206224929, 5.0000000000000000, 10.000000000000000,
7c62b943 11649 8.0000000000000000, -0.30000000000000004 },
f92ab29f 11650 { 0.32280443863359243, 5.0000000000000000, 10.000000000000000,
7c62b943 11651 8.0000000000000000, -0.19999999999999996 },
f92ab29f 11652 { 0.55250024062839465, 5.0000000000000000, 10.000000000000000,
7c62b943 11653 8.0000000000000000, -0.099999999999999978 },
f92ab29f 11654 { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
7c62b943 11655 8.0000000000000000, 0.0000000000000000 },
f92ab29f 11656 { 1.9374297986599267, 5.0000000000000000, 10.000000000000000,
7c62b943 11657 8.0000000000000000, 0.10000000000000009 },
f92ab29f 11658 { 4.0849049886067696, 5.0000000000000000, 10.000000000000000,
7c62b943 11659 8.0000000000000000, 0.19999999999999996 },
f92ab29f 11660 { 9.5926988633258983, 5.0000000000000000, 10.000000000000000,
7c62b943 11661 8.0000000000000000, 0.30000000000000004 },
f92ab29f 11662 { 25.958314281359531, 5.0000000000000000, 10.000000000000000,
7c62b943 11663 8.0000000000000000, 0.39999999999999991 },
f92ab29f 11664 { 85.333333333333300, 5.0000000000000000, 10.000000000000000,
7c62b943 11665 8.0000000000000000, 0.50000000000000000 },
f92ab29f 11666 { 372.31445312500028, 5.0000000000000000, 10.000000000000000,
7c62b943 11667 8.0000000000000000, 0.60000000000000009 },
f92ab29f 11668 { 2545.3436976070675, 5.0000000000000000, 10.000000000000000,
7c62b943 11669 8.0000000000000000, 0.69999999999999996 },
f92ab29f 11670 { 39583.333333333343, 5.0000000000000000, 10.000000000000000,
7c62b943 11671 8.0000000000000000, 0.80000000000000004 },
f92ab29f 11672 { 4599999.9999999627, 5.0000000000000000, 10.000000000000000,
7c62b943
BK
11673 8.0000000000000000, 0.89999999999999991 },
11674};
11675
11676// Test function for a=5.0000000000000000, b=10.000000000000000, c=8.0000000000000000.
11677template <typename Tp>
11678void test169()
11679{
11680 const Tp eps = std::numeric_limits<Tp>::epsilon();
11681 Tp max_abs_diff = -Tp(1);
11682 Tp max_abs_frac = -Tp(1);
11683 unsigned int num_datum = sizeof(data169)
11684 / sizeof(testcase_hyperg<double>);
11685 for (unsigned int i = 0; i < num_datum; ++i)
11686 {
11687 const Tp f = std::tr1::hyperg(Tp(data169[i].a), Tp(data169[i].b),
11688 Tp(data169[i].c), Tp(data169[i].x));
11689 const Tp f0 = data169[i].f0;
11690 const Tp diff = f - f0;
11691 if (std::abs(diff) > max_abs_diff)
11692 max_abs_diff = std::abs(diff);
11693 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11694 {
11695 const Tp frac = diff / f0;
11696 if (std::abs(frac) > max_abs_frac)
11697 max_abs_frac = std::abs(frac);
11698 }
11699 }
11700 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
11701}
11702
11703// Test data for a=5.0000000000000000, b=10.000000000000000, c=10.000000000000000.
11704testcase_hyperg<double> data170[] = {
f92ab29f 11705 { 0.040386107340619266, 5.0000000000000000, 10.000000000000000,
7c62b943 11706 10.000000000000000, -0.90000000000000002 },
f92ab29f 11707 { 0.052922149401344633, 5.0000000000000000, 10.000000000000000,
7c62b943 11708 10.000000000000000, -0.80000000000000004 },
f92ab29f 11709 { 0.070429627772374270, 5.0000000000000000, 10.000000000000000,
7c62b943 11710 10.000000000000000, -0.69999999999999996 },
f92ab29f 11711 { 0.095367431640624972, 5.0000000000000000, 10.000000000000000,
7c62b943 11712 10.000000000000000, -0.59999999999999998 },
f92ab29f 11713 { 0.13168724279835387, 5.0000000000000000, 10.000000000000000,
7c62b943 11714 10.000000000000000, -0.50000000000000000 },
f92ab29f 11715 { 0.18593443208187066, 5.0000000000000000, 10.000000000000000,
7c62b943 11716 10.000000000000000, -0.40000000000000002 },
f92ab29f 11717 { 0.26932907434290437, 5.0000000000000000, 10.000000000000000,
7c62b943 11718 10.000000000000000, -0.30000000000000004 },
f92ab29f 11719 { 0.40187757201646096, 5.0000000000000000, 10.000000000000000,
7c62b943 11720 10.000000000000000, -0.19999999999999996 },
f92ab29f 11721 { 0.62092132305915493, 5.0000000000000000, 10.000000000000000,
7c62b943 11722 10.000000000000000, -0.099999999999999978 },
f92ab29f 11723 { 1.0000000000000000, 5.0000000000000000, 10.000000000000000,
7c62b943 11724 10.000000000000000, 0.0000000000000000 },
f92ab29f 11725 { 1.6935087808430296, 5.0000000000000000, 10.000000000000000,
7c62b943 11726 10.000000000000000, 0.10000000000000009 },
f92ab29f 11727 { 3.0517578124999991, 5.0000000000000000, 10.000000000000000,
7c62b943 11728 10.000000000000000, 0.19999999999999996 },
f92ab29f 11729 { 5.9499018266198629, 5.0000000000000000, 10.000000000000000,
7c62b943 11730 10.000000000000000, 0.30000000000000004 },
f92ab29f 11731 { 12.860082304526737, 5.0000000000000000, 10.000000000000000,
7c62b943 11732 10.000000000000000, 0.39999999999999991 },
f92ab29f 11733 { 32.000000000000000, 5.0000000000000000, 10.000000000000000,
7c62b943 11734 10.000000000000000, 0.50000000000000000 },
f92ab29f 11735 { 97.656250000000114, 5.0000000000000000, 10.000000000000000,
7c62b943 11736 10.000000000000000, 0.60000000000000009 },
f92ab29f 11737 { 411.52263374485580, 5.0000000000000000, 10.000000000000000,
7c62b943 11738 10.000000000000000, 0.69999999999999996 },
f92ab29f 11739 { 3124.9999999999991, 5.0000000000000000, 10.000000000000000,
7c62b943 11740 10.000000000000000, 0.80000000000000004 },
f92ab29f 11741 { 99999.999999999665, 5.0000000000000000, 10.000000000000000,
7c62b943
BK
11742 10.000000000000000, 0.89999999999999991 },
11743};
11744
11745// Test function for a=5.0000000000000000, b=10.000000000000000, c=10.000000000000000.
11746template <typename Tp>
11747void test170()
11748{
11749 const Tp eps = std::numeric_limits<Tp>::epsilon();
11750 Tp max_abs_diff = -Tp(1);
11751 Tp max_abs_frac = -Tp(1);
11752 unsigned int num_datum = sizeof(data170)
11753 / sizeof(testcase_hyperg<double>);
11754 for (unsigned int i = 0; i < num_datum; ++i)
11755 {
11756 const Tp f = std::tr1::hyperg(Tp(data170[i].a), Tp(data170[i].b),
11757 Tp(data170[i].c), Tp(data170[i].x));
11758 const Tp f0 = data170[i].f0;
11759 const Tp diff = f - f0;
11760 if (std::abs(diff) > max_abs_diff)
11761 max_abs_diff = std::abs(diff);
11762 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11763 {
11764 const Tp frac = diff / f0;
11765 if (std::abs(frac) > max_abs_frac)
11766 max_abs_frac = std::abs(frac);
11767 }
11768 }
11769 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
11770}
11771
11772// Test data for a=5.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
11773testcase_hyperg<double> data171[] = {
f92ab29f 11774 { -1.8650300348791041e-05, 5.0000000000000000, 20.000000000000000,
7c62b943 11775 2.0000000000000000, -0.90000000000000002 },
f92ab29f 11776 { -3.6488008415183135e-05, 5.0000000000000000, 20.000000000000000,
7c62b943 11777 2.0000000000000000, -0.80000000000000004 },
f92ab29f 11778 { -6.4614776410999025e-05, 5.0000000000000000, 20.000000000000000,
7c62b943 11779 2.0000000000000000, -0.69999999999999996 },
f92ab29f 11780 { -8.4495207102575916e-05, 5.0000000000000000, 20.000000000000000,
7c62b943 11781 2.0000000000000000, -0.59999999999999998 },
f92ab29f 11782 { 2.2276197023819217e-05, 5.0000000000000000, 20.000000000000000,
7c62b943 11783 2.0000000000000000, -0.50000000000000000 },
f92ab29f 11784 { 0.00070736115111467578, 5.0000000000000000, 20.000000000000000,
7c62b943 11785 2.0000000000000000, -0.40000000000000002 },
f92ab29f 11786 { 0.0027829732057272809, 5.0000000000000000, 20.000000000000000,
7c62b943 11787 2.0000000000000000, -0.30000000000000004 },
f92ab29f 11788 { 0.0013283545664373570, 5.0000000000000000, 20.000000000000000,
7c62b943 11789 2.0000000000000000, -0.19999999999999996 },
f92ab29f 11790 { -0.041767631015048733, 5.0000000000000000, 20.000000000000000,
7c62b943 11791 2.0000000000000000, -0.099999999999999978 },
f92ab29f 11792 { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
7c62b943 11793 2.0000000000000000, 0.0000000000000000 },
f92ab29f 11794 { 61.311496556100003, 5.0000000000000000, 20.000000000000000,
7c62b943 11795 2.0000000000000000, 0.10000000000000009 },
f92ab29f 11796 { 2397.4420539085681, 5.0000000000000000, 20.000000000000000,
7c62b943 11797 2.0000000000000000, 0.19999999999999996 },
f92ab29f 11798 { 103687.60998586559, 5.0000000000000000, 20.000000000000000,
7c62b943 11799 2.0000000000000000, 0.30000000000000004 },
f92ab29f 11800 { 6247196.6451068865, 5.0000000000000000, 20.000000000000000,
7c62b943 11801 2.0000000000000000, 0.39999999999999991 },
f92ab29f 11802 { 656408576.00000000, 5.0000000000000000, 20.000000000000000,
7c62b943 11803 2.0000000000000000, 0.50000000000000000 },
f92ab29f 11804 { 165334768098.54715, 5.0000000000000000, 20.000000000000000,
7c62b943 11805 2.0000000000000000, 0.60000000000000009 },
f92ab29f 11806 { 175097125520816.81, 5.0000000000000000, 20.000000000000000,
7c62b943 11807 2.0000000000000000, 0.69999999999999996 },
f92ab29f 11808 { 2.6818275451660257e+18, 5.0000000000000000, 20.000000000000000,
7c62b943 11809 2.0000000000000000, 0.80000000000000004 },
f92ab29f 11810 { 2.9794599999999321e+25, 5.0000000000000000, 20.000000000000000,
7c62b943
BK
11811 2.0000000000000000, 0.89999999999999991 },
11812};
11813
11814// Test function for a=5.0000000000000000, b=20.000000000000000, c=2.0000000000000000.
11815template <typename Tp>
11816void test171()
11817{
11818 const Tp eps = std::numeric_limits<Tp>::epsilon();
11819 Tp max_abs_diff = -Tp(1);
11820 Tp max_abs_frac = -Tp(1);
11821 unsigned int num_datum = sizeof(data171)
11822 / sizeof(testcase_hyperg<double>);
11823 for (unsigned int i = 0; i < num_datum; ++i)
11824 {
11825 const Tp f = std::tr1::hyperg(Tp(data171[i].a), Tp(data171[i].b),
11826 Tp(data171[i].c), Tp(data171[i].x));
11827 const Tp f0 = data171[i].f0;
11828 const Tp diff = f - f0;
11829 if (std::abs(diff) > max_abs_diff)
11830 max_abs_diff = std::abs(diff);
11831 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11832 {
11833 const Tp frac = diff / f0;
11834 if (std::abs(frac) > max_abs_frac)
11835 max_abs_frac = std::abs(frac);
11836 }
11837 }
11838 VERIFY(max_abs_frac < Tp(5.0000000000000034e-10));
11839}
11840
11841// Test data for a=5.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
11842testcase_hyperg<double> data172[] = {
f92ab29f 11843 { -3.6403884515183385e-06, 5.0000000000000000, 20.000000000000000,
7c62b943 11844 4.0000000000000000, -0.90000000000000002 },
f92ab29f 11845 { -9.5873829247725586e-06, 5.0000000000000000, 20.000000000000000,
7c62b943 11846 4.0000000000000000, -0.80000000000000004 },
f92ab29f 11847 { -2.6052245147354694e-05, 5.0000000000000000, 20.000000000000000,
7c62b943 11848 4.0000000000000000, -0.69999999999999996 },
f92ab29f 11849 { -7.2378303598294010e-05, 5.0000000000000000, 20.000000000000000,
7c62b943 11850 4.0000000000000000, -0.59999999999999998 },
f92ab29f 11851 { -0.00020048577321454082, 5.0000000000000000, 20.000000000000000,
7c62b943 11852 4.0000000000000000, -0.50000000000000000 },
f92ab29f 11853 { -0.00051222704046236022, 5.0000000000000000, 20.000000000000000,
7c62b943 11854 4.0000000000000000, -0.40000000000000002 },
f92ab29f 11855 { -0.00080950511491911315, 5.0000000000000000, 20.000000000000000,
7c62b943 11856 4.0000000000000000, -0.30000000000000004 },
f92ab29f 11857 { 0.0043473422174314449, 5.0000000000000000, 20.000000000000000,
7c62b943 11858 4.0000000000000000, -0.19999999999999996 },
f92ab29f 11859 { 0.081078342558623825, 5.0000000000000000, 20.000000000000000,
7c62b943 11860 4.0000000000000000, -0.099999999999999978 },
f92ab29f 11861 { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
7c62b943 11862 4.0000000000000000, 0.0000000000000000 },
f92ab29f 11863 { 12.794854084397739, 5.0000000000000000, 20.000000000000000,
7c62b943 11864 4.0000000000000000, 0.10000000000000009 },
f92ab29f 11865 { 195.15639104739046, 5.0000000000000000, 20.000000000000000,
7c62b943 11866 4.0000000000000000, 0.19999999999999996 },
f92ab29f 11867 { 3938.7991953190131, 5.0000000000000000, 20.000000000000000,
7c62b943 11868 4.0000000000000000, 0.30000000000000004 },
f92ab29f 11869 { 118521.48653762060, 5.0000000000000000, 20.000000000000000,
7c62b943 11870 4.0000000000000000, 0.39999999999999991 },
f92ab29f 11871 { 6291455.9999999972, 5.0000000000000000, 20.000000000000000,
7c62b943 11872 4.0000000000000000, 0.50000000000000000 },
f92ab29f 11873 { 773070496.50699198, 5.0000000000000000, 20.000000000000000,
7c62b943 11874 4.0000000000000000, 0.60000000000000009 },
f92ab29f 11875 { 363276452167.04102, 5.0000000000000000, 20.000000000000000,
7c62b943 11876 4.0000000000000000, 0.69999999999999996 },
f92ab29f 11877 { 2002716064453133.0, 5.0000000000000000, 20.000000000000000,
7c62b943 11878 4.0000000000000000, 0.80000000000000004 },
f92ab29f 11879 { 4.5999999999999109e+21, 5.0000000000000000, 20.000000000000000,
7c62b943
BK
11880 4.0000000000000000, 0.89999999999999991 },
11881};
11882
11883// Test function for a=5.0000000000000000, b=20.000000000000000, c=4.0000000000000000.
11884template <typename Tp>
11885void test172()
11886{
11887 const Tp eps = std::numeric_limits<Tp>::epsilon();
11888 Tp max_abs_diff = -Tp(1);
11889 Tp max_abs_frac = -Tp(1);
11890 unsigned int num_datum = sizeof(data172)
11891 / sizeof(testcase_hyperg<double>);
11892 for (unsigned int i = 0; i < num_datum; ++i)
11893 {
11894 const Tp f = std::tr1::hyperg(Tp(data172[i].a), Tp(data172[i].b),
11895 Tp(data172[i].c), Tp(data172[i].x));
11896 const Tp f0 = data172[i].f0;
11897 const Tp diff = f - f0;
11898 if (std::abs(diff) > max_abs_diff)
11899 max_abs_diff = std::abs(diff);
11900 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11901 {
11902 const Tp frac = diff / f0;
11903 if (std::abs(frac) > max_abs_frac)
11904 max_abs_frac = std::abs(frac);
11905 }
11906 }
11907 VERIFY(max_abs_frac < Tp(2.5000000000000013e-09));
11908}
11909
11910// Test data for a=5.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
11911testcase_hyperg<double> data173[] = {
f92ab29f 11912 { 0.00014313323624069244, 5.0000000000000000, 20.000000000000000,
7c62b943 11913 6.0000000000000000, -0.90000000000000002 },
f92ab29f 11914 { 0.00025426183473140697, 5.0000000000000000, 20.000000000000000,
7c62b943 11915 6.0000000000000000, -0.80000000000000004 },
f92ab29f 11916 { 0.00048255612836426809, 5.0000000000000000, 20.000000000000000,
7c62b943 11917 6.0000000000000000, -0.69999999999999996 },
f92ab29f 11918 { 0.00099096904674788092, 5.0000000000000000, 20.000000000000000,
7c62b943 11919 6.0000000000000000, -0.59999999999999998 },
f92ab29f 11920 { 0.0022347805521915607, 5.0000000000000000, 20.000000000000000,
7c62b943 11921 6.0000000000000000, -0.50000000000000000 },
f92ab29f 11922 { 0.0056271390060292376, 5.0000000000000000, 20.000000000000000,
7c62b943 11923 6.0000000000000000, -0.40000000000000002 },
f92ab29f 11924 { 0.016109059519227226, 5.0000000000000000, 20.000000000000000,
7c62b943 11925 6.0000000000000000, -0.30000000000000004 },
f92ab29f 11926 { 0.053453465775608999, 5.0000000000000000, 20.000000000000000,
7c62b943 11927 6.0000000000000000, -0.19999999999999996 },
f92ab29f 11928 { 0.20995202901839258, 5.0000000000000000, 20.000000000000000,
7c62b943 11929 6.0000000000000000, -0.099999999999999978 },
f92ab29f 11930 { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
7c62b943 11931 6.0000000000000000, 0.0000000000000000 },
f92ab29f 11932 { 5.9534372167648799, 5.0000000000000000, 20.000000000000000,
7c62b943 11933 6.0000000000000000, 0.10000000000000009 },
f92ab29f 11934 { 46.157632071205875, 5.0000000000000000, 20.000000000000000,
7c62b943 11935 6.0000000000000000, 0.19999999999999996 },
f92ab29f 11936 { 494.32074431164915, 5.0000000000000000, 20.000000000000000,
7c62b943 11937 6.0000000000000000, 0.30000000000000004 },
f92ab29f 11938 { 7989.5277611775946, 5.0000000000000000, 20.000000000000000,
7c62b943 11939 6.0000000000000000, 0.39999999999999991 },
f92ab29f 11940 { 224179.55830753347, 5.0000000000000000, 20.000000000000000,
7c62b943 11941 6.0000000000000000, 0.50000000000000000 },
f92ab29f 11942 { 13848144.485282511, 5.0000000000000000, 20.000000000000000,
7c62b943 11943 6.0000000000000000, 0.60000000000000009 },
f92ab29f 11944 { 2948587692.8891716, 5.0000000000000000, 20.000000000000000,
7c62b943 11945 6.0000000000000000, 0.69999999999999996 },
f92ab29f 11946 { 5940513286161.6602, 5.0000000000000000, 20.000000000000000,
7c62b943 11947 6.0000000000000000, 0.80000000000000004 },
f92ab29f 11948 { 2.8531757655945201e+18, 5.0000000000000000, 20.000000000000000,
7c62b943
BK
11949 6.0000000000000000, 0.89999999999999991 },
11950};
11951
11952// Test function for a=5.0000000000000000, b=20.000000000000000, c=6.0000000000000000.
11953template <typename Tp>
11954void test173()
11955{
11956 const Tp eps = std::numeric_limits<Tp>::epsilon();
11957 Tp max_abs_diff = -Tp(1);
11958 Tp max_abs_frac = -Tp(1);
11959 unsigned int num_datum = sizeof(data173)
11960 / sizeof(testcase_hyperg<double>);
11961 for (unsigned int i = 0; i < num_datum; ++i)
11962 {
11963 const Tp f = std::tr1::hyperg(Tp(data173[i].a), Tp(data173[i].b),
11964 Tp(data173[i].c), Tp(data173[i].x));
11965 const Tp f0 = data173[i].f0;
11966 const Tp diff = f - f0;
11967 if (std::abs(diff) > max_abs_diff)
11968 max_abs_diff = std::abs(diff);
11969 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
11970 {
11971 const Tp frac = diff / f0;
11972 if (std::abs(frac) > max_abs_frac)
11973 max_abs_frac = std::abs(frac);
11974 }
11975 }
11976 VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
11977}
11978
11979// Test data for a=5.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
11980testcase_hyperg<double> data174[] = {
f92ab29f 11981 { 0.0012492049968742865, 5.0000000000000000, 20.000000000000000,
7c62b943 11982 8.0000000000000000, -0.90000000000000002 },
f92ab29f 11983 { 0.0019931241968014451, 5.0000000000000000, 20.000000000000000,
7c62b943 11984 8.0000000000000000, -0.80000000000000004 },
f92ab29f 11985 { 0.0033203386861411057, 5.0000000000000000, 20.000000000000000,
7c62b943 11986 8.0000000000000000, -0.69999999999999996 },
f92ab29f 11987 { 0.0058191894509855282, 5.0000000000000000, 20.000000000000000,
7c62b943 11988 8.0000000000000000, -0.59999999999999998 },
f92ab29f 11989 { 0.010830090368313866, 5.0000000000000000, 20.000000000000000,
7c62b943 11990 8.0000000000000000, -0.50000000000000000 },
f92ab29f 11991 { 0.021653062305193163, 5.0000000000000000, 20.000000000000000,
7c62b943 11992 8.0000000000000000, -0.40000000000000002 },
f92ab29f 11993 { 0.047180821280919084, 5.0000000000000000, 20.000000000000000,
7c62b943 11994 8.0000000000000000, -0.30000000000000004 },
f92ab29f 11995 { 0.11405637279736180, 5.0000000000000000, 20.000000000000000,
7c62b943 11996 8.0000000000000000, -0.19999999999999996 },
f92ab29f 11997 { 0.31275468794720990, 5.0000000000000000, 20.000000000000000,
7c62b943 11998 8.0000000000000000, -0.099999999999999978 },
f92ab29f 11999 { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
7c62b943 12000 8.0000000000000000, 0.0000000000000000 },
f92ab29f 12001 { 3.8598904658643969, 5.0000000000000000, 20.000000000000000,
7c62b943 12002 8.0000000000000000, 0.10000000000000009 },
f92ab29f 12003 { 18.806301417906667, 5.0000000000000000, 20.000000000000000,
7c62b943 12004 8.0000000000000000, 0.19999999999999996 },
f92ab29f 12005 { 122.77054465017432, 5.0000000000000000, 20.000000000000000,
7c62b943 12006 8.0000000000000000, 0.30000000000000004 },
f92ab29f 12007 { 1168.4762146808946, 5.0000000000000000, 20.000000000000000,
7c62b943 12008 8.0000000000000000, 0.39999999999999991 },
f92ab29f 12009 { 18437.511788521082, 5.0000000000000000, 20.000000000000000,
7c62b943 12010 8.0000000000000000, 0.50000000000000000 },
f92ab29f 12011 { 597441.79669264762, 5.0000000000000000, 20.000000000000000,
7c62b943 12012 8.0000000000000000, 0.60000000000000009 },
f92ab29f 12013 { 59390411.369227782, 5.0000000000000000, 20.000000000000000,
7c62b943 12014 8.0000000000000000, 0.69999999999999996 },
f92ab29f 12015 { 44681668993.361603, 5.0000000000000000, 20.000000000000000,
7c62b943 12016 8.0000000000000000, 0.80000000000000004 },
f92ab29f 12017 { 4559673269683164.0, 5.0000000000000000, 20.000000000000000,
7c62b943
BK
12018 8.0000000000000000, 0.89999999999999991 },
12019};
12020
12021// Test function for a=5.0000000000000000, b=20.000000000000000, c=8.0000000000000000.
12022template <typename Tp>
12023void test174()
12024{
12025 const Tp eps = std::numeric_limits<Tp>::epsilon();
12026 Tp max_abs_diff = -Tp(1);
12027 Tp max_abs_frac = -Tp(1);
12028 unsigned int num_datum = sizeof(data174)
12029 / sizeof(testcase_hyperg<double>);
12030 for (unsigned int i = 0; i < num_datum; ++i)
12031 {
12032 const Tp f = std::tr1::hyperg(Tp(data174[i].a), Tp(data174[i].b),
12033 Tp(data174[i].c), Tp(data174[i].x));
12034 const Tp f0 = data174[i].f0;
12035 const Tp diff = f - f0;
12036 if (std::abs(diff) > max_abs_diff)
12037 max_abs_diff = std::abs(diff);
12038 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12039 {
12040 const Tp frac = diff / f0;
12041 if (std::abs(frac) > max_abs_frac)
12042 max_abs_frac = std::abs(frac);
12043 }
12044 }
12045 VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
12046}
12047
12048// Test data for a=5.0000000000000000, b=20.000000000000000, c=10.000000000000000.
12049testcase_hyperg<double> data175[] = {
f92ab29f 12050 { 0.0038867957051371450, 5.0000000000000000, 20.000000000000000,
7c62b943 12051 10.000000000000000, -0.90000000000000002 },
f92ab29f 12052 { 0.0058484892597364443, 5.0000000000000000, 20.000000000000000,
7c62b943 12053 10.000000000000000, -0.80000000000000004 },
f92ab29f 12054 { 0.0090987656053757009, 5.0000000000000000, 20.000000000000000,
7c62b943 12055 10.000000000000000, -0.69999999999999996 },
f92ab29f 12056 { 0.014714392537270733, 5.0000000000000000, 20.000000000000000,
7c62b943 12057 10.000000000000000, -0.59999999999999998 },
f92ab29f 12058 { 0.024900404542056769, 5.0000000000000000, 20.000000000000000,
7c62b943 12059 10.000000000000000, -0.50000000000000000 },
f92ab29f 12060 { 0.044460184663785055, 5.0000000000000000, 20.000000000000000,
7c62b943 12061 10.000000000000000, -0.40000000000000002 },
f92ab29f 12062 { 0.084638849196356836, 5.0000000000000000, 20.000000000000000,
7c62b943 12063 10.000000000000000, -0.30000000000000004 },
f92ab29f 12064 { 0.17409058241290998, 5.0000000000000000, 20.000000000000000,
7c62b943 12065 10.000000000000000, -0.19999999999999996 },
f92ab29f 12066 { 0.39357055823580755, 5.0000000000000000, 20.000000000000000,
7c62b943 12067 10.000000000000000, -0.099999999999999978 },
f92ab29f 12068 { 1.0000000000000000, 5.0000000000000000, 20.000000000000000,
7c62b943 12069 10.000000000000000, 0.0000000000000000 },
f92ab29f 12070 { 2.9410794636226596, 5.0000000000000000, 20.000000000000000,
7c62b943 12071 10.000000000000000, 0.10000000000000009 },
f92ab29f 12072 { 10.417226071414344, 5.0000000000000000, 20.000000000000000,
7c62b943 12073 10.000000000000000, 0.19999999999999996 },
f92ab29f 12074 { 46.930585873140835, 5.0000000000000000, 20.000000000000000,
7c62b943 12075 10.000000000000000, 0.30000000000000004 },
f92ab29f 12076 { 290.76717121814852, 5.0000000000000000, 20.000000000000000,
7c62b943 12077 10.000000000000000, 0.39999999999999991 },
f92ab29f 12078 { 2788.1641083374830, 5.0000000000000000, 20.000000000000000,
7c62b943 12079 10.000000000000000, 0.50000000000000000 },
f92ab29f 12080 { 50228.117718560752, 5.0000000000000000, 20.000000000000000,
7c62b943 12081 10.000000000000000, 0.60000000000000009 },
f92ab29f 12082 { 2433042.3476752634, 5.0000000000000000, 20.000000000000000,
7c62b943 12083 10.000000000000000, 0.69999999999999996 },
f92ab29f 12084 { 705345246.77141762, 5.0000000000000000, 20.000000000000000,
7c62b943 12085 10.000000000000000, 0.80000000000000004 },
f92ab29f 12086 { 15652478868616.762, 5.0000000000000000, 20.000000000000000,
7c62b943
BK
12087 10.000000000000000, 0.89999999999999991 },
12088};
12089
12090// Test function for a=5.0000000000000000, b=20.000000000000000, c=10.000000000000000.
12091template <typename Tp>
12092void test175()
12093{
12094 const Tp eps = std::numeric_limits<Tp>::epsilon();
12095 Tp max_abs_diff = -Tp(1);
12096 Tp max_abs_frac = -Tp(1);
12097 unsigned int num_datum = sizeof(data175)
12098 / sizeof(testcase_hyperg<double>);
12099 for (unsigned int i = 0; i < num_datum; ++i)
12100 {
12101 const Tp f = std::tr1::hyperg(Tp(data175[i].a), Tp(data175[i].b),
12102 Tp(data175[i].c), Tp(data175[i].x));
12103 const Tp f0 = data175[i].f0;
12104 const Tp diff = f - f0;
12105 if (std::abs(diff) > max_abs_diff)
12106 max_abs_diff = std::abs(diff);
12107 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12108 {
12109 const Tp frac = diff / f0;
12110 if (std::abs(frac) > max_abs_frac)
12111 max_abs_frac = std::abs(frac);
12112 }
12113 }
12114 VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
12115}
12116
12117// Test data for a=10.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
12118testcase_hyperg<double> data176[] = {
f92ab29f 12119 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12120 2.0000000000000000, -0.90000000000000002 },
f92ab29f 12121 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12122 2.0000000000000000, -0.80000000000000004 },
f92ab29f 12123 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12124 2.0000000000000000, -0.69999999999999996 },
f92ab29f 12125 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12126 2.0000000000000000, -0.59999999999999998 },
f92ab29f 12127 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12128 2.0000000000000000, -0.50000000000000000 },
f92ab29f 12129 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12130 2.0000000000000000, -0.40000000000000002 },
f92ab29f 12131 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12132 2.0000000000000000, -0.30000000000000004 },
f92ab29f 12133 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12134 2.0000000000000000, -0.19999999999999996 },
f92ab29f 12135 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12136 2.0000000000000000, -0.099999999999999978 },
f92ab29f 12137 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12138 2.0000000000000000, 0.0000000000000000 },
f92ab29f 12139 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12140 2.0000000000000000, 0.10000000000000009 },
f92ab29f 12141 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12142 2.0000000000000000, 0.19999999999999996 },
f92ab29f 12143 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12144 2.0000000000000000, 0.30000000000000004 },
f92ab29f 12145 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12146 2.0000000000000000, 0.39999999999999991 },
f92ab29f 12147 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12148 2.0000000000000000, 0.50000000000000000 },
f92ab29f 12149 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12150 2.0000000000000000, 0.60000000000000009 },
f92ab29f 12151 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12152 2.0000000000000000, 0.69999999999999996 },
f92ab29f 12153 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12154 2.0000000000000000, 0.80000000000000004 },
f92ab29f 12155 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943
BK
12156 2.0000000000000000, 0.89999999999999991 },
12157};
12158
12159// Test function for a=10.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
12160template <typename Tp>
12161void test176()
12162{
12163 const Tp eps = std::numeric_limits<Tp>::epsilon();
12164 Tp max_abs_diff = -Tp(1);
12165 Tp max_abs_frac = -Tp(1);
12166 unsigned int num_datum = sizeof(data176)
12167 / sizeof(testcase_hyperg<double>);
12168 for (unsigned int i = 0; i < num_datum; ++i)
12169 {
12170 const Tp f = std::tr1::hyperg(Tp(data176[i].a), Tp(data176[i].b),
12171 Tp(data176[i].c), Tp(data176[i].x));
12172 const Tp f0 = data176[i].f0;
12173 const Tp diff = f - f0;
12174 if (std::abs(diff) > max_abs_diff)
12175 max_abs_diff = std::abs(diff);
12176 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12177 {
12178 const Tp frac = diff / f0;
12179 if (std::abs(frac) > max_abs_frac)
12180 max_abs_frac = std::abs(frac);
12181 }
12182 }
12183 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12184}
12185
12186// Test data for a=10.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
12187testcase_hyperg<double> data177[] = {
f92ab29f 12188 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12189 4.0000000000000000, -0.90000000000000002 },
f92ab29f 12190 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12191 4.0000000000000000, -0.80000000000000004 },
f92ab29f 12192 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12193 4.0000000000000000, -0.69999999999999996 },
f92ab29f 12194 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12195 4.0000000000000000, -0.59999999999999998 },
f92ab29f 12196 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12197 4.0000000000000000, -0.50000000000000000 },
f92ab29f 12198 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12199 4.0000000000000000, -0.40000000000000002 },
f92ab29f 12200 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12201 4.0000000000000000, -0.30000000000000004 },
f92ab29f 12202 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12203 4.0000000000000000, -0.19999999999999996 },
f92ab29f 12204 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12205 4.0000000000000000, -0.099999999999999978 },
f92ab29f 12206 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12207 4.0000000000000000, 0.0000000000000000 },
f92ab29f 12208 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12209 4.0000000000000000, 0.10000000000000009 },
f92ab29f 12210 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12211 4.0000000000000000, 0.19999999999999996 },
f92ab29f 12212 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12213 4.0000000000000000, 0.30000000000000004 },
f92ab29f 12214 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12215 4.0000000000000000, 0.39999999999999991 },
f92ab29f 12216 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12217 4.0000000000000000, 0.50000000000000000 },
f92ab29f 12218 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12219 4.0000000000000000, 0.60000000000000009 },
f92ab29f 12220 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12221 4.0000000000000000, 0.69999999999999996 },
f92ab29f 12222 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12223 4.0000000000000000, 0.80000000000000004 },
f92ab29f 12224 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943
BK
12225 4.0000000000000000, 0.89999999999999991 },
12226};
12227
12228// Test function for a=10.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
12229template <typename Tp>
12230void test177()
12231{
12232 const Tp eps = std::numeric_limits<Tp>::epsilon();
12233 Tp max_abs_diff = -Tp(1);
12234 Tp max_abs_frac = -Tp(1);
12235 unsigned int num_datum = sizeof(data177)
12236 / sizeof(testcase_hyperg<double>);
12237 for (unsigned int i = 0; i < num_datum; ++i)
12238 {
12239 const Tp f = std::tr1::hyperg(Tp(data177[i].a), Tp(data177[i].b),
12240 Tp(data177[i].c), Tp(data177[i].x));
12241 const Tp f0 = data177[i].f0;
12242 const Tp diff = f - f0;
12243 if (std::abs(diff) > max_abs_diff)
12244 max_abs_diff = std::abs(diff);
12245 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12246 {
12247 const Tp frac = diff / f0;
12248 if (std::abs(frac) > max_abs_frac)
12249 max_abs_frac = std::abs(frac);
12250 }
12251 }
12252 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12253}
12254
12255// Test data for a=10.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
12256testcase_hyperg<double> data178[] = {
f92ab29f 12257 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12258 6.0000000000000000, -0.90000000000000002 },
f92ab29f 12259 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12260 6.0000000000000000, -0.80000000000000004 },
f92ab29f 12261 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12262 6.0000000000000000, -0.69999999999999996 },
f92ab29f 12263 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12264 6.0000000000000000, -0.59999999999999998 },
f92ab29f 12265 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12266 6.0000000000000000, -0.50000000000000000 },
f92ab29f 12267 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12268 6.0000000000000000, -0.40000000000000002 },
f92ab29f 12269 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12270 6.0000000000000000, -0.30000000000000004 },
f92ab29f 12271 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12272 6.0000000000000000, -0.19999999999999996 },
f92ab29f 12273 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12274 6.0000000000000000, -0.099999999999999978 },
f92ab29f 12275 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12276 6.0000000000000000, 0.0000000000000000 },
f92ab29f 12277 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12278 6.0000000000000000, 0.10000000000000009 },
f92ab29f 12279 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12280 6.0000000000000000, 0.19999999999999996 },
f92ab29f 12281 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12282 6.0000000000000000, 0.30000000000000004 },
f92ab29f 12283 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12284 6.0000000000000000, 0.39999999999999991 },
f92ab29f 12285 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12286 6.0000000000000000, 0.50000000000000000 },
f92ab29f 12287 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12288 6.0000000000000000, 0.60000000000000009 },
f92ab29f 12289 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12290 6.0000000000000000, 0.69999999999999996 },
f92ab29f 12291 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12292 6.0000000000000000, 0.80000000000000004 },
f92ab29f 12293 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943
BK
12294 6.0000000000000000, 0.89999999999999991 },
12295};
12296
12297// Test function for a=10.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
12298template <typename Tp>
12299void test178()
12300{
12301 const Tp eps = std::numeric_limits<Tp>::epsilon();
12302 Tp max_abs_diff = -Tp(1);
12303 Tp max_abs_frac = -Tp(1);
12304 unsigned int num_datum = sizeof(data178)
12305 / sizeof(testcase_hyperg<double>);
12306 for (unsigned int i = 0; i < num_datum; ++i)
12307 {
12308 const Tp f = std::tr1::hyperg(Tp(data178[i].a), Tp(data178[i].b),
12309 Tp(data178[i].c), Tp(data178[i].x));
12310 const Tp f0 = data178[i].f0;
12311 const Tp diff = f - f0;
12312 if (std::abs(diff) > max_abs_diff)
12313 max_abs_diff = std::abs(diff);
12314 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12315 {
12316 const Tp frac = diff / f0;
12317 if (std::abs(frac) > max_abs_frac)
12318 max_abs_frac = std::abs(frac);
12319 }
12320 }
12321 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12322}
12323
12324// Test data for a=10.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
12325testcase_hyperg<double> data179[] = {
f92ab29f 12326 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12327 8.0000000000000000, -0.90000000000000002 },
f92ab29f 12328 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12329 8.0000000000000000, -0.80000000000000004 },
f92ab29f 12330 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12331 8.0000000000000000, -0.69999999999999996 },
f92ab29f 12332 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12333 8.0000000000000000, -0.59999999999999998 },
f92ab29f 12334 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12335 8.0000000000000000, -0.50000000000000000 },
f92ab29f 12336 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12337 8.0000000000000000, -0.40000000000000002 },
f92ab29f 12338 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12339 8.0000000000000000, -0.30000000000000004 },
f92ab29f 12340 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12341 8.0000000000000000, -0.19999999999999996 },
f92ab29f 12342 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12343 8.0000000000000000, -0.099999999999999978 },
f92ab29f 12344 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12345 8.0000000000000000, 0.0000000000000000 },
f92ab29f 12346 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12347 8.0000000000000000, 0.10000000000000009 },
f92ab29f 12348 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12349 8.0000000000000000, 0.19999999999999996 },
f92ab29f 12350 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12351 8.0000000000000000, 0.30000000000000004 },
f92ab29f 12352 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12353 8.0000000000000000, 0.39999999999999991 },
f92ab29f 12354 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12355 8.0000000000000000, 0.50000000000000000 },
f92ab29f 12356 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12357 8.0000000000000000, 0.60000000000000009 },
f92ab29f 12358 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12359 8.0000000000000000, 0.69999999999999996 },
f92ab29f 12360 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12361 8.0000000000000000, 0.80000000000000004 },
f92ab29f 12362 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943
BK
12363 8.0000000000000000, 0.89999999999999991 },
12364};
12365
12366// Test function for a=10.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
12367template <typename Tp>
12368void test179()
12369{
12370 const Tp eps = std::numeric_limits<Tp>::epsilon();
12371 Tp max_abs_diff = -Tp(1);
12372 Tp max_abs_frac = -Tp(1);
12373 unsigned int num_datum = sizeof(data179)
12374 / sizeof(testcase_hyperg<double>);
12375 for (unsigned int i = 0; i < num_datum; ++i)
12376 {
12377 const Tp f = std::tr1::hyperg(Tp(data179[i].a), Tp(data179[i].b),
12378 Tp(data179[i].c), Tp(data179[i].x));
12379 const Tp f0 = data179[i].f0;
12380 const Tp diff = f - f0;
12381 if (std::abs(diff) > max_abs_diff)
12382 max_abs_diff = std::abs(diff);
12383 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12384 {
12385 const Tp frac = diff / f0;
12386 if (std::abs(frac) > max_abs_frac)
12387 max_abs_frac = std::abs(frac);
12388 }
12389 }
12390 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12391}
12392
12393// Test data for a=10.000000000000000, b=0.0000000000000000, c=10.000000000000000.
12394testcase_hyperg<double> data180[] = {
f92ab29f 12395 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12396 10.000000000000000, -0.90000000000000002 },
f92ab29f 12397 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12398 10.000000000000000, -0.80000000000000004 },
f92ab29f 12399 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12400 10.000000000000000, -0.69999999999999996 },
f92ab29f 12401 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12402 10.000000000000000, -0.59999999999999998 },
f92ab29f 12403 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12404 10.000000000000000, -0.50000000000000000 },
f92ab29f 12405 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12406 10.000000000000000, -0.40000000000000002 },
f92ab29f 12407 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12408 10.000000000000000, -0.30000000000000004 },
f92ab29f 12409 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12410 10.000000000000000, -0.19999999999999996 },
f92ab29f 12411 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12412 10.000000000000000, -0.099999999999999978 },
f92ab29f 12413 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12414 10.000000000000000, 0.0000000000000000 },
f92ab29f 12415 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12416 10.000000000000000, 0.10000000000000009 },
f92ab29f 12417 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12418 10.000000000000000, 0.19999999999999996 },
f92ab29f 12419 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12420 10.000000000000000, 0.30000000000000004 },
f92ab29f 12421 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12422 10.000000000000000, 0.39999999999999991 },
f92ab29f 12423 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12424 10.000000000000000, 0.50000000000000000 },
f92ab29f 12425 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12426 10.000000000000000, 0.60000000000000009 },
f92ab29f 12427 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12428 10.000000000000000, 0.69999999999999996 },
f92ab29f 12429 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943 12430 10.000000000000000, 0.80000000000000004 },
f92ab29f 12431 { 1.0000000000000000, 10.000000000000000, 0.0000000000000000,
7c62b943
BK
12432 10.000000000000000, 0.89999999999999991 },
12433};
12434
12435// Test function for a=10.000000000000000, b=0.0000000000000000, c=10.000000000000000.
12436template <typename Tp>
12437void test180()
12438{
12439 const Tp eps = std::numeric_limits<Tp>::epsilon();
12440 Tp max_abs_diff = -Tp(1);
12441 Tp max_abs_frac = -Tp(1);
12442 unsigned int num_datum = sizeof(data180)
12443 / sizeof(testcase_hyperg<double>);
12444 for (unsigned int i = 0; i < num_datum; ++i)
12445 {
12446 const Tp f = std::tr1::hyperg(Tp(data180[i].a), Tp(data180[i].b),
12447 Tp(data180[i].c), Tp(data180[i].x));
12448 const Tp f0 = data180[i].f0;
12449 const Tp diff = f - f0;
12450 if (std::abs(diff) > max_abs_diff)
12451 max_abs_diff = std::abs(diff);
12452 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12453 {
12454 const Tp frac = diff / f0;
12455 if (std::abs(frac) > max_abs_frac)
12456 max_abs_frac = std::abs(frac);
12457 }
12458 }
12459 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12460}
12461
12462// Test data for a=10.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
12463testcase_hyperg<double> data181[] = {
f92ab29f 12464 { 0.37727530159464628, 10.000000000000000, 0.50000000000000000,
7c62b943 12465 2.0000000000000000, -0.90000000000000002 },
f92ab29f 12466 { 0.39816010922169010, 10.000000000000000, 0.50000000000000000,
7c62b943 12467 2.0000000000000000, -0.80000000000000004 },
f92ab29f 12468 { 0.42283703041362453, 10.000000000000000, 0.50000000000000000,
7c62b943 12469 2.0000000000000000, -0.69999999999999996 },
f92ab29f 12470 { 0.45255640448730505, 10.000000000000000, 0.50000000000000000,
7c62b943 12471 2.0000000000000000, -0.59999999999999998 },
f92ab29f 12472 { 0.48919507154431141, 10.000000000000000, 0.50000000000000000,
7c62b943 12473 2.0000000000000000, -0.50000000000000000 },
f92ab29f 12474 { 0.53569358917731880, 10.000000000000000, 0.50000000000000000,
7c62b943 12475 2.0000000000000000, -0.40000000000000002 },
f92ab29f 12476 { 0.59689778897029566, 10.000000000000000, 0.50000000000000000,
7c62b943 12477 2.0000000000000000, -0.30000000000000004 },
f92ab29f 12478 { 0.68128587569875731, 10.000000000000000, 0.50000000000000000,
7c62b943 12479 2.0000000000000000, -0.19999999999999996 },
f92ab29f 12480 { 0.80478739308790359, 10.000000000000000, 0.50000000000000000,
7c62b943 12481 2.0000000000000000, -0.099999999999999978 },
f92ab29f 12482 { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
7c62b943 12483 2.0000000000000000, 0.0000000000000000 },
f92ab29f 12484 { 1.3408664196153621, 10.000000000000000, 0.50000000000000000,
7c62b943 12485 2.0000000000000000, 0.10000000000000009 },
f92ab29f 12486 { 2.0175364359923860, 10.000000000000000, 0.50000000000000000,
7c62b943 12487 2.0000000000000000, 0.19999999999999996 },
f92ab29f 12488 { 3.6011214553736646, 10.000000000000000, 0.50000000000000000,
7c62b943 12489 2.0000000000000000, 0.30000000000000004 },
f92ab29f 12490 { 8.1799429939495312, 10.000000000000000, 0.50000000000000000,
7c62b943 12491 2.0000000000000000, 0.39999999999999991 },
f92ab29f 12492 { 25.644834637536000, 10.000000000000000, 0.50000000000000000,
7c62b943 12493 2.0000000000000000, 0.50000000000000000 },
f92ab29f 12494 { 123.13738891597615, 10.000000000000000, 0.50000000000000000,
7c62b943 12495 2.0000000000000000, 0.60000000000000009 },
f92ab29f 12496 { 1088.7122410321333, 10.000000000000000, 0.50000000000000000,
7c62b943 12497 2.0000000000000000, 0.69999999999999996 },
f92ab29f 12498 { 27358.291704709951, 10.000000000000000, 0.50000000000000000,
7c62b943 12499 2.0000000000000000, 0.80000000000000004 },
f92ab29f 12500 { 8174369.0266731177, 10.000000000000000, 0.50000000000000000,
7c62b943
BK
12501 2.0000000000000000, 0.89999999999999991 },
12502};
12503
12504// Test function for a=10.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
12505template <typename Tp>
12506void test181()
12507{
12508 const Tp eps = std::numeric_limits<Tp>::epsilon();
12509 Tp max_abs_diff = -Tp(1);
12510 Tp max_abs_frac = -Tp(1);
12511 unsigned int num_datum = sizeof(data181)
12512 / sizeof(testcase_hyperg<double>);
12513 for (unsigned int i = 0; i < num_datum; ++i)
12514 {
12515 const Tp f = std::tr1::hyperg(Tp(data181[i].a), Tp(data181[i].b),
12516 Tp(data181[i].c), Tp(data181[i].x));
12517 const Tp f0 = data181[i].f0;
12518 const Tp diff = f - f0;
12519 if (std::abs(diff) > max_abs_diff)
12520 max_abs_diff = std::abs(diff);
12521 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12522 {
12523 const Tp frac = diff / f0;
12524 if (std::abs(frac) > max_abs_frac)
12525 max_abs_frac = std::abs(frac);
12526 }
12527 }
12528 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12529}
12530
12531// Test data for a=10.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
12532testcase_hyperg<double> data182[] = {
f92ab29f 12533 { 0.53905528308450834, 10.000000000000000, 0.50000000000000000,
7c62b943 12534 4.0000000000000000, -0.90000000000000002 },
f92ab29f 12535 { 0.56235533974376162, 10.000000000000000, 0.50000000000000000,
7c62b943 12536 4.0000000000000000, -0.80000000000000004 },
f92ab29f 12537 { 0.58887657983263575, 10.000000000000000, 0.50000000000000000,
7c62b943 12538 4.0000000000000000, -0.69999999999999996 },
f92ab29f 12539 { 0.61941227047262915, 10.000000000000000, 0.50000000000000000,
7c62b943 12540 4.0000000000000000, -0.59999999999999998 },
f92ab29f 12541 { 0.65504896640793853, 10.000000000000000, 0.50000000000000000,
7c62b943 12542 4.0000000000000000, -0.50000000000000000 },
f92ab29f 12543 { 0.69731666644529999, 10.000000000000000, 0.50000000000000000,
7c62b943 12544 4.0000000000000000, -0.40000000000000002 },
f92ab29f 12545 { 0.74844073299399128, 10.000000000000000, 0.50000000000000000,
7c62b943 12546 4.0000000000000000, -0.30000000000000004 },
f92ab29f 12547 { 0.81178446800105752, 10.000000000000000, 0.50000000000000000,
7c62b943 12548 4.0000000000000000, -0.19999999999999996 },
f92ab29f 12549 { 0.89266981277598023, 10.000000000000000, 0.50000000000000000,
7c62b943 12550 4.0000000000000000, -0.099999999999999978 },
f92ab29f 12551 { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
7c62b943 12552 4.0000000000000000, 0.0000000000000000 },
f92ab29f 12553 { 1.1497248473106778, 10.000000000000000, 0.50000000000000000,
7c62b943 12554 4.0000000000000000, 0.10000000000000009 },
f92ab29f 12555 { 1.3729717112654571, 10.000000000000000, 0.50000000000000000,
7c62b943 12556 4.0000000000000000, 0.19999999999999996 },
f92ab29f 12557 { 1.7374982340374392, 10.000000000000000, 0.50000000000000000,
7c62b943 12558 4.0000000000000000, 0.30000000000000004 },
f92ab29f 12559 { 2.4134479340960580, 10.000000000000000, 0.50000000000000000,
7c62b943 12560 4.0000000000000000, 0.39999999999999991 },
f92ab29f 12561 { 3.9191255240471192, 10.000000000000000, 0.50000000000000000,
7c62b943 12562 4.0000000000000000, 0.50000000000000000 },
f92ab29f 12563 { 8.3316373077761270, 10.000000000000000, 0.50000000000000000,
7c62b943 12564 4.0000000000000000, 0.60000000000000009 },
f92ab29f 12565 { 28.323020339843335, 10.000000000000000, 0.50000000000000000,
7c62b943 12566 4.0000000000000000, 0.69999999999999996 },
f92ab29f 12567 { 225.84286572747891, 10.000000000000000, 0.50000000000000000,
7c62b943 12568 4.0000000000000000, 0.80000000000000004 },
f92ab29f 12569 { 12757.127591286655, 10.000000000000000, 0.50000000000000000,
7c62b943
BK
12570 4.0000000000000000, 0.89999999999999991 },
12571};
12572
12573// Test function for a=10.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
12574template <typename Tp>
12575void test182()
12576{
12577 const Tp eps = std::numeric_limits<Tp>::epsilon();
12578 Tp max_abs_diff = -Tp(1);
12579 Tp max_abs_frac = -Tp(1);
12580 unsigned int num_datum = sizeof(data182)
12581 / sizeof(testcase_hyperg<double>);
12582 for (unsigned int i = 0; i < num_datum; ++i)
12583 {
12584 const Tp f = std::tr1::hyperg(Tp(data182[i].a), Tp(data182[i].b),
12585 Tp(data182[i].c), Tp(data182[i].x));
12586 const Tp f0 = data182[i].f0;
12587 const Tp diff = f - f0;
12588 if (std::abs(diff) > max_abs_diff)
12589 max_abs_diff = std::abs(diff);
12590 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12591 {
12592 const Tp frac = diff / f0;
12593 if (std::abs(frac) > max_abs_frac)
12594 max_abs_frac = std::abs(frac);
12595 }
12596 }
12597 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12598}
12599
12600// Test data for a=10.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
12601testcase_hyperg<double> data183[] = {
f92ab29f 12602 { 0.62672622092226071, 10.000000000000000, 0.50000000000000000,
7c62b943 12603 6.0000000000000000, -0.90000000000000002 },
f92ab29f 12604 { 0.64931010269769829, 10.000000000000000, 0.50000000000000000,
7c62b943 12605 6.0000000000000000, -0.80000000000000004 },
f92ab29f 12606 { 0.67448067519076316, 10.000000000000000, 0.50000000000000000,
7c62b943 12607 6.0000000000000000, -0.69999999999999996 },
f92ab29f 12608 { 0.70276306239803676, 10.000000000000000, 0.50000000000000000,
7c62b943 12609 6.0000000000000000, -0.59999999999999998 },
f92ab29f 12610 { 0.73484179773087555, 10.000000000000000, 0.50000000000000000,
7c62b943 12611 6.0000000000000000, -0.50000000000000000 },
f92ab29f 12612 { 0.77162761412743897, 10.000000000000000, 0.50000000000000000,
7c62b943 12613 6.0000000000000000, -0.40000000000000002 },
f92ab29f 12614 { 0.81436116844816531, 10.000000000000000, 0.50000000000000000,
7c62b943 12615 6.0000000000000000, -0.30000000000000004 },
f92ab29f 12616 { 0.86477994787944557, 10.000000000000000, 0.50000000000000000,
7c62b943 12617 6.0000000000000000, -0.19999999999999996 },
f92ab29f 12618 { 0.92539820516603888, 10.000000000000000, 0.50000000000000000,
7c62b943 12619 6.0000000000000000, -0.099999999999999978 },
f92ab29f 12620 { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
7c62b943 12621 6.0000000000000000, 0.0000000000000000 },
f92ab29f 12622 { 1.0945599448210315, 10.000000000000000, 0.50000000000000000,
7c62b943 12623 6.0000000000000000, 0.10000000000000009 },
f92ab29f 12624 { 1.2190897395597264, 10.000000000000000, 0.50000000000000000,
7c62b943 12625 6.0000000000000000, 0.19999999999999996 },
f92ab29f 12626 { 1.3916844336856475, 10.000000000000000, 0.50000000000000000,
7c62b943 12627 6.0000000000000000, 0.30000000000000004 },
f92ab29f 12628 { 1.6484497630432013, 10.000000000000000, 0.50000000000000000,
7c62b943 12629 6.0000000000000000, 0.39999999999999991 },
f92ab29f 12630 { 2.0717772717131155, 10.000000000000000, 0.50000000000000000,
7c62b943 12631 6.0000000000000000, 0.50000000000000000 },
f92ab29f 12632 { 2.8893613630810924, 10.000000000000000, 0.50000000000000000,
7c62b943 12633 6.0000000000000000, 0.60000000000000009 },
f92ab29f 12634 { 4.9459404075413529, 10.000000000000000, 0.50000000000000000,
7c62b943 12635 6.0000000000000000, 0.69999999999999996 },
f92ab29f 12636 { 13.487394149998716, 10.000000000000000, 0.50000000000000000,
7c62b943 12637 6.0000000000000000, 0.80000000000000004 },
f92ab29f 12638 { 136.57616044013972, 10.000000000000000, 0.50000000000000000,
7c62b943
BK
12639 6.0000000000000000, 0.89999999999999991 },
12640};
12641
12642// Test function for a=10.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
12643template <typename Tp>
12644void test183()
12645{
12646 const Tp eps = std::numeric_limits<Tp>::epsilon();
12647 Tp max_abs_diff = -Tp(1);
12648 Tp max_abs_frac = -Tp(1);
12649 unsigned int num_datum = sizeof(data183)
12650 / sizeof(testcase_hyperg<double>);
12651 for (unsigned int i = 0; i < num_datum; ++i)
12652 {
12653 const Tp f = std::tr1::hyperg(Tp(data183[i].a), Tp(data183[i].b),
12654 Tp(data183[i].c), Tp(data183[i].x));
12655 const Tp f0 = data183[i].f0;
12656 const Tp diff = f - f0;
12657 if (std::abs(diff) > max_abs_diff)
12658 max_abs_diff = std::abs(diff);
12659 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12660 {
12661 const Tp frac = diff / f0;
12662 if (std::abs(frac) > max_abs_frac)
12663 max_abs_frac = std::abs(frac);
12664 }
12665 }
12666 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12667}
12668
12669// Test data for a=10.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
12670testcase_hyperg<double> data184[] = {
f92ab29f 12671 { 0.68421604440344341, 10.000000000000000, 0.50000000000000000,
7c62b943 12672 8.0000000000000000, -0.90000000000000002 },
f92ab29f 12673 { 0.70548098055548891, 10.000000000000000, 0.50000000000000000,
7c62b943 12674 8.0000000000000000, -0.80000000000000004 },
f92ab29f 12675 { 0.72884342311710348, 10.000000000000000, 0.50000000000000000,
7c62b943 12676 8.0000000000000000, -0.69999999999999996 },
f92ab29f 12677 { 0.75466953437856243, 10.000000000000000, 0.50000000000000000,
7c62b943 12678 8.0000000000000000, -0.59999999999999998 },
f92ab29f 12679 { 0.78342090924662600, 10.000000000000000, 0.50000000000000000,
7c62b943 12680 8.0000000000000000, -0.50000000000000000 },
f92ab29f 12681 { 0.81568884278645049, 10.000000000000000, 0.50000000000000000,
7c62b943 12682 8.0000000000000000, -0.40000000000000002 },
f92ab29f 12683 { 0.85224480241465206, 10.000000000000000, 0.50000000000000000,
7c62b943 12684 8.0000000000000000, -0.30000000000000004 },
f92ab29f 12685 { 0.89411692571131696, 10.000000000000000, 0.50000000000000000,
7c62b943 12686 8.0000000000000000, -0.19999999999999996 },
f92ab29f 12687 { 0.94270986892954756, 10.000000000000000, 0.50000000000000000,
7c62b943 12688 8.0000000000000000, -0.099999999999999978 },
f92ab29f 12689 { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
7c62b943 12690 8.0000000000000000, 0.0000000000000000 },
f92ab29f 12691 { 1.0688682849120232, 10.000000000000000, 0.50000000000000000,
7c62b943 12692 8.0000000000000000, 0.10000000000000009 },
f92ab29f 12693 { 1.1537004376097553, 10.000000000000000, 0.50000000000000000,
7c62b943 12694 8.0000000000000000, 0.19999999999999996 },
f92ab29f 12695 { 1.2615455028370031, 10.000000000000000, 0.50000000000000000,
7c62b943 12696 8.0000000000000000, 0.30000000000000004 },
f92ab29f 12697 { 1.4045541456153436, 10.000000000000000, 0.50000000000000000,
7c62b943 12698 8.0000000000000000, 0.39999999999999991 },
f92ab29f 12699 { 1.6057216489444517, 10.000000000000000, 0.50000000000000000,
7c62b943 12700 8.0000000000000000, 0.50000000000000000 },
f92ab29f 12701 { 1.9146603020550739, 10.000000000000000, 0.50000000000000000,
7c62b943 12702 8.0000000000000000, 0.60000000000000009 },
f92ab29f 12703 { 2.4617931307620298, 10.000000000000000, 0.50000000000000000,
7c62b943 12704 8.0000000000000000, 0.69999999999999996 },
f92ab29f 12705 { 3.7267799624996498, 10.000000000000000, 0.50000000000000000,
7c62b943 12706 8.0000000000000000, 0.80000000000000004 },
f92ab29f 12707 { 9.3880118036248401, 10.000000000000000, 0.50000000000000000,
7c62b943
BK
12708 8.0000000000000000, 0.89999999999999991 },
12709};
12710
12711// Test function for a=10.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
12712template <typename Tp>
12713void test184()
12714{
12715 const Tp eps = std::numeric_limits<Tp>::epsilon();
12716 Tp max_abs_diff = -Tp(1);
12717 Tp max_abs_frac = -Tp(1);
12718 unsigned int num_datum = sizeof(data184)
12719 / sizeof(testcase_hyperg<double>);
12720 for (unsigned int i = 0; i < num_datum; ++i)
12721 {
12722 const Tp f = std::tr1::hyperg(Tp(data184[i].a), Tp(data184[i].b),
12723 Tp(data184[i].c), Tp(data184[i].x));
12724 const Tp f0 = data184[i].f0;
12725 const Tp diff = f - f0;
12726 if (std::abs(diff) > max_abs_diff)
12727 max_abs_diff = std::abs(diff);
12728 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12729 {
12730 const Tp frac = diff / f0;
12731 if (std::abs(frac) > max_abs_frac)
12732 max_abs_frac = std::abs(frac);
12733 }
12734 }
12735 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12736}
12737
12738// Test data for a=10.000000000000000, b=0.50000000000000000, c=10.000000000000000.
12739testcase_hyperg<double> data185[] = {
f92ab29f 12740 { 0.72547625011001171, 10.000000000000000, 0.50000000000000000,
7c62b943 12741 10.000000000000000, -0.90000000000000002 },
f92ab29f 12742 { 0.74535599249992990, 10.000000000000000, 0.50000000000000000,
7c62b943 12743 10.000000000000000, -0.80000000000000004 },
f92ab29f 12744 { 0.76696498884737041, 10.000000000000000, 0.50000000000000000,
7c62b943 12745 10.000000000000000, -0.69999999999999996 },
f92ab29f 12746 { 0.79056941504209477, 10.000000000000000, 0.50000000000000000,
7c62b943 12747 10.000000000000000, -0.59999999999999998 },
f92ab29f 12748 { 0.81649658092772603, 10.000000000000000, 0.50000000000000000,
7c62b943 12749 10.000000000000000, -0.50000000000000000 },
f92ab29f 12750 { 0.84515425472851657, 10.000000000000000, 0.50000000000000000,
7c62b943 12751 10.000000000000000, -0.40000000000000002 },
f92ab29f 12752 { 0.87705801930702920, 10.000000000000000, 0.50000000000000000,
7c62b943 12753 10.000000000000000, -0.30000000000000004 },
f92ab29f 12754 { 0.91287092917527690, 10.000000000000000, 0.50000000000000000,
7c62b943 12755 10.000000000000000, -0.19999999999999996 },
f92ab29f 12756 { 0.95346258924559224, 10.000000000000000, 0.50000000000000000,
7c62b943 12757 10.000000000000000, -0.099999999999999978 },
f92ab29f 12758 { 1.0000000000000000, 10.000000000000000, 0.50000000000000000,
7c62b943 12759 10.000000000000000, 0.0000000000000000 },
f92ab29f 12760 { 1.0540925533894598, 10.000000000000000, 0.50000000000000000,
7c62b943 12761 10.000000000000000, 0.10000000000000009 },
f92ab29f 12762 { 1.1180339887498949, 10.000000000000000, 0.50000000000000000,
7c62b943 12763 10.000000000000000, 0.19999999999999996 },
f92ab29f 12764 { 1.1952286093343938, 10.000000000000000, 0.50000000000000000,
7c62b943 12765 10.000000000000000, 0.30000000000000004 },
f92ab29f 12766 { 1.2909944487358056, 10.000000000000000, 0.50000000000000000,
7c62b943 12767 10.000000000000000, 0.39999999999999991 },
f92ab29f 12768 { 1.4142135623730949, 10.000000000000000, 0.50000000000000000,
7c62b943 12769 10.000000000000000, 0.50000000000000000 },
f92ab29f 12770 { 1.5811388300841900, 10.000000000000000, 0.50000000000000000,
7c62b943 12771 10.000000000000000, 0.60000000000000009 },
f92ab29f 12772 { 1.8257418583505536, 10.000000000000000, 0.50000000000000000,
7c62b943 12773 10.000000000000000, 0.69999999999999996 },
f92ab29f 12774 { 2.2360679774997898, 10.000000000000000, 0.50000000000000000,
7c62b943 12775 10.000000000000000, 0.80000000000000004 },
f92ab29f 12776 { 3.1622776601683782, 10.000000000000000, 0.50000000000000000,
7c62b943
BK
12777 10.000000000000000, 0.89999999999999991 },
12778};
12779
12780// Test function for a=10.000000000000000, b=0.50000000000000000, c=10.000000000000000.
12781template <typename Tp>
12782void test185()
12783{
12784 const Tp eps = std::numeric_limits<Tp>::epsilon();
12785 Tp max_abs_diff = -Tp(1);
12786 Tp max_abs_frac = -Tp(1);
12787 unsigned int num_datum = sizeof(data185)
12788 / sizeof(testcase_hyperg<double>);
12789 for (unsigned int i = 0; i < num_datum; ++i)
12790 {
12791 const Tp f = std::tr1::hyperg(Tp(data185[i].a), Tp(data185[i].b),
12792 Tp(data185[i].c), Tp(data185[i].x));
12793 const Tp f0 = data185[i].f0;
12794 const Tp diff = f - f0;
12795 if (std::abs(diff) > max_abs_diff)
12796 max_abs_diff = std::abs(diff);
12797 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12798 {
12799 const Tp frac = diff / f0;
12800 if (std::abs(frac) > max_abs_frac)
12801 max_abs_frac = std::abs(frac);
12802 }
12803 }
12804 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12805}
12806
12807// Test data for a=10.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
12808testcase_hyperg<double> data186[] = {
f92ab29f 12809 { 0.12307420104127871, 10.000000000000000, 1.0000000000000000,
7c62b943 12810 2.0000000000000000, -0.90000000000000002 },
f92ab29f 12811 { 0.13818870041457423, 10.000000000000000, 1.0000000000000000,
7c62b943 12812 2.0000000000000000, -0.80000000000000004 },
f92ab29f 12813 { 0.15739165631811691, 10.000000000000000, 1.0000000000000000,
7c62b943 12814 2.0000000000000000, -0.69999999999999996 },
f92ab29f 12815 { 0.18249038606882068, 10.000000000000000, 1.0000000000000000,
7c62b943 12816 2.0000000000000000, -0.59999999999999998 },
f92ab29f 12817 { 0.21644171225027786, 10.000000000000000, 1.0000000000000000,
7c62b943 12818 2.0000000000000000, -0.50000000000000000 },
f92ab29f 12819 { 0.26433326159804160, 10.000000000000000, 1.0000000000000000,
7c62b943 12820 2.0000000000000000, -0.40000000000000002 },
f92ab29f 12821 { 0.33544459430654533, 10.000000000000000, 1.0000000000000000,
7c62b943 12822 2.0000000000000000, -0.30000000000000004 },
f92ab29f 12823 { 0.44788516696232517, 10.000000000000000, 1.0000000000000000,
7c62b943 12824 2.0000000000000000, -0.19999999999999996 },
f92ab29f 12825 { 0.63989153514168362, 10.000000000000000, 1.0000000000000000,
7c62b943 12826 2.0000000000000000, -0.099999999999999978 },
f92ab29f 12827 { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
7c62b943 12828 2.0000000000000000, 0.0000000000000000 },
f92ab29f 12829 { 1.7568608796813312, 10.000000000000000, 1.0000000000000000,
7c62b943 12830 2.0000000000000000, 0.10000000000000009 },
f92ab29f 12831 { 3.5836558871799027, 10.000000000000000, 1.0000000000000000,
7c62b943 12832 2.0000000000000000, 0.19999999999999996 },
f92ab29f 12833 { 8.8077526749963226, 10.000000000000000, 1.0000000000000000,
7c62b943 12834 2.0000000000000000, 0.30000000000000004 },
f92ab29f 12835 { 27.285841702089190, 10.000000000000000, 1.0000000000000000,
7c62b943 12836 2.0000000000000000, 0.39999999999999991 },
f92ab29f 12837 { 113.55555555555557, 10.000000000000000, 1.0000000000000000,
7c62b943 12838 2.0000000000000000, 0.50000000000000000 },
f92ab29f 12839 { 706.24023437500091, 10.000000000000000, 1.0000000000000000,
7c62b943 12840 2.0000000000000000, 0.60000000000000009 },
f92ab29f 12841 { 8064.1687976651992, 10.000000000000000, 1.0000000000000000,
7c62b943 12842 2.0000000000000000, 0.69999999999999996 },
f92ab29f 12843 { 271267.22222222196, 10.000000000000000, 1.0000000000000000,
7c62b943 12844 2.0000000000000000, 0.80000000000000004 },
f92ab29f 12845 { 123456789.99999890, 10.000000000000000, 1.0000000000000000,
7c62b943
BK
12846 2.0000000000000000, 0.89999999999999991 },
12847};
12848
12849// Test function for a=10.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
12850template <typename Tp>
12851void test186()
12852{
12853 const Tp eps = std::numeric_limits<Tp>::epsilon();
12854 Tp max_abs_diff = -Tp(1);
12855 Tp max_abs_frac = -Tp(1);
12856 unsigned int num_datum = sizeof(data186)
12857 / sizeof(testcase_hyperg<double>);
12858 for (unsigned int i = 0; i < num_datum; ++i)
12859 {
12860 const Tp f = std::tr1::hyperg(Tp(data186[i].a), Tp(data186[i].b),
12861 Tp(data186[i].c), Tp(data186[i].x));
12862 const Tp f0 = data186[i].f0;
12863 const Tp diff = f - f0;
12864 if (std::abs(diff) > max_abs_diff)
12865 max_abs_diff = std::abs(diff);
12866 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12867 {
12868 const Tp frac = diff / f0;
12869 if (std::abs(frac) > max_abs_frac)
12870 max_abs_frac = std::abs(frac);
12871 }
12872 }
12873 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12874}
12875
12876// Test data for a=10.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
12877testcase_hyperg<double> data187[] = {
f92ab29f 12878 { 0.28363728383055758, 10.000000000000000, 1.0000000000000000,
7c62b943 12879 4.0000000000000000, -0.90000000000000002 },
f92ab29f 12880 { 0.30933003169808387, 10.000000000000000, 1.0000000000000000,
7c62b943 12881 4.0000000000000000, -0.80000000000000004 },
f92ab29f 12882 { 0.33998437757128797, 10.000000000000000, 1.0000000000000000,
7c62b943 12883 4.0000000000000000, -0.69999999999999996 },
f92ab29f 12884 { 0.37713553224291119, 10.000000000000000, 1.0000000000000000,
7c62b943 12885 4.0000000000000000, -0.59999999999999998 },
f92ab29f 12886 { 0.42299736538419658, 10.000000000000000, 1.0000000000000000,
7c62b943 12887 4.0000000000000000, -0.50000000000000000 },
f92ab29f 12888 { 0.48086597727600106, 10.000000000000000, 1.0000000000000000,
7c62b943 12889 4.0000000000000000, -0.40000000000000002 },
f92ab29f 12890 { 0.55583495759293045, 10.000000000000000, 1.0000000000000000,
7c62b943 12891 4.0000000000000000, -0.30000000000000004 },
f92ab29f 12892 { 0.65612850114039667, 10.000000000000000, 1.0000000000000000,
7c62b943 12893 4.0000000000000000, -0.19999999999999996 },
f92ab29f 12894 { 0.79573668772968120, 10.000000000000000, 1.0000000000000000,
7c62b943 12895 4.0000000000000000, -0.099999999999999978 },
f92ab29f 12896 { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
7c62b943 12897 4.0000000000000000, 0.0000000000000000 },
f92ab29f 12898 { 1.3184712058058303, 10.000000000000000, 1.0000000000000000,
7c62b943 12899 4.0000000000000000, 0.10000000000000009 },
f92ab29f 12900 { 1.8576958065941214, 10.000000000000000, 1.0000000000000000,
7c62b943 12901 4.0000000000000000, 0.19999999999999996 },
f92ab29f 12902 { 2.8759509651764228, 10.000000000000000, 1.0000000000000000,
7c62b943 12903 4.0000000000000000, 0.30000000000000004 },
f92ab29f 12904 { 5.1046225531822182, 10.000000000000000, 1.0000000000000000,
7c62b943 12905 4.0000000000000000, 0.39999999999999991 },
f92ab29f 12906 { 11.095238095238095, 10.000000000000000, 1.0000000000000000,
7c62b943 12907 4.0000000000000000, 0.50000000000000000 },
f92ab29f 12908 { 32.797154017857174, 10.000000000000000, 1.0000000000000000,
7c62b943 12909 4.0000000000000000, 0.60000000000000009 },
f92ab29f 12910 { 158.01935680536477, 10.000000000000000, 1.0000000000000000,
7c62b943 12911 4.0000000000000000, 0.69999999999999996 },
f92ab29f 12912 { 1815.9523809523814, 10.000000000000000, 1.0000000000000000,
7c62b943 12913 4.0000000000000000, 0.80000000000000004 },
f92ab29f 12914 { 163302.14285714156, 10.000000000000000, 1.0000000000000000,
7c62b943
BK
12915 4.0000000000000000, 0.89999999999999991 },
12916};
12917
12918// Test function for a=10.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
12919template <typename Tp>
12920void test187()
12921{
12922 const Tp eps = std::numeric_limits<Tp>::epsilon();
12923 Tp max_abs_diff = -Tp(1);
12924 Tp max_abs_frac = -Tp(1);
12925 unsigned int num_datum = sizeof(data187)
12926 / sizeof(testcase_hyperg<double>);
12927 for (unsigned int i = 0; i < num_datum; ++i)
12928 {
12929 const Tp f = std::tr1::hyperg(Tp(data187[i].a), Tp(data187[i].b),
12930 Tp(data187[i].c), Tp(data187[i].x));
12931 const Tp f0 = data187[i].f0;
12932 const Tp diff = f - f0;
12933 if (std::abs(diff) > max_abs_diff)
12934 max_abs_diff = std::abs(diff);
12935 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
12936 {
12937 const Tp frac = diff / f0;
12938 if (std::abs(frac) > max_abs_frac)
12939 max_abs_frac = std::abs(frac);
12940 }
12941 }
12942 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
12943}
12944
12945// Test data for a=10.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
12946testcase_hyperg<double> data188[] = {
f92ab29f 12947 { 0.39006633302741794, 10.000000000000000, 1.0000000000000000,
7c62b943 12948 6.0000000000000000, -0.90000000000000002 },
f92ab29f 12949 { 0.41898885698103294, 10.000000000000000, 1.0000000000000000,
7c62b943 12950 6.0000000000000000, -0.80000000000000004 },
f92ab29f 12951 { 0.45245557983812590, 10.000000000000000, 1.0000000000000000,
7c62b943 12952 6.0000000000000000, -0.69999999999999996 },
f92ab29f 12953 { 0.49160548618861633, 10.000000000000000, 1.0000000000000000,
7c62b943 12954 6.0000000000000000, -0.59999999999999998 },
f92ab29f 12955 { 0.53798419230517980, 10.000000000000000, 1.0000000000000000,
7c62b943 12956 6.0000000000000000, -0.50000000000000000 },
f92ab29f 12957 { 0.59373881442067344, 10.000000000000000, 1.0000000000000000,
7c62b943 12958 6.0000000000000000, -0.40000000000000002 },
f92ab29f 12959 { 0.66193391357076115, 10.000000000000000, 1.0000000000000000,
7c62b943 12960 6.0000000000000000, -0.30000000000000004 },
f92ab29f 12961 { 0.74708402736952129, 10.000000000000000, 1.0000000000000000,
7c62b943 12962 6.0000000000000000, -0.19999999999999996 },
f92ab29f 12963 { 0.85609281019430605, 10.000000000000000, 1.0000000000000000,
7c62b943 12964 6.0000000000000000, -0.099999999999999978 },
f92ab29f 12965 { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
7c62b943 12966 6.0000000000000000, 0.0000000000000000 },
f92ab29f 12967 { 1.1974451135148187, 10.000000000000000, 1.0000000000000000,
7c62b943 12968 6.0000000000000000, 0.10000000000000009 },
f92ab29f 12969 { 1.4820886036706347, 10.000000000000000, 1.0000000000000000,
7c62b943 12970 6.0000000000000000, 0.19999999999999996 },
f92ab29f 12971 { 1.9201183180477521, 10.000000000000000, 1.0000000000000000,
7c62b943 12972 6.0000000000000000, 0.30000000000000004 },
f92ab29f 12973 { 2.6569338297733336, 10.000000000000000, 1.0000000000000000,
7c62b943 12974 6.0000000000000000, 0.39999999999999991 },
f92ab29f 12975 { 4.0634920634920650, 10.000000000000000, 1.0000000000000000,
7c62b943 12976 6.0000000000000000, 0.50000000000000000 },
f92ab29f 12977 { 7.3102678571428568, 10.000000000000000, 1.0000000000000000,
7c62b943 12978 6.0000000000000000, 0.60000000000000009 },
f92ab29f 12979 { 17.512574302697733, 10.000000000000000, 1.0000000000000000,
7c62b943 12980 6.0000000000000000, 0.69999999999999996 },
f92ab29f 12981 { 74.206349206349131, 10.000000000000000, 1.0000000000000000,
7c62b943 12982 6.0000000000000000, 0.80000000000000004 },
f92ab29f 12983 { 1342.8571428571363, 10.000000000000000, 1.0000000000000000,
7c62b943
BK
12984 6.0000000000000000, 0.89999999999999991 },
12985};
12986
12987// Test function for a=10.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
12988template <typename Tp>
12989void test188()
12990{
12991 const Tp eps = std::numeric_limits<Tp>::epsilon();
12992 Tp max_abs_diff = -Tp(1);
12993 Tp max_abs_frac = -Tp(1);
12994 unsigned int num_datum = sizeof(data188)
12995 / sizeof(testcase_hyperg<double>);
12996 for (unsigned int i = 0; i < num_datum; ++i)
12997 {
12998 const Tp f = std::tr1::hyperg(Tp(data188[i].a), Tp(data188[i].b),
12999 Tp(data188[i].c), Tp(data188[i].x));
13000 const Tp f0 = data188[i].f0;
13001 const Tp diff = f - f0;
13002 if (std::abs(diff) > max_abs_diff)
13003 max_abs_diff = std::abs(diff);
13004 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13005 {
13006 const Tp frac = diff / f0;
13007 if (std::abs(frac) > max_abs_frac)
13008 max_abs_frac = std::abs(frac);
13009 }
13010 }
13011 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13012}
13013
13014// Test data for a=10.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
13015testcase_hyperg<double> data189[] = {
f92ab29f 13016 { 0.46726928123633193, 10.000000000000000, 1.0000000000000000,
7c62b943 13017 8.0000000000000000, -0.90000000000000002 },
f92ab29f 13018 { 0.49687547629934464, 10.000000000000000, 1.0000000000000000,
7c62b943 13019 8.0000000000000000, -0.80000000000000004 },
f92ab29f 13020 { 0.53045208856322235, 10.000000000000000, 1.0000000000000000,
7c62b943 13021 8.0000000000000000, -0.69999999999999996 },
f92ab29f 13022 { 0.56884765624999978, 10.000000000000000, 1.0000000000000000,
7c62b943 13023 8.0000000000000000, -0.59999999999999998 },
f92ab29f 13024 { 0.61316872427983526, 10.000000000000000, 1.0000000000000000,
7c62b943 13025 8.0000000000000000, -0.50000000000000000 },
f92ab29f 13026 { 0.66488500161969544, 10.000000000000000, 1.0000000000000000,
7c62b943 13027 8.0000000000000000, -0.40000000000000002 },
f92ab29f 13028 { 0.72598998634501577, 10.000000000000000, 1.0000000000000000,
7c62b943 13029 8.0000000000000000, -0.30000000000000004 },
f92ab29f 13030 { 0.79925411522633782, 10.000000000000000, 1.0000000000000000,
7c62b943 13031 8.0000000000000000, -0.19999999999999996 },
f92ab29f 13032 { 0.88863845062192193, 10.000000000000000, 1.0000000000000000,
7c62b943 13033 8.0000000000000000, -0.099999999999999978 },
f92ab29f 13034 { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
7c62b943 13035 8.0000000000000000, 0.0000000000000000 },
f92ab29f 13036 { 1.1423563481176653, 10.000000000000000, 1.0000000000000000,
7c62b943 13037 8.0000000000000000, 0.10000000000000009 },
f92ab29f 13038 { 1.3302951388888888, 10.000000000000000, 1.0000000000000000,
7c62b943 13039 8.0000000000000000, 0.19999999999999996 },
f92ab29f 13040 { 1.5889212827988335, 10.000000000000000, 1.0000000000000000,
7c62b943 13041 8.0000000000000000, 0.30000000000000004 },
f92ab29f 13042 { 1.9650205761316870, 10.000000000000000, 1.0000000000000000,
7c62b943 13043 8.0000000000000000, 0.39999999999999991 },
f92ab29f 13044 { 2.5555555555555549, 10.000000000000000, 1.0000000000000000,
7c62b943 13045 8.0000000000000000, 0.50000000000000000 },
f92ab29f 13046 { 3.5937500000000013, 10.000000000000000, 1.0000000000000000,
7c62b943 13047 8.0000000000000000, 0.60000000000000009 },
f92ab29f 13048 { 5.7818930041152203, 10.000000000000000, 1.0000000000000000,
7c62b943 13049 8.0000000000000000, 0.69999999999999996 },
f92ab29f 13050 { 12.222222222222220, 10.000000000000000, 1.0000000000000000,
7c62b943 13051 8.0000000000000000, 0.80000000000000004 },
f92ab29f 13052 { 54.999999999999780, 10.000000000000000, 1.0000000000000000,
7c62b943
BK
13053 8.0000000000000000, 0.89999999999999991 },
13054};
13055
13056// Test function for a=10.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
13057template <typename Tp>
13058void test189()
13059{
13060 const Tp eps = std::numeric_limits<Tp>::epsilon();
13061 Tp max_abs_diff = -Tp(1);
13062 Tp max_abs_frac = -Tp(1);
13063 unsigned int num_datum = sizeof(data189)
13064 / sizeof(testcase_hyperg<double>);
13065 for (unsigned int i = 0; i < num_datum; ++i)
13066 {
13067 const Tp f = std::tr1::hyperg(Tp(data189[i].a), Tp(data189[i].b),
13068 Tp(data189[i].c), Tp(data189[i].x));
13069 const Tp f0 = data189[i].f0;
13070 const Tp diff = f - f0;
13071 if (std::abs(diff) > max_abs_diff)
13072 max_abs_diff = std::abs(diff);
13073 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13074 {
13075 const Tp frac = diff / f0;
13076 if (std::abs(frac) > max_abs_frac)
13077 max_abs_frac = std::abs(frac);
13078 }
13079 }
13080 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13081}
13082
13083// Test data for a=10.000000000000000, b=1.0000000000000000, c=10.000000000000000.
13084testcase_hyperg<double> data190[] = {
f92ab29f 13085 { 0.52631578947368429, 10.000000000000000, 1.0000000000000000,
7c62b943 13086 10.000000000000000, -0.90000000000000002 },
f92ab29f 13087 { 0.55555555555555558, 10.000000000000000, 1.0000000000000000,
7c62b943 13088 10.000000000000000, -0.80000000000000004 },
f92ab29f 13089 { 0.58823529411764708, 10.000000000000000, 1.0000000000000000,
7c62b943 13090 10.000000000000000, -0.69999999999999996 },
f92ab29f 13091 { 0.62500000000000000, 10.000000000000000, 1.0000000000000000,
7c62b943 13092 10.000000000000000, -0.59999999999999998 },
f92ab29f 13093 { 0.66666666666666663, 10.000000000000000, 1.0000000000000000,
7c62b943 13094 10.000000000000000, -0.50000000000000000 },
f92ab29f 13095 { 0.71428571428571430, 10.000000000000000, 1.0000000000000000,
7c62b943 13096 10.000000000000000, -0.40000000000000002 },
f92ab29f 13097 { 0.76923076923076927, 10.000000000000000, 1.0000000000000000,
7c62b943 13098 10.000000000000000, -0.30000000000000004 },
f92ab29f 13099 { 0.83333333333333337, 10.000000000000000, 1.0000000000000000,
7c62b943 13100 10.000000000000000, -0.19999999999999996 },
f92ab29f 13101 { 0.90909090909090906, 10.000000000000000, 1.0000000000000000,
7c62b943 13102 10.000000000000000, -0.099999999999999978 },
f92ab29f 13103 { 1.0000000000000000, 10.000000000000000, 1.0000000000000000,
7c62b943 13104 10.000000000000000, 0.0000000000000000 },
f92ab29f 13105 { 1.1111111111111112, 10.000000000000000, 1.0000000000000000,
7c62b943 13106 10.000000000000000, 0.10000000000000009 },
f92ab29f 13107 { 1.2500000000000000, 10.000000000000000, 1.0000000000000000,
7c62b943 13108 10.000000000000000, 0.19999999999999996 },
f92ab29f 13109 { 1.4285714285714286, 10.000000000000000, 1.0000000000000000,
7c62b943 13110 10.000000000000000, 0.30000000000000004 },
f92ab29f 13111 { 1.6666666666666663, 10.000000000000000, 1.0000000000000000,
7c62b943 13112 10.000000000000000, 0.39999999999999991 },
f92ab29f 13113 { 2.0000000000000000, 10.000000000000000, 1.0000000000000000,
7c62b943 13114 10.000000000000000, 0.50000000000000000 },
f92ab29f 13115 { 2.5000000000000004, 10.000000000000000, 1.0000000000000000,
7c62b943 13116 10.000000000000000, 0.60000000000000009 },
f92ab29f 13117 { 3.3333333333333330, 10.000000000000000, 1.0000000000000000,
7c62b943 13118 10.000000000000000, 0.69999999999999996 },
f92ab29f 13119 { 5.0000000000000009, 10.000000000000000, 1.0000000000000000,
7c62b943 13120 10.000000000000000, 0.80000000000000004 },
f92ab29f 13121 { 9.9999999999999929, 10.000000000000000, 1.0000000000000000,
7c62b943
BK
13122 10.000000000000000, 0.89999999999999991 },
13123};
13124
13125// Test function for a=10.000000000000000, b=1.0000000000000000, c=10.000000000000000.
13126template <typename Tp>
13127void test190()
13128{
13129 const Tp eps = std::numeric_limits<Tp>::epsilon();
13130 Tp max_abs_diff = -Tp(1);
13131 Tp max_abs_frac = -Tp(1);
13132 unsigned int num_datum = sizeof(data190)
13133 / sizeof(testcase_hyperg<double>);
13134 for (unsigned int i = 0; i < num_datum; ++i)
13135 {
13136 const Tp f = std::tr1::hyperg(Tp(data190[i].a), Tp(data190[i].b),
13137 Tp(data190[i].c), Tp(data190[i].x));
13138 const Tp f0 = data190[i].f0;
13139 const Tp diff = f - f0;
13140 if (std::abs(diff) > max_abs_diff)
13141 max_abs_diff = std::abs(diff);
13142 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13143 {
13144 const Tp frac = diff / f0;
13145 if (std::abs(frac) > max_abs_frac)
13146 max_abs_frac = std::abs(frac);
13147 }
13148 }
13149 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13150}
13151
13152// Test data for a=10.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
13153testcase_hyperg<double> data191[] = {
f92ab29f 13154 { 0.0016310376661280216, 10.000000000000000, 2.0000000000000000,
7c62b943 13155 2.0000000000000000, -0.90000000000000002 },
f92ab29f 13156 { 0.0028007538972582421, 10.000000000000000, 2.0000000000000000,
7c62b943 13157 2.0000000000000000, -0.80000000000000004 },
f92ab29f 13158 { 0.0049603324681551939, 10.000000000000000, 2.0000000000000000,
7c62b943 13159 2.0000000000000000, -0.69999999999999996 },
f92ab29f 13160 { 0.0090949470177292789, 10.000000000000000, 2.0000000000000000,
7c62b943 13161 2.0000000000000000, -0.59999999999999998 },
f92ab29f 13162 { 0.017341529915832606, 10.000000000000000, 2.0000000000000000,
7c62b943 13163 2.0000000000000000, -0.50000000000000000 },
f92ab29f 13164 { 0.034571613033607777, 10.000000000000000, 2.0000000000000000,
7c62b943 13165 2.0000000000000000, -0.40000000000000002 },
f92ab29f 13166 { 0.072538150286405714, 10.000000000000000, 2.0000000000000000,
7c62b943 13167 2.0000000000000000, -0.30000000000000004 },
f92ab29f 13168 { 0.16150558288984579, 10.000000000000000, 2.0000000000000000,
7c62b943 13169 2.0000000000000000, -0.19999999999999996 },
f92ab29f 13170 { 0.38554328942953148, 10.000000000000000, 2.0000000000000000,
7c62b943 13171 2.0000000000000000, -0.099999999999999978 },
f92ab29f 13172 { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
7c62b943 13173 2.0000000000000000, 0.0000000000000000 },
f92ab29f 13174 { 2.8679719907924444, 10.000000000000000, 2.0000000000000000,
7c62b943 13175 2.0000000000000000, 0.10000000000000009 },
f92ab29f 13176 { 9.3132257461547816, 10.000000000000000, 2.0000000000000000,
7c62b943 13177 2.0000000000000000, 0.19999999999999996 },
f92ab29f 13178 { 35.401331746414378, 10.000000000000000, 2.0000000000000000,
7c62b943 13179 2.0000000000000000, 0.30000000000000004 },
f92ab29f 13180 { 165.38171687920172, 10.000000000000000, 2.0000000000000000,
7c62b943 13181 2.0000000000000000, 0.39999999999999991 },
f92ab29f 13182 { 1024.0000000000000, 10.000000000000000, 2.0000000000000000,
7c62b943 13183 2.0000000000000000, 0.50000000000000000 },
f92ab29f 13184 { 9536.7431640625200, 10.000000000000000, 2.0000000000000000,
7c62b943 13185 2.0000000000000000, 0.60000000000000009 },
f92ab29f 13186 { 169350.87808430271, 10.000000000000000, 2.0000000000000000,
7c62b943 13187 2.0000000000000000, 0.69999999999999996 },
f92ab29f 13188 { 9765624.9999999944, 10.000000000000000, 2.0000000000000000,
7c62b943 13189 2.0000000000000000, 0.80000000000000004 },
f92ab29f 13190 { 9999999999.9999332, 10.000000000000000, 2.0000000000000000,
7c62b943
BK
13191 2.0000000000000000, 0.89999999999999991 },
13192};
13193
13194// Test function for a=10.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
13195template <typename Tp>
13196void test191()
13197{
13198 const Tp eps = std::numeric_limits<Tp>::epsilon();
13199 Tp max_abs_diff = -Tp(1);
13200 Tp max_abs_frac = -Tp(1);
13201 unsigned int num_datum = sizeof(data191)
13202 / sizeof(testcase_hyperg<double>);
13203 for (unsigned int i = 0; i < num_datum; ++i)
13204 {
13205 const Tp f = std::tr1::hyperg(Tp(data191[i].a), Tp(data191[i].b),
13206 Tp(data191[i].c), Tp(data191[i].x));
13207 const Tp f0 = data191[i].f0;
13208 const Tp diff = f - f0;
13209 if (std::abs(diff) > max_abs_diff)
13210 max_abs_diff = std::abs(diff);
13211 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13212 {
13213 const Tp frac = diff / f0;
13214 if (std::abs(frac) > max_abs_frac)
13215 max_abs_frac = std::abs(frac);
13216 }
13217 }
13218 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13219}
13220
13221// Test data for a=10.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
13222testcase_hyperg<double> data192[] = {
f92ab29f 13223 { 0.071191280690193509, 10.000000000000000, 2.0000000000000000,
7c62b943 13224 4.0000000000000000, -0.90000000000000002 },
f92ab29f 13225 { 0.085646504654238079, 10.000000000000000, 2.0000000000000000,
7c62b943 13226 4.0000000000000000, -0.80000000000000004 },
f92ab29f 13227 { 0.10478215656371073, 10.000000000000000, 2.0000000000000000,
7c62b943 13228 4.0000000000000000, -0.69999999999999996 },
f92ab29f 13229 { 0.13074816337653575, 10.000000000000000, 2.0000000000000000,
7c62b943 13230 4.0000000000000000, -0.59999999999999998 },
f92ab29f 13231 { 0.16701141666848116, 10.000000000000000, 2.0000000000000000,
7c62b943 13232 4.0000000000000000, -0.50000000000000000 },
f92ab29f 13233 { 0.21939323375313971, 10.000000000000000, 2.0000000000000000,
7c62b943 13234 4.0000000000000000, -0.40000000000000002 },
f92ab29f 13235 { 0.29813515331786627, 10.000000000000000, 2.0000000000000000,
7c62b943 13236 4.0000000000000000, -0.30000000000000004 },
f92ab29f 13237 { 0.42225974638874386, 10.000000000000000, 2.0000000000000000,
7c62b943 13238 4.0000000000000000, -0.19999999999999996 },
f92ab29f 13239 { 0.62942145962174867, 10.000000000000000, 2.0000000000000000,
7c62b943 13240 4.0000000000000000, -0.099999999999999978 },
f92ab29f 13241 { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
7c62b943 13242 4.0000000000000000, 0.0000000000000000 },
f92ab29f 13243 { 1.7218685262373197, 10.000000000000000, 2.0000000000000000,
7c62b943 13244 4.0000000000000000, 0.10000000000000009 },
f92ab29f 13245 { 3.2855760483514689, 10.000000000000000, 2.0000000000000000,
7c62b943 13246 4.0000000000000000, 0.19999999999999996 },
f92ab29f 13247 { 7.1616652508907093, 10.000000000000000, 2.0000000000000000,
7c62b943 13248 4.0000000000000000, 0.30000000000000004 },
f92ab29f 13249 { 18.612326808485907, 10.000000000000000, 2.0000000000000000,
7c62b943 13250 4.0000000000000000, 0.39999999999999991 },
f92ab29f 13251 { 61.476190476190474, 10.000000000000000, 2.0000000000000000,
7c62b943 13252 4.0000000000000000, 0.50000000000000000 },
f92ab29f 13253 { 286.27580915178623, 10.000000000000000, 2.0000000000000000,
7c62b943 13254 4.0000000000000000, 0.60000000000000009 },
f92ab29f 13255 { 2274.9441142102296, 10.000000000000000, 2.0000000000000000,
7c62b943 13256 4.0000000000000000, 0.69999999999999996 },
f92ab29f 13257 { 47229.761904761865, 10.000000000000000, 2.0000000000000000,
7c62b943 13258 4.0000000000000000, 0.80000000000000004 },
f92ab29f 13259 { 9961460.7142856438, 10.000000000000000, 2.0000000000000000,
7c62b943
BK
13260 4.0000000000000000, 0.89999999999999991 },
13261};
13262
13263// Test function for a=10.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
13264template <typename Tp>
13265void test192()
13266{
13267 const Tp eps = std::numeric_limits<Tp>::epsilon();
13268 Tp max_abs_diff = -Tp(1);
13269 Tp max_abs_frac = -Tp(1);
13270 unsigned int num_datum = sizeof(data192)
13271 / sizeof(testcase_hyperg<double>);
13272 for (unsigned int i = 0; i < num_datum; ++i)
13273 {
13274 const Tp f = std::tr1::hyperg(Tp(data192[i].a), Tp(data192[i].b),
13275 Tp(data192[i].c), Tp(data192[i].x));
13276 const Tp f0 = data192[i].f0;
13277 const Tp diff = f - f0;
13278 if (std::abs(diff) > max_abs_diff)
13279 max_abs_diff = std::abs(diff);
13280 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13281 {
13282 const Tp frac = diff / f0;
13283 if (std::abs(frac) > max_abs_frac)
13284 max_abs_frac = std::abs(frac);
13285 }
13286 }
13287 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13288}
13289
13290// Test data for a=10.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
13291testcase_hyperg<double> data193[] = {
f92ab29f 13292 { 0.14747230019381052, 10.000000000000000, 2.0000000000000000,
7c62b943 13293 6.0000000000000000, -0.90000000000000002 },
f92ab29f 13294 { 0.17073600100690603, 10.000000000000000, 2.0000000000000000,
7c62b943 13295 6.0000000000000000, -0.80000000000000004 },
f92ab29f 13296 { 0.19982795745135354, 10.000000000000000, 2.0000000000000000,
7c62b943 13297 6.0000000000000000, -0.69999999999999996 },
f92ab29f 13298 { 0.23681776864188067, 10.000000000000000, 2.0000000000000000,
7c62b943 13299 6.0000000000000000, -0.59999999999999998 },
f92ab29f 13300 { 0.28475624360398022, 10.000000000000000, 2.0000000000000000,
7c62b943 13301 6.0000000000000000, -0.50000000000000000 },
f92ab29f 13302 { 0.34827500743063144, 10.000000000000000, 2.0000000000000000,
7c62b943 13303 6.0000000000000000, -0.40000000000000002 },
f92ab29f 13304 { 0.43464829159684681, 10.000000000000000, 2.0000000000000000,
7c62b943 13305 6.0000000000000000, -0.30000000000000004 },
f92ab29f 13306 { 0.55576053438064787, 10.000000000000000, 2.0000000000000000,
7c62b943 13307 6.0000000000000000, -0.19999999999999996 },
f92ab29f 13308 { 0.73195020913445485, 10.000000000000000, 2.0000000000000000,
7c62b943 13309 6.0000000000000000, -0.099999999999999978 },
f92ab29f 13310 { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
7c62b943 13311 6.0000000000000000, 0.0000000000000000 },
f92ab29f 13312 { 1.4310223867822929, 10.000000000000000, 2.0000000000000000,
7c62b943 13313 6.0000000000000000, 0.10000000000000009 },
f92ab29f 13314 { 2.1742563399057540, 10.000000000000000, 2.0000000000000000,
7c62b943 13315 6.0000000000000000, 0.19999999999999996 },
f92ab29f 13316 { 3.5769231236256043, 10.000000000000000, 2.0000000000000000,
7c62b943 13317 6.0000000000000000, 0.30000000000000004 },
f92ab29f 13318 { 6.5620441134844363, 10.000000000000000, 2.0000000000000000,
7c62b943 13319 6.0000000000000000, 0.39999999999999991 },
f92ab29f 13320 { 14.063492063492063, 10.000000000000000, 2.0000000000000000,
7c62b943 13321 6.0000000000000000, 0.50000000000000000 },
f92ab29f 13322 { 38.085937500000036, 10.000000000000000, 2.0000000000000000,
7c62b943 13323 6.0000000000000000, 0.60000000000000009 },
f92ab29f 13324 { 150.92973632068282, 10.000000000000000, 2.0000000000000000,
7c62b943 13325 6.0000000000000000, 0.69999999999999996 },
f92ab29f 13326 { 1212.3015873015852, 10.000000000000000, 2.0000000000000000,
7c62b943 13327 6.0000000000000000, 0.80000000000000004 },
f92ab29f 13328 { 55107.142857142389, 10.000000000000000, 2.0000000000000000,
7c62b943
BK
13329 6.0000000000000000, 0.89999999999999991 },
13330};
13331
13332// Test function for a=10.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
13333template <typename Tp>
13334void test193()
13335{
13336 const Tp eps = std::numeric_limits<Tp>::epsilon();
13337 Tp max_abs_diff = -Tp(1);
13338 Tp max_abs_frac = -Tp(1);
13339 unsigned int num_datum = sizeof(data193)
13340 / sizeof(testcase_hyperg<double>);
13341 for (unsigned int i = 0; i < num_datum; ++i)
13342 {
13343 const Tp f = std::tr1::hyperg(Tp(data193[i].a), Tp(data193[i].b),
13344 Tp(data193[i].c), Tp(data193[i].x));
13345 const Tp f0 = data193[i].f0;
13346 const Tp diff = f - f0;
13347 if (std::abs(diff) > max_abs_diff)
13348 max_abs_diff = std::abs(diff);
13349 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13350 {
13351 const Tp frac = diff / f0;
13352 if (std::abs(frac) > max_abs_frac)
13353 max_abs_frac = std::abs(frac);
13354 }
13355 }
13356 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13357}
13358
13359// Test data for a=10.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
13360testcase_hyperg<double> data194[] = {
f92ab29f 13361 { 0.21658059714090588, 10.000000000000000, 2.0000000000000000,
7c62b943 13362 8.0000000000000000, -0.90000000000000002 },
f92ab29f 13363 { 0.24513539602702844, 10.000000000000000, 2.0000000000000000,
7c62b943 13364 8.0000000000000000, -0.80000000000000004 },
f92ab29f 13365 { 0.27967018274845046, 10.000000000000000, 2.0000000000000000,
7c62b943 13366 8.0000000000000000, -0.69999999999999996 },
f92ab29f 13367 { 0.32196044921874994, 10.000000000000000, 2.0000000000000000,
7c62b943 13368 8.0000000000000000, -0.59999999999999998 },
f92ab29f 13369 { 0.37448559670781900, 10.000000000000000, 2.0000000000000000,
7c62b943 13370 8.0000000000000000, -0.50000000000000000 },
f92ab29f 13371 { 0.44078856032208796, 10.000000000000000, 2.0000000000000000,
7c62b943 13372 8.0000000000000000, -0.40000000000000002 },
f92ab29f 13373 { 0.52606701446027815, 10.000000000000000, 2.0000000000000000,
7c62b943 13374 8.0000000000000000, -0.30000000000000004 },
f92ab29f 13375 { 0.63818158436214001, 10.000000000000000, 2.0000000000000000,
7c62b943 13376 8.0000000000000000, -0.19999999999999996 },
f92ab29f 13377 { 0.78944971882612769, 10.000000000000000, 2.0000000000000000,
7c62b943 13378 8.0000000000000000, -0.099999999999999978 },
f92ab29f 13379 { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
7c62b943 13380 8.0000000000000000, 0.0000000000000000 },
f92ab29f 13381 { 1.3044251384443430, 10.000000000000000, 2.0000000000000000,
7c62b943 13382 8.0000000000000000, 0.10000000000000009 },
f92ab29f 13383 { 1.7659505208333335, 10.000000000000000, 2.0000000000000000,
7c62b943 13384 8.0000000000000000, 0.19999999999999996 },
f92ab29f 13385 { 2.5093710953769270, 10.000000000000000, 2.0000000000000000,
7c62b943 13386 8.0000000000000000, 0.30000000000000004 },
f92ab29f 13387 { 3.8065843621399158, 10.000000000000000, 2.0000000000000000,
7c62b943 13388 8.0000000000000000, 0.39999999999999991 },
f92ab29f 13389 { 6.3333333333333313, 10.000000000000000, 2.0000000000000000,
7c62b943 13390 8.0000000000000000, 0.50000000000000000 },
f92ab29f 13391 { 12.109375000000004, 10.000000000000000, 2.0000000000000000,
7c62b943 13392 8.0000000000000000, 0.60000000000000009 },
f92ab29f 13393 { 29.115226337448540, 10.000000000000000, 2.0000000000000000,
7c62b943 13394 8.0000000000000000, 0.69999999999999996 },
f92ab29f 13395 { 108.33333333333330, 10.000000000000000, 2.0000000000000000,
7c62b943 13396 8.0000000000000000, 0.80000000000000004 },
f92ab29f 13397 { 1224.9999999999923, 10.000000000000000, 2.0000000000000000,
7c62b943
BK
13398 8.0000000000000000, 0.89999999999999991 },
13399};
13400
13401// Test function for a=10.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
13402template <typename Tp>
13403void test194()
13404{
13405 const Tp eps = std::numeric_limits<Tp>::epsilon();
13406 Tp max_abs_diff = -Tp(1);
13407 Tp max_abs_frac = -Tp(1);
13408 unsigned int num_datum = sizeof(data194)
13409 / sizeof(testcase_hyperg<double>);
13410 for (unsigned int i = 0; i < num_datum; ++i)
13411 {
13412 const Tp f = std::tr1::hyperg(Tp(data194[i].a), Tp(data194[i].b),
13413 Tp(data194[i].c), Tp(data194[i].x));
13414 const Tp f0 = data194[i].f0;
13415 const Tp diff = f - f0;
13416 if (std::abs(diff) > max_abs_diff)
13417 max_abs_diff = std::abs(diff);
13418 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13419 {
13420 const Tp frac = diff / f0;
13421 if (std::abs(frac) > max_abs_frac)
13422 max_abs_frac = std::abs(frac);
13423 }
13424 }
13425 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13426}
13427
13428// Test data for a=10.000000000000000, b=2.0000000000000000, c=10.000000000000000.
13429testcase_hyperg<double> data195[] = {
f92ab29f 13430 { 0.27700831024930750, 10.000000000000000, 2.0000000000000000,
7c62b943 13431 10.000000000000000, -0.90000000000000002 },
f92ab29f 13432 { 0.30864197530864196, 10.000000000000000, 2.0000000000000000,
7c62b943 13433 10.000000000000000, -0.80000000000000004 },
f92ab29f 13434 { 0.34602076124567477, 10.000000000000000, 2.0000000000000000,
7c62b943 13435 10.000000000000000, -0.69999999999999996 },
f92ab29f 13436 { 0.39062499999999994, 10.000000000000000, 2.0000000000000000,
7c62b943 13437 10.000000000000000, -0.59999999999999998 },
f92ab29f 13438 { 0.44444444444444442, 10.000000000000000, 2.0000000000000000,
7c62b943 13439 10.000000000000000, -0.50000000000000000 },
f92ab29f 13440 { 0.51020408163265307, 10.000000000000000, 2.0000000000000000,
7c62b943 13441 10.000000000000000, -0.40000000000000002 },
f92ab29f 13442 { 0.59171597633136097, 10.000000000000000, 2.0000000000000000,
7c62b943 13443 10.000000000000000, -0.30000000000000004 },
f92ab29f 13444 { 0.69444444444444453, 10.000000000000000, 2.0000000000000000,
7c62b943 13445 10.000000000000000, -0.19999999999999996 },
f92ab29f 13446 { 0.82644628099173545, 10.000000000000000, 2.0000000000000000,
7c62b943 13447 10.000000000000000, -0.099999999999999978 },
f92ab29f 13448 { 1.0000000000000000, 10.000000000000000, 2.0000000000000000,
7c62b943 13449 10.000000000000000, 0.0000000000000000 },
f92ab29f 13450 { 1.2345679012345681, 10.000000000000000, 2.0000000000000000,
7c62b943 13451 10.000000000000000, 0.10000000000000009 },
f92ab29f 13452 { 1.5624999999999998, 10.000000000000000, 2.0000000000000000,
7c62b943 13453 10.000000000000000, 0.19999999999999996 },
f92ab29f 13454 { 2.0408163265306127, 10.000000000000000, 2.0000000000000000,
7c62b943 13455 10.000000000000000, 0.30000000000000004 },
f92ab29f 13456 { 2.7777777777777768, 10.000000000000000, 2.0000000000000000,
7c62b943 13457 10.000000000000000, 0.39999999999999991 },
f92ab29f 13458 { 4.0000000000000000, 10.000000000000000, 2.0000000000000000,
7c62b943 13459 10.000000000000000, 0.50000000000000000 },
f92ab29f 13460 { 6.2500000000000036, 10.000000000000000, 2.0000000000000000,
7c62b943 13461 10.000000000000000, 0.60000000000000009 },
f92ab29f 13462 { 11.111111111111109, 10.000000000000000, 2.0000000000000000,
7c62b943 13463 10.000000000000000, 0.69999999999999996 },
f92ab29f 13464 { 25.000000000000007, 10.000000000000000, 2.0000000000000000,
7c62b943 13465 10.000000000000000, 0.80000000000000004 },
f92ab29f 13466 { 99.999999999999872, 10.000000000000000, 2.0000000000000000,
7c62b943
BK
13467 10.000000000000000, 0.89999999999999991 },
13468};
13469
13470// Test function for a=10.000000000000000, b=2.0000000000000000, c=10.000000000000000.
13471template <typename Tp>
13472void test195()
13473{
13474 const Tp eps = std::numeric_limits<Tp>::epsilon();
13475 Tp max_abs_diff = -Tp(1);
13476 Tp max_abs_frac = -Tp(1);
13477 unsigned int num_datum = sizeof(data195)
13478 / sizeof(testcase_hyperg<double>);
13479 for (unsigned int i = 0; i < num_datum; ++i)
13480 {
13481 const Tp f = std::tr1::hyperg(Tp(data195[i].a), Tp(data195[i].b),
13482 Tp(data195[i].c), Tp(data195[i].x));
13483 const Tp f0 = data195[i].f0;
13484 const Tp diff = f - f0;
13485 if (std::abs(diff) > max_abs_diff)
13486 max_abs_diff = std::abs(diff);
13487 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13488 {
13489 const Tp frac = diff / f0;
13490 if (std::abs(frac) > max_abs_frac)
13491 max_abs_frac = std::abs(frac);
13492 }
13493 }
13494 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13495}
13496
13497// Test data for a=10.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
13498testcase_hyperg<double> data196[] = {
f92ab29f 13499 { 0.00063586451658060152, 10.000000000000000, 5.0000000000000000,
7c62b943 13500 2.0000000000000000, -0.90000000000000002 },
f92ab29f 13501 { 0.0010334743461762443, 10.000000000000000, 5.0000000000000000,
7c62b943 13502 2.0000000000000000, -0.80000000000000004 },
f92ab29f 13503 { 0.0015326246054669515, 10.000000000000000, 5.0000000000000000,
7c62b943 13504 2.0000000000000000, -0.69999999999999996 },
f92ab29f 13505 { 0.0019007018181583387, 10.000000000000000, 5.0000000000000000,
7c62b943 13506 2.0000000000000000, -0.59999999999999998 },
f92ab29f 13507 { 0.0012845577715431577, 10.000000000000000, 5.0000000000000000,
7c62b943 13508 2.0000000000000000, -0.50000000000000000 },
f92ab29f 13509 { -0.0027213806178058826, 10.000000000000000, 5.0000000000000000,
7c62b943 13510 2.0000000000000000, -0.40000000000000002 },
f92ab29f 13511 { -0.015121744574954068, 10.000000000000000, 5.0000000000000000,
7c62b943 13512 2.0000000000000000, -0.30000000000000004 },
f92ab29f 13513 { -0.036637840562974443, 10.000000000000000, 5.0000000000000000,
7c62b943 13514 2.0000000000000000, -0.19999999999999996 },
f92ab29f 13515 { 0.019117849062621491, 10.000000000000000, 5.0000000000000000,
7c62b943 13516 2.0000000000000000, -0.099999999999999978 },
f92ab29f 13517 { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
7c62b943 13518 2.0000000000000000, 0.0000000000000000 },
f92ab29f 13519 { 9.8116901852350615, 10.000000000000000, 5.0000000000000000,
7c62b943 13520 2.0000000000000000, 0.10000000000000009 },
f92ab29f 13521 { 84.255589172244044, 10.000000000000000, 5.0000000000000000,
7c62b943 13522 2.0000000000000000, 0.19999999999999996 },
f92ab29f 13523 { 773.87517619421294, 10.000000000000000, 5.0000000000000000,
7c62b943 13524 2.0000000000000000, 0.30000000000000004 },
f92ab29f 13525 { 8556.9725363053585, 10.000000000000000, 5.0000000000000000,
7c62b943 13526 2.0000000000000000, 0.39999999999999991 },
f92ab29f 13527 { 129023.99999999996, 10.000000000000000, 5.0000000000000000,
7c62b943 13528 2.0000000000000000, 0.50000000000000000 },
f92ab29f 13529 { 3174543.3807373112, 10.000000000000000, 5.0000000000000000,
7c62b943 13530 2.0000000000000000, 0.60000000000000009 },
f92ab29f 13531 { 175133896.95814410, 10.000000000000000, 5.0000000000000000,
7c62b943 13532 2.0000000000000000, 0.69999999999999996 },
f92ab29f 13533 { 43564453125.000061, 10.000000000000000, 5.0000000000000000,
7c62b943 13534 2.0000000000000000, 0.80000000000000004 },
f92ab29f 13535 { 446859999999993.50, 10.000000000000000, 5.0000000000000000,
7c62b943
BK
13536 2.0000000000000000, 0.89999999999999991 },
13537};
13538
13539// Test function for a=10.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
13540template <typename Tp>
13541void test196()
13542{
13543 const Tp eps = std::numeric_limits<Tp>::epsilon();
13544 Tp max_abs_diff = -Tp(1);
13545 Tp max_abs_frac = -Tp(1);
13546 unsigned int num_datum = sizeof(data196)
13547 / sizeof(testcase_hyperg<double>);
13548 for (unsigned int i = 0; i < num_datum; ++i)
13549 {
13550 const Tp f = std::tr1::hyperg(Tp(data196[i].a), Tp(data196[i].b),
13551 Tp(data196[i].c), Tp(data196[i].x));
13552 const Tp f0 = data196[i].f0;
13553 const Tp diff = f - f0;
13554 if (std::abs(diff) > max_abs_diff)
13555 max_abs_diff = std::abs(diff);
13556 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13557 {
13558 const Tp frac = diff / f0;
13559 if (std::abs(frac) > max_abs_frac)
13560 max_abs_frac = std::abs(frac);
13561 }
13562 }
13563 VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
13564}
13565
13566// Test data for a=10.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
13567testcase_hyperg<double> data197[] = {
f92ab29f 13568 { -0.00030045430691819899, 10.000000000000000, 5.0000000000000000,
7c62b943 13569 4.0000000000000000, -0.90000000000000002 },
f92ab29f 13570 { -0.00031119487747328581, 10.000000000000000, 5.0000000000000000,
7c62b943 13571 4.0000000000000000, -0.80000000000000004 },
f92ab29f 13572 { -0.00014589213141649274, 10.000000000000000, 5.0000000000000000,
7c62b943 13573 4.0000000000000000, -0.69999999999999996 },
f92ab29f 13574 { 0.00056843418860809121, 10.000000000000000, 5.0000000000000000,
7c62b943 13575 4.0000000000000000, -0.59999999999999998 },
f92ab29f 13576 { 0.0028902549859721725, 10.000000000000000, 5.0000000000000000,
7c62b943 13577 4.0000000000000000, -0.50000000000000000 },
f92ab29f 13578 { 0.0098776037238877470, 10.000000000000000, 5.0000000000000000,
7c62b943 13579 4.0000000000000000, -0.40000000000000002 },
f92ab29f 13580 { 0.030689217428863914, 10.000000000000000, 5.0000000000000000,
7c62b943 13581 4.0000000000000000, -0.30000000000000004 },
f92ab29f 13582 { 0.094211590019076599, 10.000000000000000, 5.0000000000000000,
7c62b943 13583 4.0000000000000000, -0.19999999999999996 },
f92ab29f 13584 { 0.29791981455918376, 10.000000000000000, 5.0000000000000000,
7c62b943 13585 4.0000000000000000, -0.099999999999999978 },
f92ab29f 13586 { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
7c62b943 13587 4.0000000000000000, 0.0000000000000000 },
f92ab29f 13588 { 3.6646308771236793, 10.000000000000000, 5.0000000000000000,
7c62b943 13589 4.0000000000000000, 0.10000000000000009 },
f92ab29f 13590 { 15.133991837501521, 10.000000000000000, 5.0000000000000000,
7c62b943 13591 4.0000000000000000, 0.19999999999999996 },
f92ab29f 13592 { 73.331330046144089, 10.000000000000000, 5.0000000000000000,
7c62b943 13593 4.0000000000000000, 0.30000000000000004 },
f92ab29f 13594 { 441.01791167787133, 10.000000000000000, 5.0000000000000000,
7c62b943 13595 4.0000000000000000, 0.39999999999999991 },
f92ab29f 13596 { 3583.9999999999991, 10.000000000000000, 5.0000000000000000,
7c62b943 13597 4.0000000000000000, 0.50000000000000000 },
f92ab29f 13598 { 45299.530029296984, 10.000000000000000, 5.0000000000000000,
7c62b943 13599 4.0000000000000000, 0.60000000000000009 },
f92ab29f 13600 { 1157231.0002427341, 10.000000000000000, 5.0000000000000000,
7c62b943 13601 4.0000000000000000, 0.69999999999999996 },
f92ab29f 13602 { 107421875.00000016, 10.000000000000000, 5.0000000000000000,
7c62b943 13603 4.0000000000000000, 0.80000000000000004 },
f92ab29f 13604 { 234999999999.99734, 10.000000000000000, 5.0000000000000000,
7c62b943
BK
13605 4.0000000000000000, 0.89999999999999991 },
13606};
13607
13608// Test function for a=10.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
13609template <typename Tp>
13610void test197()
13611{
13612 const Tp eps = std::numeric_limits<Tp>::epsilon();
13613 Tp max_abs_diff = -Tp(1);
13614 Tp max_abs_frac = -Tp(1);
13615 unsigned int num_datum = sizeof(data197)
13616 / sizeof(testcase_hyperg<double>);
13617 for (unsigned int i = 0; i < num_datum; ++i)
13618 {
13619 const Tp f = std::tr1::hyperg(Tp(data197[i].a), Tp(data197[i].b),
13620 Tp(data197[i].c), Tp(data197[i].x));
13621 const Tp f0 = data197[i].f0;
13622 const Tp diff = f - f0;
13623 if (std::abs(diff) > max_abs_diff)
13624 max_abs_diff = std::abs(diff);
13625 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13626 {
13627 const Tp frac = diff / f0;
13628 if (std::abs(frac) > max_abs_frac)
13629 max_abs_frac = std::abs(frac);
13630 }
13631 }
13632 VERIFY(max_abs_frac < Tp(2.5000000000000014e-11));
13633}
13634
13635// Test data for a=10.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
13636testcase_hyperg<double> data198[] = {
f92ab29f 13637 { 0.0058530497315411210, 10.000000000000000, 5.0000000000000000,
7c62b943 13638 6.0000000000000000, -0.90000000000000002 },
f92ab29f 13639 { 0.0088526869356855692, 10.000000000000000, 5.0000000000000000,
7c62b943 13640 6.0000000000000000, -0.80000000000000004 },
f92ab29f 13641 { 0.013770987983443108, 10.000000000000000, 5.0000000000000000,
7c62b943 13642 6.0000000000000000, -0.69999999999999996 },
f92ab29f 13643 { 0.022108932690960800, 10.000000000000000, 5.0000000000000000,
7c62b943 13644 6.0000000000000000, -0.59999999999999998 },
f92ab29f 13645 { 0.036786236450921578, 10.000000000000000, 5.0000000000000000,
7c62b943 13646 6.0000000000000000, -0.50000000000000000 },
f92ab29f 13647 { 0.063750669040426422, 10.000000000000000, 5.0000000000000000,
7c62b943 13648 6.0000000000000000, -0.40000000000000002 },
f92ab29f 13649 { 0.11577228680714464, 10.000000000000000, 5.0000000000000000,
7c62b943 13650 6.0000000000000000, -0.30000000000000004 },
f92ab29f 13651 { 0.22197573416125735, 10.000000000000000, 5.0000000000000000,
7c62b943 13652 6.0000000000000000, -0.19999999999999996 },
f92ab29f 13653 { 0.45361312968415268, 10.000000000000000, 5.0000000000000000,
7c62b943 13654 6.0000000000000000, -0.099999999999999978 },
f92ab29f 13655 { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
7c62b943 13656 6.0000000000000000, 0.0000000000000000 },
f92ab29f 13657 { 2.4162889363082747, 10.000000000000000, 5.0000000000000000,
7c62b943 13658 6.0000000000000000, 0.10000000000000009 },
f92ab29f 13659 { 6.5381564791240399, 10.000000000000000, 5.0000000000000000,
7c62b943 13660 6.0000000000000000, 0.19999999999999996 },
f92ab29f 13661 { 20.415771011498428, 10.000000000000000, 5.0000000000000000,
7c62b943 13662 6.0000000000000000, 0.30000000000000004 },
f92ab29f 13663 { 76.870682056629221, 10.000000000000000, 5.0000000000000000,
7c62b943 13664 6.0000000000000000, 0.39999999999999991 },
f92ab29f 13665 { 373.58730158730162, 10.000000000000000, 5.0000000000000000,
7c62b943 13666 6.0000000000000000, 0.50000000000000000 },
f92ab29f 13667 { 2626.2555803571477, 10.000000000000000, 5.0000000000000000,
7c62b943 13668 6.0000000000000000, 0.60000000000000009 },
f92ab29f 13669 { 33060.960671081048, 10.000000000000000, 5.0000000000000000,
7c62b943 13670 6.0000000000000000, 0.69999999999999996 },
f92ab29f 13671 { 1203521.8253968258, 10.000000000000000, 5.0000000000000000,
7c62b943 13672 6.0000000000000000, 0.80000000000000004 },
f92ab29f 13673 { 584564285.71427989, 10.000000000000000, 5.0000000000000000,
7c62b943
BK
13674 6.0000000000000000, 0.89999999999999991 },
13675};
13676
13677// Test function for a=10.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
13678template <typename Tp>
13679void test198()
13680{
13681 const Tp eps = std::numeric_limits<Tp>::epsilon();
13682 Tp max_abs_diff = -Tp(1);
13683 Tp max_abs_frac = -Tp(1);
13684 unsigned int num_datum = sizeof(data198)
13685 / sizeof(testcase_hyperg<double>);
13686 for (unsigned int i = 0; i < num_datum; ++i)
13687 {
13688 const Tp f = std::tr1::hyperg(Tp(data198[i].a), Tp(data198[i].b),
13689 Tp(data198[i].c), Tp(data198[i].x));
13690 const Tp f0 = data198[i].f0;
13691 const Tp diff = f - f0;
13692 if (std::abs(diff) > max_abs_diff)
13693 max_abs_diff = std::abs(diff);
13694 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13695 {
13696 const Tp frac = diff / f0;
13697 if (std::abs(frac) > max_abs_frac)
13698 max_abs_frac = std::abs(frac);
13699 }
13700 }
13701 VERIFY(max_abs_frac < Tp(2.5000000000000015e-12));
13702}
13703
13704// Test data for a=10.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
13705testcase_hyperg<double> data199[] = {
f92ab29f 13706 { 0.020248990107069400, 10.000000000000000, 5.0000000000000000,
7c62b943 13707 8.0000000000000000, -0.90000000000000002 },
f92ab29f 13708 { 0.027876687750502421, 10.000000000000000, 5.0000000000000000,
7c62b943 13709 8.0000000000000000, -0.80000000000000004 },
f92ab29f 13710 { 0.039154648888447781, 10.000000000000000, 5.0000000000000000,
7c62b943 13711 8.0000000000000000, -0.69999999999999996 },
f92ab29f 13712 { 0.056251883506774923, 10.000000000000000, 5.0000000000000000,
7c62b943 13713 8.0000000000000000, -0.59999999999999998 },
f92ab29f 13714 { 0.082914189910074432, 10.000000000000000, 5.0000000000000000,
7c62b943 13715 8.0000000000000000, -0.50000000000000000 },
f92ab29f 13716 { 0.12585357817786477, 10.000000000000000, 5.0000000000000000,
7c62b943 13717 8.0000000000000000, -0.40000000000000002 },
f92ab29f 13718 { 0.19761423206224929, 10.000000000000000, 5.0000000000000000,
7c62b943 13719 8.0000000000000000, -0.30000000000000004 },
f92ab29f 13720 { 0.32280443863359243, 10.000000000000000, 5.0000000000000000,
7c62b943 13721 8.0000000000000000, -0.19999999999999996 },
f92ab29f 13722 { 0.55250024062839465, 10.000000000000000, 5.0000000000000000,
7c62b943 13723 8.0000000000000000, -0.099999999999999978 },
f92ab29f 13724 { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
7c62b943 13725 8.0000000000000000, 0.0000000000000000 },
f92ab29f 13726 { 1.9374297986599267, 10.000000000000000, 5.0000000000000000,
7c62b943 13727 8.0000000000000000, 0.10000000000000009 },
f92ab29f 13728 { 4.0849049886067696, 10.000000000000000, 5.0000000000000000,
7c62b943 13729 8.0000000000000000, 0.19999999999999996 },
f92ab29f 13730 { 9.5926988633258983, 10.000000000000000, 5.0000000000000000,
7c62b943 13731 8.0000000000000000, 0.30000000000000004 },
f92ab29f 13732 { 25.958314281359531, 10.000000000000000, 5.0000000000000000,
7c62b943 13733 8.0000000000000000, 0.39999999999999991 },
f92ab29f 13734 { 85.333333333333300, 10.000000000000000, 5.0000000000000000,
7c62b943 13735 8.0000000000000000, 0.50000000000000000 },
f92ab29f 13736 { 372.31445312500028, 10.000000000000000, 5.0000000000000000,
7c62b943 13737 8.0000000000000000, 0.60000000000000009 },
f92ab29f 13738 { 2545.3436976070675, 10.000000000000000, 5.0000000000000000,
7c62b943 13739 8.0000000000000000, 0.69999999999999996 },
f92ab29f 13740 { 39583.333333333343, 10.000000000000000, 5.0000000000000000,
7c62b943 13741 8.0000000000000000, 0.80000000000000004 },
f92ab29f 13742 { 4599999.9999999627, 10.000000000000000, 5.0000000000000000,
7c62b943
BK
13743 8.0000000000000000, 0.89999999999999991 },
13744};
13745
13746// Test function for a=10.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
13747template <typename Tp>
13748void test199()
13749{
13750 const Tp eps = std::numeric_limits<Tp>::epsilon();
13751 Tp max_abs_diff = -Tp(1);
13752 Tp max_abs_frac = -Tp(1);
13753 unsigned int num_datum = sizeof(data199)
13754 / sizeof(testcase_hyperg<double>);
13755 for (unsigned int i = 0; i < num_datum; ++i)
13756 {
13757 const Tp f = std::tr1::hyperg(Tp(data199[i].a), Tp(data199[i].b),
13758 Tp(data199[i].c), Tp(data199[i].x));
13759 const Tp f0 = data199[i].f0;
13760 const Tp diff = f - f0;
13761 if (std::abs(diff) > max_abs_diff)
13762 max_abs_diff = std::abs(diff);
13763 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13764 {
13765 const Tp frac = diff / f0;
13766 if (std::abs(frac) > max_abs_frac)
13767 max_abs_frac = std::abs(frac);
13768 }
13769 }
13770 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
13771}
13772
13773// Test data for a=10.000000000000000, b=5.0000000000000000, c=10.000000000000000.
13774testcase_hyperg<double> data200[] = {
f92ab29f 13775 { 0.040386107340619266, 10.000000000000000, 5.0000000000000000,
7c62b943 13776 10.000000000000000, -0.90000000000000002 },
f92ab29f 13777 { 0.052922149401344633, 10.000000000000000, 5.0000000000000000,
7c62b943 13778 10.000000000000000, -0.80000000000000004 },
f92ab29f 13779 { 0.070429627772374270, 10.000000000000000, 5.0000000000000000,
7c62b943 13780 10.000000000000000, -0.69999999999999996 },
f92ab29f 13781 { 0.095367431640624972, 10.000000000000000, 5.0000000000000000,
7c62b943 13782 10.000000000000000, -0.59999999999999998 },
f92ab29f 13783 { 0.13168724279835387, 10.000000000000000, 5.0000000000000000,
7c62b943 13784 10.000000000000000, -0.50000000000000000 },
f92ab29f 13785 { 0.18593443208187066, 10.000000000000000, 5.0000000000000000,
7c62b943 13786 10.000000000000000, -0.40000000000000002 },
f92ab29f 13787 { 0.26932907434290437, 10.000000000000000, 5.0000000000000000,
7c62b943 13788 10.000000000000000, -0.30000000000000004 },
f92ab29f 13789 { 0.40187757201646096, 10.000000000000000, 5.0000000000000000,
7c62b943 13790 10.000000000000000, -0.19999999999999996 },
f92ab29f 13791 { 0.62092132305915493, 10.000000000000000, 5.0000000000000000,
7c62b943 13792 10.000000000000000, -0.099999999999999978 },
f92ab29f 13793 { 1.0000000000000000, 10.000000000000000, 5.0000000000000000,
7c62b943 13794 10.000000000000000, 0.0000000000000000 },
f92ab29f 13795 { 1.6935087808430296, 10.000000000000000, 5.0000000000000000,
7c62b943 13796 10.000000000000000, 0.10000000000000009 },
f92ab29f 13797 { 3.0517578124999991, 10.000000000000000, 5.0000000000000000,
7c62b943 13798 10.000000000000000, 0.19999999999999996 },
f92ab29f 13799 { 5.9499018266198629, 10.000000000000000, 5.0000000000000000,
7c62b943 13800 10.000000000000000, 0.30000000000000004 },
f92ab29f 13801 { 12.860082304526737, 10.000000000000000, 5.0000000000000000,
7c62b943 13802 10.000000000000000, 0.39999999999999991 },
f92ab29f 13803 { 32.000000000000000, 10.000000000000000, 5.0000000000000000,
7c62b943 13804 10.000000000000000, 0.50000000000000000 },
f92ab29f 13805 { 97.656250000000114, 10.000000000000000, 5.0000000000000000,
7c62b943 13806 10.000000000000000, 0.60000000000000009 },
f92ab29f 13807 { 411.52263374485580, 10.000000000000000, 5.0000000000000000,
7c62b943 13808 10.000000000000000, 0.69999999999999996 },
f92ab29f 13809 { 3124.9999999999991, 10.000000000000000, 5.0000000000000000,
7c62b943 13810 10.000000000000000, 0.80000000000000004 },
f92ab29f 13811 { 99999.999999999665, 10.000000000000000, 5.0000000000000000,
7c62b943
BK
13812 10.000000000000000, 0.89999999999999991 },
13813};
13814
13815// Test function for a=10.000000000000000, b=5.0000000000000000, c=10.000000000000000.
13816template <typename Tp>
13817void test200()
13818{
13819 const Tp eps = std::numeric_limits<Tp>::epsilon();
13820 Tp max_abs_diff = -Tp(1);
13821 Tp max_abs_frac = -Tp(1);
13822 unsigned int num_datum = sizeof(data200)
13823 / sizeof(testcase_hyperg<double>);
13824 for (unsigned int i = 0; i < num_datum; ++i)
13825 {
13826 const Tp f = std::tr1::hyperg(Tp(data200[i].a), Tp(data200[i].b),
13827 Tp(data200[i].c), Tp(data200[i].x));
13828 const Tp f0 = data200[i].f0;
13829 const Tp diff = f - f0;
13830 if (std::abs(diff) > max_abs_diff)
13831 max_abs_diff = std::abs(diff);
13832 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13833 {
13834 const Tp frac = diff / f0;
13835 if (std::abs(frac) > max_abs_frac)
13836 max_abs_frac = std::abs(frac);
13837 }
13838 }
13839 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
13840}
13841
13842// Test data for a=10.000000000000000, b=10.000000000000000, c=2.0000000000000000.
13843testcase_hyperg<double> data201[] = {
f92ab29f 13844 { 2.3388730079478623e-05, 10.000000000000000, 10.000000000000000,
7c62b943 13845 2.0000000000000000, -0.90000000000000002 },
f92ab29f 13846 { -2.3204970759807341e-05, 10.000000000000000, 10.000000000000000,
7c62b943 13847 2.0000000000000000, -0.80000000000000004 },
f92ab29f 13848 { -0.00016219730505520291, 10.000000000000000, 10.000000000000000,
7c62b943 13849 2.0000000000000000, -0.69999999999999996 },
f92ab29f 13850 { -0.00044366962360925706, 10.000000000000000, 10.000000000000000,
7c62b943 13851 2.0000000000000000, -0.59999999999999998 },
f92ab29f 13852 { -0.00071863577205454770, 10.000000000000000, 10.000000000000000,
7c62b943 13853 2.0000000000000000, -0.50000000000000000 },
f92ab29f 13854 { 4.4378596544453810e-05, 10.000000000000000, 10.000000000000000,
7c62b943 13855 2.0000000000000000, -0.40000000000000002 },
f92ab29f 13856 { 0.0044446568070623570, 10.000000000000000, 10.000000000000000,
7c62b943 13857 2.0000000000000000, -0.30000000000000004 },
f92ab29f 13858 { 0.0071045155183571103, 10.000000000000000, 10.000000000000000,
7c62b943 13859 2.0000000000000000, -0.19999999999999996 },
f92ab29f 13860 { -0.049961558159890146, 10.000000000000000, 10.000000000000000,
7c62b943 13861 2.0000000000000000, -0.099999999999999978 },
f92ab29f 13862 { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
7c62b943 13863 2.0000000000000000, 0.0000000000000000 },
f92ab29f 13864 { 51.305449964107403, 10.000000000000000, 10.000000000000000,
7c62b943 13865 2.0000000000000000, 0.10000000000000009 },
f92ab29f 13866 { 1435.9545414461309, 10.000000000000000, 10.000000000000000,
7c62b943 13867 2.0000000000000000, 0.19999999999999996 },
f92ab29f 13868 { 39657.913058984115, 10.000000000000000, 10.000000000000000,
7c62b943 13869 2.0000000000000000, 0.30000000000000004 },
f92ab29f 13870 { 1346016.4468570501, 10.000000000000000, 10.000000000000000,
7c62b943 13871 2.0000000000000000, 0.39999999999999991 },
f92ab29f 13872 { 68086556.444444403, 10.000000000000000, 10.000000000000000,
7c62b943 13873 2.0000000000000000, 0.50000000000000000 },
f92ab29f 13874 { 6646235808.7301531, 10.000000000000000, 10.000000000000000,
7c62b943 13875 2.0000000000000000, 0.60000000000000009 },
f92ab29f 13876 { 1954852335479.9702, 10.000000000000000, 10.000000000000000,
7c62b943 13877 2.0000000000000000, 0.69999999999999996 },
f92ab29f 13878 { 4573796225043418.0, 10.000000000000000, 10.000000000000000,
7c62b943 13879 2.0000000000000000, 0.80000000000000004 },
f92ab29f 13880 { 1.8280190368899683e+21, 10.000000000000000, 10.000000000000000,
7c62b943
BK
13881 2.0000000000000000, 0.89999999999999991 },
13882};
13883
13884// Test function for a=10.000000000000000, b=10.000000000000000, c=2.0000000000000000.
13885template <typename Tp>
13886void test201()
13887{
13888 const Tp eps = std::numeric_limits<Tp>::epsilon();
13889 Tp max_abs_diff = -Tp(1);
13890 Tp max_abs_frac = -Tp(1);
13891 unsigned int num_datum = sizeof(data201)
13892 / sizeof(testcase_hyperg<double>);
13893 for (unsigned int i = 0; i < num_datum; ++i)
13894 {
13895 const Tp f = std::tr1::hyperg(Tp(data201[i].a), Tp(data201[i].b),
13896 Tp(data201[i].c), Tp(data201[i].x));
13897 const Tp f0 = data201[i].f0;
13898 const Tp diff = f - f0;
13899 if (std::abs(diff) > max_abs_diff)
13900 max_abs_diff = std::abs(diff);
13901 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13902 {
13903 const Tp frac = diff / f0;
13904 if (std::abs(frac) > max_abs_frac)
13905 max_abs_frac = std::abs(frac);
13906 }
13907 }
13908 VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
13909}
13910
13911// Test data for a=10.000000000000000, b=10.000000000000000, c=4.0000000000000000.
13912testcase_hyperg<double> data202[] = {
f92ab29f 13913 { 1.3504013648882651e-05, 10.000000000000000, 10.000000000000000,
7c62b943 13914 4.0000000000000000, -0.90000000000000002 },
f92ab29f 13915 { 3.1753432098404372e-05, 10.000000000000000, 10.000000000000000,
7c62b943 13916 4.0000000000000000, -0.80000000000000004 },
f92ab29f 13917 { 6.2032098207659688e-05, 10.000000000000000, 10.000000000000000,
7c62b943 13918 4.0000000000000000, -0.69999999999999996 },
f92ab29f 13919 { 8.8747213942768282e-05, 10.000000000000000, 10.000000000000000,
7c62b943 13920 4.0000000000000000, -0.59999999999999998 },
f92ab29f 13921 { 1.0478094697243911e-05, 10.000000000000000, 10.000000000000000,
7c62b943 13922 4.0000000000000000, -0.50000000000000000 },
f92ab29f 13923 { -0.00055998751006011325, 10.000000000000000, 10.000000000000000,
7c62b943 13924 4.0000000000000000, -0.40000000000000002 },
f92ab29f 13925 { -0.0024718654966577563, 10.000000000000000, 10.000000000000000,
7c62b943 13926 4.0000000000000000, -0.30000000000000004 },
f92ab29f 13927 { -0.0027000264053619817, 10.000000000000000, 10.000000000000000,
7c62b943 13928 4.0000000000000000, -0.19999999999999996 },
f92ab29f 13929 { 0.066515394406810674, 10.000000000000000, 10.000000000000000,
7c62b943 13930 4.0000000000000000, -0.099999999999999978 },
f92ab29f 13931 { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
7c62b943 13932 4.0000000000000000, 0.0000000000000000 },
f92ab29f 13933 { 11.579200866389527, 10.000000000000000, 10.000000000000000,
7c62b943 13934 4.0000000000000000, 0.10000000000000009 },
f92ab29f 13935 { 137.50750548795256, 10.000000000000000, 10.000000000000000,
7c62b943 13936 4.0000000000000000, 0.19999999999999996 },
f92ab29f 13937 { 1901.3196072993419, 10.000000000000000, 10.000000000000000,
7c62b943 13938 4.0000000000000000, 0.30000000000000004 },
f92ab29f 13939 { 34210.659507137796, 10.000000000000000, 10.000000000000000,
7c62b943 13940 4.0000000000000000, 0.39999999999999991 },
f92ab29f 13941 { 920588.19047619053, 10.000000000000000, 10.000000000000000,
7c62b943 13942 4.0000000000000000, 0.50000000000000000 },
f92ab29f 13943 { 45876220.933028772, 10.000000000000000, 10.000000000000000,
7c62b943 13944 4.0000000000000000, 0.60000000000000009 },
f92ab29f 13945 { 6234608574.0963297, 10.000000000000000, 10.000000000000000,
7c62b943 13946 4.0000000000000000, 0.69999999999999996 },
f92ab29f 13947 { 5445391090029.7783, 10.000000000000000, 10.000000000000000,
7c62b943 13948 4.0000000000000000, 0.80000000000000004 },
f92ab29f 13949 { 4.6508713107142163e+17, 10.000000000000000, 10.000000000000000,
7c62b943
BK
13950 4.0000000000000000, 0.89999999999999991 },
13951};
13952
13953// Test function for a=10.000000000000000, b=10.000000000000000, c=4.0000000000000000.
13954template <typename Tp>
13955void test202()
13956{
13957 const Tp eps = std::numeric_limits<Tp>::epsilon();
13958 Tp max_abs_diff = -Tp(1);
13959 Tp max_abs_frac = -Tp(1);
13960 unsigned int num_datum = sizeof(data202)
13961 / sizeof(testcase_hyperg<double>);
13962 for (unsigned int i = 0; i < num_datum; ++i)
13963 {
13964 const Tp f = std::tr1::hyperg(Tp(data202[i].a), Tp(data202[i].b),
13965 Tp(data202[i].c), Tp(data202[i].x));
13966 const Tp f0 = data202[i].f0;
13967 const Tp diff = f - f0;
13968 if (std::abs(diff) > max_abs_diff)
13969 max_abs_diff = std::abs(diff);
13970 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
13971 {
13972 const Tp frac = diff / f0;
13973 if (std::abs(frac) > max_abs_frac)
13974 max_abs_frac = std::abs(frac);
13975 }
13976 }
13977 VERIFY(max_abs_frac < Tp(2.5000000000000013e-09));
13978}
13979
13980// Test data for a=10.000000000000000, b=10.000000000000000, c=6.0000000000000000.
13981testcase_hyperg<double> data203[] = {
f92ab29f 13982 { -2.6846726901567720e-05, 10.000000000000000, 10.000000000000000,
7c62b943 13983 6.0000000000000000, -0.90000000000000002 },
f92ab29f 13984 { -4.7817237144207266e-05, 10.000000000000000, 10.000000000000000,
7c62b943 13985 6.0000000000000000, -0.80000000000000004 },
f92ab29f 13986 { -7.2908121941975601e-05, 10.000000000000000, 10.000000000000000,
7c62b943 13987 6.0000000000000000, -0.69999999999999996 },
f92ab29f 13988 { -6.0427853197480476e-05, 10.000000000000000, 10.000000000000000,
7c62b943 13989 6.0000000000000000, -0.59999999999999998 },
f92ab29f 13990 { 0.00020559720946645182, 10.000000000000000, 10.000000000000000,
7c62b943 13991 6.0000000000000000, -0.50000000000000000 },
f92ab29f 13992 { 0.0017056910683365828, 10.000000000000000, 10.000000000000000,
7c62b943 13993 6.0000000000000000, -0.40000000000000002 },
f92ab29f 13994 { 0.0088037230970526795, 10.000000000000000, 10.000000000000000,
7c62b943 13995 6.0000000000000000, -0.30000000000000004 },
f92ab29f 13996 { 0.041510819735141674, 10.000000000000000, 10.000000000000000,
7c62b943 13997 6.0000000000000000, -0.19999999999999996 },
f92ab29f 13998 { 0.19754880805677258, 10.000000000000000, 10.000000000000000,
7c62b943 13999 6.0000000000000000, -0.099999999999999978 },
f92ab29f 14000 { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
7c62b943 14001 6.0000000000000000, 0.0000000000000000 },
f92ab29f 14002 { 5.6130947302779246, 10.000000000000000, 10.000000000000000,
7c62b943 14003 6.0000000000000000, 0.10000000000000009 },
f92ab29f 14004 { 36.475357196722442, 10.000000000000000, 10.000000000000000,
7c62b943 14005 6.0000000000000000, 0.19999999999999996 },
f92ab29f 14006 { 289.29483001400672, 10.000000000000000, 10.000000000000000,
7c62b943 14007 6.0000000000000000, 0.30000000000000004 },
f92ab29f 14008 { 3010.8676549536503, 10.000000000000000, 10.000000000000000,
7c62b943 14009 6.0000000000000000, 0.39999999999999991 },
f92ab29f 14010 { 45844.317460317419, 10.000000000000000, 10.000000000000000,
7c62b943 14011 6.0000000000000000, 0.50000000000000000 },
f92ab29f 14012 { 1221852.6431492427, 10.000000000000000, 10.000000000000000,
7c62b943 14013 6.0000000000000000, 0.60000000000000009 },
f92ab29f 14014 { 79585968.928968787, 10.000000000000000, 10.000000000000000,
7c62b943 14015 6.0000000000000000, 0.69999999999999996 },
f92ab29f 14016 { 26733475942.460335, 10.000000000000000, 10.000000000000000,
7c62b943 14017 6.0000000000000000, 0.80000000000000004 },
f92ab29f 14018 { 500206428571421.19, 10.000000000000000, 10.000000000000000,
7c62b943
BK
14019 6.0000000000000000, 0.89999999999999991 },
14020};
14021
14022// Test function for a=10.000000000000000, b=10.000000000000000, c=6.0000000000000000.
14023template <typename Tp>
14024void test203()
14025{
14026 const Tp eps = std::numeric_limits<Tp>::epsilon();
14027 Tp max_abs_diff = -Tp(1);
14028 Tp max_abs_frac = -Tp(1);
14029 unsigned int num_datum = sizeof(data203)
14030 / sizeof(testcase_hyperg<double>);
14031 for (unsigned int i = 0; i < num_datum; ++i)
14032 {
14033 const Tp f = std::tr1::hyperg(Tp(data203[i].a), Tp(data203[i].b),
14034 Tp(data203[i].c), Tp(data203[i].x));
14035 const Tp f0 = data203[i].f0;
14036 const Tp diff = f - f0;
14037 if (std::abs(diff) > max_abs_diff)
14038 max_abs_diff = std::abs(diff);
14039 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14040 {
14041 const Tp frac = diff / f0;
14042 if (std::abs(frac) > max_abs_frac)
14043 max_abs_frac = std::abs(frac);
14044 }
14045 }
14046 VERIFY(max_abs_frac < Tp(2.5000000000000017e-10));
14047}
14048
14049// Test data for a=10.000000000000000, b=10.000000000000000, c=8.0000000000000000.
14050testcase_hyperg<double> data204[] = {
f92ab29f 14051 { 0.00025866179054245944, 10.000000000000000, 10.000000000000000,
7c62b943 14052 8.0000000000000000, -0.90000000000000002 },
f92ab29f 14053 { 0.00053402577739214288, 10.000000000000000, 10.000000000000000,
7c62b943 14054 8.0000000000000000, -0.80000000000000004 },
f92ab29f 14055 { 0.0011390075227240345, 10.000000000000000, 10.000000000000000,
7c62b943 14056 8.0000000000000000, -0.69999999999999996 },
f92ab29f 14057 { 0.0025224267119483192, 10.000000000000000, 10.000000000000000,
7c62b943 14058 8.0000000000000000, -0.59999999999999998 },
f92ab29f 14059 { 0.0058340332124251467, 10.000000000000000, 10.000000000000000,
7c62b943 14060 8.0000000000000000, -0.50000000000000000 },
f92ab29f 14061 { 0.014189256143045285, 10.000000000000000, 10.000000000000000,
7c62b943 14062 8.0000000000000000, -0.40000000000000002 },
f92ab29f 14063 { 0.036590990011337567, 10.000000000000000, 10.000000000000000,
7c62b943 14064 8.0000000000000000, -0.30000000000000004 },
f92ab29f 14065 { 0.10106560781146992, 10.000000000000000, 10.000000000000000,
7c62b943 14066 8.0000000000000000, -0.19999999999999996 },
f92ab29f 14067 { 0.30278778538531409, 10.000000000000000, 10.000000000000000,
7c62b943 14068 8.0000000000000000, -0.099999999999999978 },
f92ab29f 14069 { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
7c62b943 14070 8.0000000000000000, 0.0000000000000000 },
f92ab29f 14071 { 3.7187249990350599, 10.000000000000000, 10.000000000000000,
7c62b943 14072 8.0000000000000000, 0.10000000000000009 },
f92ab29f 14073 { 16.023275545901704, 10.000000000000000, 10.000000000000000,
7c62b943 14074 8.0000000000000000, 0.19999999999999996 },
f92ab29f 14075 { 83.265377219882822, 10.000000000000000, 10.000000000000000,
7c62b943 14076 8.0000000000000000, 0.30000000000000004 },
f92ab29f 14077 { 553.31413918843987, 10.000000000000000, 10.000000000000000,
7c62b943 14078 8.0000000000000000, 0.39999999999999991 },
f92ab29f 14079 { 5148.4444444444416, 10.000000000000000, 10.000000000000000,
7c62b943 14080 8.0000000000000000, 0.50000000000000000 },
f92ab29f 14081 { 78082.084655761908, 10.000000000000000, 10.000000000000000,
7c62b943 14082 8.0000000000000000, 0.60000000000000009 },
f92ab29f 14083 { 2565874.8781353114, 10.000000000000000, 10.000000000000000,
7c62b943 14084 8.0000000000000000, 0.69999999999999996 },
f92ab29f 14085 { 346137152.77777809, 10.000000000000000, 10.000000000000000,
7c62b943 14086 8.0000000000000000, 0.80000000000000004 },
f92ab29f 14087 { 1472499999999.9834, 10.000000000000000, 10.000000000000000,
7c62b943
BK
14088 8.0000000000000000, 0.89999999999999991 },
14089};
14090
14091// Test function for a=10.000000000000000, b=10.000000000000000, c=8.0000000000000000.
14092template <typename Tp>
14093void test204()
14094{
14095 const Tp eps = std::numeric_limits<Tp>::epsilon();
14096 Tp max_abs_diff = -Tp(1);
14097 Tp max_abs_frac = -Tp(1);
14098 unsigned int num_datum = sizeof(data204)
14099 / sizeof(testcase_hyperg<double>);
14100 for (unsigned int i = 0; i < num_datum; ++i)
14101 {
14102 const Tp f = std::tr1::hyperg(Tp(data204[i].a), Tp(data204[i].b),
14103 Tp(data204[i].c), Tp(data204[i].x));
14104 const Tp f0 = data204[i].f0;
14105 const Tp diff = f - f0;
14106 if (std::abs(diff) > max_abs_diff)
14107 max_abs_diff = std::abs(diff);
14108 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14109 {
14110 const Tp frac = diff / f0;
14111 if (std::abs(frac) > max_abs_frac)
14112 max_abs_frac = std::abs(frac);
14113 }
14114 }
14115 VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
14116}
14117
14118// Test data for a=10.000000000000000, b=10.000000000000000, c=10.000000000000000.
14119testcase_hyperg<double> data205[] = {
f92ab29f 14120 { 0.0016310376661280216, 10.000000000000000, 10.000000000000000,
7c62b943 14121 10.000000000000000, -0.90000000000000002 },
f92ab29f 14122 { 0.0028007538972582421, 10.000000000000000, 10.000000000000000,
7c62b943 14123 10.000000000000000, -0.80000000000000004 },
f92ab29f 14124 { 0.0049603324681551939, 10.000000000000000, 10.000000000000000,
7c62b943 14125 10.000000000000000, -0.69999999999999996 },
f92ab29f 14126 { 0.0090949470177292789, 10.000000000000000, 10.000000000000000,
7c62b943 14127 10.000000000000000, -0.59999999999999998 },
f92ab29f 14128 { 0.017341529915832606, 10.000000000000000, 10.000000000000000,
7c62b943 14129 10.000000000000000, -0.50000000000000000 },
f92ab29f 14130 { 0.034571613033607777, 10.000000000000000, 10.000000000000000,
7c62b943 14131 10.000000000000000, -0.40000000000000002 },
f92ab29f 14132 { 0.072538150286405714, 10.000000000000000, 10.000000000000000,
7c62b943 14133 10.000000000000000, -0.30000000000000004 },
f92ab29f 14134 { 0.16150558288984579, 10.000000000000000, 10.000000000000000,
7c62b943 14135 10.000000000000000, -0.19999999999999996 },
f92ab29f 14136 { 0.38554328942953148, 10.000000000000000, 10.000000000000000,
7c62b943 14137 10.000000000000000, -0.099999999999999978 },
f92ab29f 14138 { 1.0000000000000000, 10.000000000000000, 10.000000000000000,
7c62b943 14139 10.000000000000000, 0.0000000000000000 },
f92ab29f 14140 { 2.8679719907924444, 10.000000000000000, 10.000000000000000,
7c62b943 14141 10.000000000000000, 0.10000000000000009 },
f92ab29f 14142 { 9.3132257461547816, 10.000000000000000, 10.000000000000000,
7c62b943 14143 10.000000000000000, 0.19999999999999996 },
f92ab29f 14144 { 35.401331746414378, 10.000000000000000, 10.000000000000000,
7c62b943 14145 10.000000000000000, 0.30000000000000004 },
f92ab29f 14146 { 165.38171687920172, 10.000000000000000, 10.000000000000000,
7c62b943 14147 10.000000000000000, 0.39999999999999991 },
f92ab29f 14148 { 1024.0000000000000, 10.000000000000000, 10.000000000000000,
7c62b943 14149 10.000000000000000, 0.50000000000000000 },
f92ab29f 14150 { 9536.7431640625200, 10.000000000000000, 10.000000000000000,
7c62b943 14151 10.000000000000000, 0.60000000000000009 },
f92ab29f 14152 { 169350.87808430271, 10.000000000000000, 10.000000000000000,
7c62b943 14153 10.000000000000000, 0.69999999999999996 },
f92ab29f 14154 { 9765624.9999999944, 10.000000000000000, 10.000000000000000,
7c62b943 14155 10.000000000000000, 0.80000000000000004 },
f92ab29f 14156 { 9999999999.9999332, 10.000000000000000, 10.000000000000000,
7c62b943
BK
14157 10.000000000000000, 0.89999999999999991 },
14158};
14159
14160// Test function for a=10.000000000000000, b=10.000000000000000, c=10.000000000000000.
14161template <typename Tp>
14162void test205()
14163{
14164 const Tp eps = std::numeric_limits<Tp>::epsilon();
14165 Tp max_abs_diff = -Tp(1);
14166 Tp max_abs_frac = -Tp(1);
14167 unsigned int num_datum = sizeof(data205)
14168 / sizeof(testcase_hyperg<double>);
14169 for (unsigned int i = 0; i < num_datum; ++i)
14170 {
14171 const Tp f = std::tr1::hyperg(Tp(data205[i].a), Tp(data205[i].b),
14172 Tp(data205[i].c), Tp(data205[i].x));
14173 const Tp f0 = data205[i].f0;
14174 const Tp diff = f - f0;
14175 if (std::abs(diff) > max_abs_diff)
14176 max_abs_diff = std::abs(diff);
14177 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14178 {
14179 const Tp frac = diff / f0;
14180 if (std::abs(frac) > max_abs_frac)
14181 max_abs_frac = std::abs(frac);
14182 }
14183 }
14184 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14185}
14186
14187// Test data for a=10.000000000000000, b=20.000000000000000, c=2.0000000000000000.
14188testcase_hyperg<double> data206[] = {
f92ab29f 14189 { -2.1776535308707967e-07, 10.000000000000000, 20.000000000000000,
7c62b943 14190 2.0000000000000000, -0.90000000000000002 },
f92ab29f 14191 { -2.9128833151427998e-06, 10.000000000000000, 20.000000000000000,
7c62b943 14192 2.0000000000000000, -0.80000000000000004 },
f92ab29f 14193 { -9.4755553429035093e-06, 10.000000000000000, 20.000000000000000,
7c62b943 14194 2.0000000000000000, -0.69999999999999996 },
f92ab29f 14195 { -1.2844297353813116e-05, 10.000000000000000, 20.000000000000000,
7c62b943 14196 2.0000000000000000, -0.59999999999999998 },
f92ab29f 14197 { 3.6576965483568809e-05, 10.000000000000000, 20.000000000000000,
7c62b943 14198 2.0000000000000000, -0.50000000000000000 },
f92ab29f 14199 { 0.00020847453890692649, 10.000000000000000, 20.000000000000000,
7c62b943 14200 2.0000000000000000, -0.40000000000000002 },
f92ab29f 14201 { -0.00022868510398174632, 10.000000000000000, 20.000000000000000,
7c62b943 14202 2.0000000000000000, -0.30000000000000004 },
f92ab29f 14203 { -0.0021855513841942732, 10.000000000000000, 20.000000000000000,
7c62b943 14204 2.0000000000000000, -0.19999999999999996 },
f92ab29f 14205 { 0.014662111759334634, 10.000000000000000, 20.000000000000000,
7c62b943 14206 2.0000000000000000, -0.099999999999999978 },
f92ab29f 14207 { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
7c62b943 14208 2.0000000000000000, 0.0000000000000000 },
f92ab29f 14209 { 746.44776348798098, 10.000000000000000, 20.000000000000000,
7c62b943 14210 2.0000000000000000, 0.10000000000000009 },
f92ab29f 14211 { 136080.48445225612, 10.000000000000000, 20.000000000000000,
7c62b943 14212 2.0000000000000000, 0.19999999999999996 },
f92ab29f 14213 { 23094279.597826406, 10.000000000000000, 20.000000000000000,
7c62b943 14214 2.0000000000000000, 0.30000000000000004 },
f92ab29f 14215 { 5315913395.5545301, 10.000000000000000, 20.000000000000000,
7c62b943 14216 2.0000000000000000, 0.39999999999999991 },
f92ab29f 14217 { 2261935718399.9990, 10.000000000000000, 20.000000000000000,
7c62b943 14218 2.0000000000000000, 0.50000000000000000 },
f92ab29f 14219 { 2669150854828235.0, 10.000000000000000, 20.000000000000000,
7c62b943 14220 2.0000000000000000, 0.60000000000000009 },
f92ab29f 14221 { 1.7499363099365994e+19, 10.000000000000000, 20.000000000000000,
7c62b943 14222 2.0000000000000000, 0.69999999999999996 },
f92ab29f 14223 { 2.8881518494606140e+24, 10.000000000000000, 20.000000000000000,
7c62b943 14224 2.0000000000000000, 0.80000000000000004 },
f92ab29f 14225 { 1.4165513933661626e+33, 10.000000000000000, 20.000000000000000,
7c62b943
BK
14226 2.0000000000000000, 0.89999999999999991 },
14227};
14228
14229// Test function for a=10.000000000000000, b=20.000000000000000, c=2.0000000000000000.
14230template <typename Tp>
14231void test206()
14232{
14233 const Tp eps = std::numeric_limits<Tp>::epsilon();
14234 Tp max_abs_diff = -Tp(1);
14235 Tp max_abs_frac = -Tp(1);
14236 unsigned int num_datum = sizeof(data206)
14237 / sizeof(testcase_hyperg<double>);
14238 for (unsigned int i = 0; i < num_datum; ++i)
14239 {
14240 const Tp f = std::tr1::hyperg(Tp(data206[i].a), Tp(data206[i].b),
14241 Tp(data206[i].c), Tp(data206[i].x));
14242 const Tp f0 = data206[i].f0;
14243 const Tp diff = f - f0;
14244 if (std::abs(diff) > max_abs_diff)
14245 max_abs_diff = std::abs(diff);
14246 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14247 {
14248 const Tp frac = diff / f0;
14249 if (std::abs(frac) > max_abs_frac)
14250 max_abs_frac = std::abs(frac);
14251 }
14252 }
14253 VERIFY(max_abs_frac < Tp(1.0000000000000005e-08));
14254}
14255
14256// Test data for a=10.000000000000000, b=20.000000000000000, c=4.0000000000000000.
14257testcase_hyperg<double> data207[] = {
f92ab29f 14258 { 1.7149006973860441e-07, 10.000000000000000, 20.000000000000000,
7c62b943 14259 4.0000000000000000, -0.90000000000000002 },
f92ab29f 14260 { 3.2399324904088936e-07, 10.000000000000000, 20.000000000000000,
7c62b943 14261 4.0000000000000000, -0.80000000000000004 },
f92ab29f 14262 { 1.6015317712089860e-07, 10.000000000000000, 20.000000000000000,
7c62b943 14263 4.0000000000000000, -0.69999999999999996 },
f92ab29f 14264 { -2.0500917204199595e-06, 10.000000000000000, 20.000000000000000,
7c62b943 14265 4.0000000000000000, -0.59999999999999998 },
f92ab29f 14266 { -1.0175546788599472e-05, 10.000000000000000, 20.000000000000000,
7c62b943 14267 4.0000000000000000, -0.50000000000000000 },
f92ab29f 14268 { -1.1720101988202453e-05, 10.000000000000000, 20.000000000000000,
7c62b943 14269 4.0000000000000000, -0.40000000000000002 },
f92ab29f 14270 { 0.00014199637113974185, 10.000000000000000, 20.000000000000000,
7c62b943 14271 4.0000000000000000, -0.30000000000000004 },
f92ab29f 14272 { 0.00021263363640642297, 10.000000000000000, 20.000000000000000,
7c62b943 14273 4.0000000000000000, -0.19999999999999996 },
f92ab29f 14274 { -0.0072649256698441751, 10.000000000000000, 20.000000000000000,
7c62b943 14275 4.0000000000000000, -0.099999999999999978 },
f92ab29f 14276 { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
7c62b943 14277 4.0000000000000000, 0.0000000000000000 },
f92ab29f 14278 { 90.430293772869618, 10.000000000000000, 20.000000000000000,
7c62b943 14279 4.0000000000000000, 0.10000000000000009 },
f92ab29f 14280 { 6248.1455940292308, 10.000000000000000, 20.000000000000000,
7c62b943 14281 4.0000000000000000, 0.19999999999999996 },
f92ab29f 14282 { 501143.39852548984, 10.000000000000000, 20.000000000000000,
7c62b943 14283 4.0000000000000000, 0.30000000000000004 },
f92ab29f 14284 { 58852027.356439680, 10.000000000000000, 20.000000000000000,
7c62b943 14285 4.0000000000000000, 0.39999999999999991 },
f92ab29f 14286 { 12942923093.333330, 10.000000000000000, 20.000000000000000,
7c62b943 14287 4.0000000000000000, 0.50000000000000000 },
f92ab29f 14288 { 7618073993853.6592, 10.000000000000000, 20.000000000000000,
7c62b943 14289 4.0000000000000000, 0.60000000000000009 },
f92ab29f 14290 { 22630251562549288., 10.000000000000000, 20.000000000000000,
7c62b943 14291 4.0000000000000000, 0.69999999999999996 },
f92ab29f 14292 { 1.3708372433980356e+21, 10.000000000000000, 20.000000000000000,
7c62b943 14293 4.0000000000000000, 0.80000000000000004 },
f92ab29f 14294 { 1.4154113619999653e+29, 10.000000000000000, 20.000000000000000,
7c62b943
BK
14295 4.0000000000000000, 0.89999999999999991 },
14296};
14297
14298// Test function for a=10.000000000000000, b=20.000000000000000, c=4.0000000000000000.
14299template <typename Tp>
14300void test207()
14301{
14302 const Tp eps = std::numeric_limits<Tp>::epsilon();
14303 Tp max_abs_diff = -Tp(1);
14304 Tp max_abs_frac = -Tp(1);
14305 unsigned int num_datum = sizeof(data207)
14306 / sizeof(testcase_hyperg<double>);
14307 for (unsigned int i = 0; i < num_datum; ++i)
14308 {
14309 const Tp f = std::tr1::hyperg(Tp(data207[i].a), Tp(data207[i].b),
14310 Tp(data207[i].c), Tp(data207[i].x));
14311 const Tp f0 = data207[i].f0;
14312 const Tp diff = f - f0;
14313 if (std::abs(diff) > max_abs_diff)
14314 max_abs_diff = std::abs(diff);
14315 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14316 {
14317 const Tp frac = diff / f0;
14318 if (std::abs(frac) > max_abs_frac)
14319 max_abs_frac = std::abs(frac);
14320 }
14321 }
14322 VERIFY(max_abs_frac < Tp(5.0000000000000024e-08));
14323}
14324
14325// Test data for a=10.000000000000000, b=20.000000000000000, c=6.0000000000000000.
14326testcase_hyperg<double> data208[] = {
f92ab29f 14327 { -1.6667473370780257e-08, 10.000000000000000, 20.000000000000000,
7c62b943 14328 6.0000000000000000, -0.90000000000000002 },
f92ab29f 14329 { 8.6214844067774863e-08, 10.000000000000000, 20.000000000000000,
7c62b943 14330 6.0000000000000000, -0.80000000000000004 },
f92ab29f 14331 { 5.7778331238835108e-07, 10.000000000000000, 20.000000000000000,
7c62b943 14332 6.0000000000000000, -0.69999999999999996 },
f92ab29f 14333 { 2.1911400500362969e-06, 10.000000000000000, 20.000000000000000,
7c62b943 14334 6.0000000000000000, -0.59999999999999998 },
f92ab29f 14335 { 4.7440049217100417e-06, 10.000000000000000, 20.000000000000000,
7c62b943 14336 6.0000000000000000, -0.50000000000000000 },
f92ab29f 14337 { -1.0564233314924258e-05, 10.000000000000000, 20.000000000000000,
7c62b943 14338 6.0000000000000000, -0.40000000000000002 },
f92ab29f 14339 { -0.00017990026051856349, 10.000000000000000, 20.000000000000000,
7c62b943 14340 6.0000000000000000, -0.30000000000000004 },
f92ab29f 14341 { -0.00027618146288744351, 10.000000000000000, 20.000000000000000,
7c62b943 14342 6.0000000000000000, -0.19999999999999996 },
f92ab29f 14343 { 0.030606019577723392, 10.000000000000000, 20.000000000000000,
7c62b943 14344 6.0000000000000000, -0.099999999999999978 },
f92ab29f 14345 { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
7c62b943 14346 6.0000000000000000, 0.0000000000000000 },
f92ab29f 14347 { 27.832854169493341, 10.000000000000000, 20.000000000000000,
7c62b943 14348 6.0000000000000000, 0.10000000000000009 },
f92ab29f 14349 { 874.00624088575228, 10.000000000000000, 20.000000000000000,
7c62b943 14350 6.0000000000000000, 0.19999999999999996 },
f92ab29f 14351 { 36049.199340831554, 10.000000000000000, 20.000000000000000,
7c62b943 14352 6.0000000000000000, 0.30000000000000004 },
f92ab29f 14353 { 2270967.7298624986, 10.000000000000000, 20.000000000000000,
7c62b943 14354 6.0000000000000000, 0.39999999999999991 },
f92ab29f 14355 { 266979100.44444439, 10.000000000000000, 20.000000000000000,
7c62b943 14356 6.0000000000000000, 0.50000000000000000 },
f92ab29f 14357 { 80311224337.493027, 10.000000000000000, 20.000000000000000,
7c62b943 14358 6.0000000000000000, 0.60000000000000009 },
f92ab29f 14359 { 110111693103799.72, 10.000000000000000, 20.000000000000000,
7c62b943 14360 6.0000000000000000, 0.69999999999999996 },
f92ab29f 14361 { 2.4838871426052618e+18, 10.000000000000000, 20.000000000000000,
7c62b943 14362 6.0000000000000000, 0.80000000000000004 },
f92ab29f 14363 { 5.4626349999998603e+25, 10.000000000000000, 20.000000000000000,
7c62b943
BK
14364 6.0000000000000000, 0.89999999999999991 },
14365};
14366
14367// Test function for a=10.000000000000000, b=20.000000000000000, c=6.0000000000000000.
14368template <typename Tp>
14369void test208()
14370{
14371 const Tp eps = std::numeric_limits<Tp>::epsilon();
14372 Tp max_abs_diff = -Tp(1);
14373 Tp max_abs_frac = -Tp(1);
14374 unsigned int num_datum = sizeof(data208)
14375 / sizeof(testcase_hyperg<double>);
14376 for (unsigned int i = 0; i < num_datum; ++i)
14377 {
14378 const Tp f = std::tr1::hyperg(Tp(data208[i].a), Tp(data208[i].b),
14379 Tp(data208[i].c), Tp(data208[i].x));
14380 const Tp f0 = data208[i].f0;
14381 const Tp diff = f - f0;
14382 if (std::abs(diff) > max_abs_diff)
14383 max_abs_diff = std::abs(diff);
14384 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14385 {
14386 const Tp frac = diff / f0;
14387 if (std::abs(frac) > max_abs_frac)
14388 max_abs_frac = std::abs(frac);
14389 }
14390 }
14391 VERIFY(max_abs_frac < Tp(5.0000000000000019e-07));
14392}
14393
14394// Test data for a=10.000000000000000, b=20.000000000000000, c=8.0000000000000000.
14395testcase_hyperg<double> data209[] = {
f92ab29f 14396 { -1.5843795893321480e-07, 10.000000000000000, 20.000000000000000,
7c62b943 14397 8.0000000000000000, -0.90000000000000002 },
f92ab29f 14398 { -5.4877275994033766e-07, 10.000000000000000, 20.000000000000000,
7c62b943 14399 8.0000000000000000, -0.80000000000000004 },
f92ab29f 14400 { -1.7169507967745992e-06, 10.000000000000000, 20.000000000000000,
7c62b943 14401 8.0000000000000000, -0.69999999999999996 },
f92ab29f 14402 { -4.5236439748752000e-06, 10.000000000000000, 20.000000000000000,
7c62b943 14403 8.0000000000000000, -0.59999999999999998 },
f92ab29f 14404 { -5.5690492560325806e-06, 10.000000000000000, 20.000000000000000,
7c62b943 14405 8.0000000000000000, -0.50000000000000000 },
f92ab29f 14406 { 5.6914115606934911e-05, 10.000000000000000, 20.000000000000000,
7c62b943 14407 8.0000000000000000, -0.40000000000000002 },
f92ab29f 14408 { 0.00082507252097519922, 10.000000000000000, 20.000000000000000,
7c62b943 14409 8.0000000000000000, -0.30000000000000004 },
f92ab29f 14410 { 0.0085739249288229857, 10.000000000000000, 20.000000000000000,
7c62b943 14411 8.0000000000000000, -0.19999999999999996 },
f92ab29f 14412 { 0.088244357683754757, 10.000000000000000, 20.000000000000000,
7c62b943 14413 8.0000000000000000, -0.099999999999999978 },
f92ab29f 14414 { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
7c62b943 14415 8.0000000000000000, 0.0000000000000000 },
f92ab29f 14416 { 13.387208440156897, 10.000000000000000, 20.000000000000000,
7c62b943 14417 8.0000000000000000, 0.10000000000000009 },
f92ab29f 14418 { 226.77895441155110, 10.000000000000000, 20.000000000000000,
7c62b943 14419 8.0000000000000000, 0.19999999999999996 },
f92ab29f 14420 { 5281.5716482686785, 10.000000000000000, 20.000000000000000,
7c62b943 14421 8.0000000000000000, 0.30000000000000004 },
f92ab29f 14422 { 189431.77762850464, 10.000000000000000, 20.000000000000000,
7c62b943 14423 8.0000000000000000, 0.39999999999999991 },
f92ab29f 14424 { 12408149.333333332, 10.000000000000000, 20.000000000000000,
7c62b943 14425 8.0000000000000000, 0.50000000000000000 },
f92ab29f 14426 { 1966782292.5839682, 10.000000000000000, 20.000000000000000,
7c62b943 14427 8.0000000000000000, 0.60000000000000009 },
f92ab29f 14428 { 1274123112205.7495, 10.000000000000000, 20.000000000000000,
7c62b943 14429 8.0000000000000000, 0.69999999999999996 },
f92ab29f 14430 { 10903676350911508., 10.000000000000000, 20.000000000000000,
7c62b943 14431 8.0000000000000000, 0.80000000000000004 },
f92ab29f 14432 { 5.1849999999998819e+22, 10.000000000000000, 20.000000000000000,
7c62b943
BK
14433 8.0000000000000000, 0.89999999999999991 },
14434};
14435
14436// Test function for a=10.000000000000000, b=20.000000000000000, c=8.0000000000000000.
14437template <typename Tp>
14438void test209()
14439{
14440 const Tp eps = std::numeric_limits<Tp>::epsilon();
14441 Tp max_abs_diff = -Tp(1);
14442 Tp max_abs_frac = -Tp(1);
14443 unsigned int num_datum = sizeof(data209)
14444 / sizeof(testcase_hyperg<double>);
14445 for (unsigned int i = 0; i < num_datum; ++i)
14446 {
14447 const Tp f = std::tr1::hyperg(Tp(data209[i].a), Tp(data209[i].b),
14448 Tp(data209[i].c), Tp(data209[i].x));
14449 const Tp f0 = data209[i].f0;
14450 const Tp diff = f - f0;
14451 if (std::abs(diff) > max_abs_diff)
14452 max_abs_diff = std::abs(diff);
14453 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14454 {
14455 const Tp frac = diff / f0;
14456 if (std::abs(frac) > max_abs_frac)
14457 max_abs_frac = std::abs(frac);
14458 }
14459 }
14460 VERIFY(max_abs_frac < Tp(2.5000000000000012e-08));
14461}
14462
14463// Test data for a=10.000000000000000, b=20.000000000000000, c=10.000000000000000.
14464testcase_hyperg<double> data210[] = {
f92ab29f 14465 { 2.6602838683283435e-06, 10.000000000000000, 20.000000000000000,
7c62b943 14466 10.000000000000000, -0.90000000000000002 },
f92ab29f 14467 { 7.8442223930072316e-06, 10.000000000000000, 20.000000000000000,
7c62b943 14468 10.000000000000000, -0.80000000000000004 },
f92ab29f 14469 { 2.4604898194634598e-05, 10.000000000000000, 20.000000000000000,
7c62b943 14470 10.000000000000000, -0.69999999999999996 },
f92ab29f 14471 { 8.2718061255302686e-05, 10.000000000000000, 20.000000000000000,
7c62b943 14472 10.000000000000000, -0.59999999999999998 },
f92ab29f 14473 { 0.00030072865982171723, 10.000000000000000, 20.000000000000000,
7c62b943 14474 10.000000000000000, -0.50000000000000000 },
f92ab29f 14475 { 0.0011951964277455193, 10.000000000000000, 20.000000000000000,
7c62b943 14476 10.000000000000000, -0.40000000000000002 },
f92ab29f 14477 { 0.0052617832469731814, 10.000000000000000, 20.000000000000000,
7c62b943 14478 10.000000000000000, -0.30000000000000004 },
f92ab29f 14479 { 0.026084053304588847, 10.000000000000000, 20.000000000000000,
7c62b943 14480 10.000000000000000, -0.19999999999999996 },
f92ab29f 14481 { 0.14864362802414346, 10.000000000000000, 20.000000000000000,
7c62b943 14482 10.000000000000000, -0.099999999999999978 },
f92ab29f 14483 { 1.0000000000000000, 10.000000000000000, 20.000000000000000,
7c62b943 14484 10.000000000000000, 0.0000000000000000 },
f92ab29f 14485 { 8.2252633399699757, 10.000000000000000, 20.000000000000000,
7c62b943 14486 10.000000000000000, 0.10000000000000009 },
f92ab29f 14487 { 86.736173798840269, 10.000000000000000, 20.000000000000000,
7c62b943 14488 10.000000000000000, 0.19999999999999996 },
f92ab29f 14489 { 1253.2542894196865, 10.000000000000000, 20.000000000000000,
7c62b943 14490 10.000000000000000, 0.30000000000000004 },
f92ab29f 14491 { 27351.112277912434, 10.000000000000000, 20.000000000000000,
7c62b943 14492 10.000000000000000, 0.39999999999999991 },
f92ab29f 14493 { 1048576.0000000000, 10.000000000000000, 20.000000000000000,
7c62b943 14494 10.000000000000000, 0.50000000000000000 },
f92ab29f 14495 { 90949470.177293226, 10.000000000000000, 20.000000000000000,
7c62b943 14496 10.000000000000000, 0.60000000000000009 },
f92ab29f 14497 { 28679719907.924358, 10.000000000000000, 20.000000000000000,
7c62b943 14498 10.000000000000000, 0.69999999999999996 },
f92ab29f 14499 { 95367431640624.906, 10.000000000000000, 20.000000000000000,
7c62b943 14500 10.000000000000000, 0.80000000000000004 },
f92ab29f 14501 { 9.9999999999998657e+19, 10.000000000000000, 20.000000000000000,
7c62b943
BK
14502 10.000000000000000, 0.89999999999999991 },
14503};
14504
14505// Test function for a=10.000000000000000, b=20.000000000000000, c=10.000000000000000.
14506template <typename Tp>
14507void test210()
14508{
14509 const Tp eps = std::numeric_limits<Tp>::epsilon();
14510 Tp max_abs_diff = -Tp(1);
14511 Tp max_abs_frac = -Tp(1);
14512 unsigned int num_datum = sizeof(data210)
14513 / sizeof(testcase_hyperg<double>);
14514 for (unsigned int i = 0; i < num_datum; ++i)
14515 {
14516 const Tp f = std::tr1::hyperg(Tp(data210[i].a), Tp(data210[i].b),
14517 Tp(data210[i].c), Tp(data210[i].x));
14518 const Tp f0 = data210[i].f0;
14519 const Tp diff = f - f0;
14520 if (std::abs(diff) > max_abs_diff)
14521 max_abs_diff = std::abs(diff);
14522 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14523 {
14524 const Tp frac = diff / f0;
14525 if (std::abs(frac) > max_abs_frac)
14526 max_abs_frac = std::abs(frac);
14527 }
14528 }
14529 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
14530}
14531
14532// Test data for a=20.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
14533testcase_hyperg<double> data211[] = {
f92ab29f 14534 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14535 2.0000000000000000, -0.90000000000000002 },
f92ab29f 14536 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14537 2.0000000000000000, -0.80000000000000004 },
f92ab29f 14538 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14539 2.0000000000000000, -0.69999999999999996 },
f92ab29f 14540 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14541 2.0000000000000000, -0.59999999999999998 },
f92ab29f 14542 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14543 2.0000000000000000, -0.50000000000000000 },
f92ab29f 14544 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14545 2.0000000000000000, -0.40000000000000002 },
f92ab29f 14546 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14547 2.0000000000000000, -0.30000000000000004 },
f92ab29f 14548 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14549 2.0000000000000000, -0.19999999999999996 },
f92ab29f 14550 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14551 2.0000000000000000, -0.099999999999999978 },
f92ab29f 14552 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14553 2.0000000000000000, 0.0000000000000000 },
f92ab29f 14554 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14555 2.0000000000000000, 0.10000000000000009 },
f92ab29f 14556 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14557 2.0000000000000000, 0.19999999999999996 },
f92ab29f 14558 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14559 2.0000000000000000, 0.30000000000000004 },
f92ab29f 14560 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14561 2.0000000000000000, 0.39999999999999991 },
f92ab29f 14562 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14563 2.0000000000000000, 0.50000000000000000 },
f92ab29f 14564 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14565 2.0000000000000000, 0.60000000000000009 },
f92ab29f 14566 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14567 2.0000000000000000, 0.69999999999999996 },
f92ab29f 14568 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14569 2.0000000000000000, 0.80000000000000004 },
f92ab29f 14570 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943
BK
14571 2.0000000000000000, 0.89999999999999991 },
14572};
14573
14574// Test function for a=20.000000000000000, b=0.0000000000000000, c=2.0000000000000000.
14575template <typename Tp>
14576void test211()
14577{
14578 const Tp eps = std::numeric_limits<Tp>::epsilon();
14579 Tp max_abs_diff = -Tp(1);
14580 Tp max_abs_frac = -Tp(1);
14581 unsigned int num_datum = sizeof(data211)
14582 / sizeof(testcase_hyperg<double>);
14583 for (unsigned int i = 0; i < num_datum; ++i)
14584 {
14585 const Tp f = std::tr1::hyperg(Tp(data211[i].a), Tp(data211[i].b),
14586 Tp(data211[i].c), Tp(data211[i].x));
14587 const Tp f0 = data211[i].f0;
14588 const Tp diff = f - f0;
14589 if (std::abs(diff) > max_abs_diff)
14590 max_abs_diff = std::abs(diff);
14591 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14592 {
14593 const Tp frac = diff / f0;
14594 if (std::abs(frac) > max_abs_frac)
14595 max_abs_frac = std::abs(frac);
14596 }
14597 }
14598 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14599}
14600
14601// Test data for a=20.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
14602testcase_hyperg<double> data212[] = {
f92ab29f 14603 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14604 4.0000000000000000, -0.90000000000000002 },
f92ab29f 14605 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14606 4.0000000000000000, -0.80000000000000004 },
f92ab29f 14607 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14608 4.0000000000000000, -0.69999999999999996 },
f92ab29f 14609 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14610 4.0000000000000000, -0.59999999999999998 },
f92ab29f 14611 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14612 4.0000000000000000, -0.50000000000000000 },
f92ab29f 14613 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14614 4.0000000000000000, -0.40000000000000002 },
f92ab29f 14615 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14616 4.0000000000000000, -0.30000000000000004 },
f92ab29f 14617 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14618 4.0000000000000000, -0.19999999999999996 },
f92ab29f 14619 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14620 4.0000000000000000, -0.099999999999999978 },
f92ab29f 14621 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14622 4.0000000000000000, 0.0000000000000000 },
f92ab29f 14623 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14624 4.0000000000000000, 0.10000000000000009 },
f92ab29f 14625 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14626 4.0000000000000000, 0.19999999999999996 },
f92ab29f 14627 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14628 4.0000000000000000, 0.30000000000000004 },
f92ab29f 14629 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14630 4.0000000000000000, 0.39999999999999991 },
f92ab29f 14631 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14632 4.0000000000000000, 0.50000000000000000 },
f92ab29f 14633 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14634 4.0000000000000000, 0.60000000000000009 },
f92ab29f 14635 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14636 4.0000000000000000, 0.69999999999999996 },
f92ab29f 14637 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14638 4.0000000000000000, 0.80000000000000004 },
f92ab29f 14639 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943
BK
14640 4.0000000000000000, 0.89999999999999991 },
14641};
14642
14643// Test function for a=20.000000000000000, b=0.0000000000000000, c=4.0000000000000000.
14644template <typename Tp>
14645void test212()
14646{
14647 const Tp eps = std::numeric_limits<Tp>::epsilon();
14648 Tp max_abs_diff = -Tp(1);
14649 Tp max_abs_frac = -Tp(1);
14650 unsigned int num_datum = sizeof(data212)
14651 / sizeof(testcase_hyperg<double>);
14652 for (unsigned int i = 0; i < num_datum; ++i)
14653 {
14654 const Tp f = std::tr1::hyperg(Tp(data212[i].a), Tp(data212[i].b),
14655 Tp(data212[i].c), Tp(data212[i].x));
14656 const Tp f0 = data212[i].f0;
14657 const Tp diff = f - f0;
14658 if (std::abs(diff) > max_abs_diff)
14659 max_abs_diff = std::abs(diff);
14660 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14661 {
14662 const Tp frac = diff / f0;
14663 if (std::abs(frac) > max_abs_frac)
14664 max_abs_frac = std::abs(frac);
14665 }
14666 }
14667 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14668}
14669
14670// Test data for a=20.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
14671testcase_hyperg<double> data213[] = {
f92ab29f 14672 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14673 6.0000000000000000, -0.90000000000000002 },
f92ab29f 14674 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14675 6.0000000000000000, -0.80000000000000004 },
f92ab29f 14676 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14677 6.0000000000000000, -0.69999999999999996 },
f92ab29f 14678 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14679 6.0000000000000000, -0.59999999999999998 },
f92ab29f 14680 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14681 6.0000000000000000, -0.50000000000000000 },
f92ab29f 14682 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14683 6.0000000000000000, -0.40000000000000002 },
f92ab29f 14684 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14685 6.0000000000000000, -0.30000000000000004 },
f92ab29f 14686 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14687 6.0000000000000000, -0.19999999999999996 },
f92ab29f 14688 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14689 6.0000000000000000, -0.099999999999999978 },
f92ab29f 14690 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14691 6.0000000000000000, 0.0000000000000000 },
f92ab29f 14692 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14693 6.0000000000000000, 0.10000000000000009 },
f92ab29f 14694 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14695 6.0000000000000000, 0.19999999999999996 },
f92ab29f 14696 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14697 6.0000000000000000, 0.30000000000000004 },
f92ab29f 14698 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14699 6.0000000000000000, 0.39999999999999991 },
f92ab29f 14700 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14701 6.0000000000000000, 0.50000000000000000 },
f92ab29f 14702 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14703 6.0000000000000000, 0.60000000000000009 },
f92ab29f 14704 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14705 6.0000000000000000, 0.69999999999999996 },
f92ab29f 14706 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14707 6.0000000000000000, 0.80000000000000004 },
f92ab29f 14708 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943
BK
14709 6.0000000000000000, 0.89999999999999991 },
14710};
14711
14712// Test function for a=20.000000000000000, b=0.0000000000000000, c=6.0000000000000000.
14713template <typename Tp>
14714void test213()
14715{
14716 const Tp eps = std::numeric_limits<Tp>::epsilon();
14717 Tp max_abs_diff = -Tp(1);
14718 Tp max_abs_frac = -Tp(1);
14719 unsigned int num_datum = sizeof(data213)
14720 / sizeof(testcase_hyperg<double>);
14721 for (unsigned int i = 0; i < num_datum; ++i)
14722 {
14723 const Tp f = std::tr1::hyperg(Tp(data213[i].a), Tp(data213[i].b),
14724 Tp(data213[i].c), Tp(data213[i].x));
14725 const Tp f0 = data213[i].f0;
14726 const Tp diff = f - f0;
14727 if (std::abs(diff) > max_abs_diff)
14728 max_abs_diff = std::abs(diff);
14729 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14730 {
14731 const Tp frac = diff / f0;
14732 if (std::abs(frac) > max_abs_frac)
14733 max_abs_frac = std::abs(frac);
14734 }
14735 }
14736 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14737}
14738
14739// Test data for a=20.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
14740testcase_hyperg<double> data214[] = {
f92ab29f 14741 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14742 8.0000000000000000, -0.90000000000000002 },
f92ab29f 14743 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14744 8.0000000000000000, -0.80000000000000004 },
f92ab29f 14745 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14746 8.0000000000000000, -0.69999999999999996 },
f92ab29f 14747 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14748 8.0000000000000000, -0.59999999999999998 },
f92ab29f 14749 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14750 8.0000000000000000, -0.50000000000000000 },
f92ab29f 14751 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14752 8.0000000000000000, -0.40000000000000002 },
f92ab29f 14753 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14754 8.0000000000000000, -0.30000000000000004 },
f92ab29f 14755 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14756 8.0000000000000000, -0.19999999999999996 },
f92ab29f 14757 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14758 8.0000000000000000, -0.099999999999999978 },
f92ab29f 14759 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14760 8.0000000000000000, 0.0000000000000000 },
f92ab29f 14761 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14762 8.0000000000000000, 0.10000000000000009 },
f92ab29f 14763 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14764 8.0000000000000000, 0.19999999999999996 },
f92ab29f 14765 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14766 8.0000000000000000, 0.30000000000000004 },
f92ab29f 14767 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14768 8.0000000000000000, 0.39999999999999991 },
f92ab29f 14769 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14770 8.0000000000000000, 0.50000000000000000 },
f92ab29f 14771 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14772 8.0000000000000000, 0.60000000000000009 },
f92ab29f 14773 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14774 8.0000000000000000, 0.69999999999999996 },
f92ab29f 14775 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14776 8.0000000000000000, 0.80000000000000004 },
f92ab29f 14777 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943
BK
14778 8.0000000000000000, 0.89999999999999991 },
14779};
14780
14781// Test function for a=20.000000000000000, b=0.0000000000000000, c=8.0000000000000000.
14782template <typename Tp>
14783void test214()
14784{
14785 const Tp eps = std::numeric_limits<Tp>::epsilon();
14786 Tp max_abs_diff = -Tp(1);
14787 Tp max_abs_frac = -Tp(1);
14788 unsigned int num_datum = sizeof(data214)
14789 / sizeof(testcase_hyperg<double>);
14790 for (unsigned int i = 0; i < num_datum; ++i)
14791 {
14792 const Tp f = std::tr1::hyperg(Tp(data214[i].a), Tp(data214[i].b),
14793 Tp(data214[i].c), Tp(data214[i].x));
14794 const Tp f0 = data214[i].f0;
14795 const Tp diff = f - f0;
14796 if (std::abs(diff) > max_abs_diff)
14797 max_abs_diff = std::abs(diff);
14798 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14799 {
14800 const Tp frac = diff / f0;
14801 if (std::abs(frac) > max_abs_frac)
14802 max_abs_frac = std::abs(frac);
14803 }
14804 }
14805 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14806}
14807
14808// Test data for a=20.000000000000000, b=0.0000000000000000, c=10.000000000000000.
14809testcase_hyperg<double> data215[] = {
f92ab29f 14810 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14811 10.000000000000000, -0.90000000000000002 },
f92ab29f 14812 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14813 10.000000000000000, -0.80000000000000004 },
f92ab29f 14814 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14815 10.000000000000000, -0.69999999999999996 },
f92ab29f 14816 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14817 10.000000000000000, -0.59999999999999998 },
f92ab29f 14818 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14819 10.000000000000000, -0.50000000000000000 },
f92ab29f 14820 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14821 10.000000000000000, -0.40000000000000002 },
f92ab29f 14822 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14823 10.000000000000000, -0.30000000000000004 },
f92ab29f 14824 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14825 10.000000000000000, -0.19999999999999996 },
f92ab29f 14826 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14827 10.000000000000000, -0.099999999999999978 },
f92ab29f 14828 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14829 10.000000000000000, 0.0000000000000000 },
f92ab29f 14830 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14831 10.000000000000000, 0.10000000000000009 },
f92ab29f 14832 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14833 10.000000000000000, 0.19999999999999996 },
f92ab29f 14834 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14835 10.000000000000000, 0.30000000000000004 },
f92ab29f 14836 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14837 10.000000000000000, 0.39999999999999991 },
f92ab29f 14838 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14839 10.000000000000000, 0.50000000000000000 },
f92ab29f 14840 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14841 10.000000000000000, 0.60000000000000009 },
f92ab29f 14842 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14843 10.000000000000000, 0.69999999999999996 },
f92ab29f 14844 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943 14845 10.000000000000000, 0.80000000000000004 },
f92ab29f 14846 { 1.0000000000000000, 20.000000000000000, 0.0000000000000000,
7c62b943
BK
14847 10.000000000000000, 0.89999999999999991 },
14848};
14849
14850// Test function for a=20.000000000000000, b=0.0000000000000000, c=10.000000000000000.
14851template <typename Tp>
14852void test215()
14853{
14854 const Tp eps = std::numeric_limits<Tp>::epsilon();
14855 Tp max_abs_diff = -Tp(1);
14856 Tp max_abs_frac = -Tp(1);
14857 unsigned int num_datum = sizeof(data215)
14858 / sizeof(testcase_hyperg<double>);
14859 for (unsigned int i = 0; i < num_datum; ++i)
14860 {
14861 const Tp f = std::tr1::hyperg(Tp(data215[i].a), Tp(data215[i].b),
14862 Tp(data215[i].c), Tp(data215[i].x));
14863 const Tp f0 = data215[i].f0;
14864 const Tp diff = f - f0;
14865 if (std::abs(diff) > max_abs_diff)
14866 max_abs_diff = std::abs(diff);
14867 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14868 {
14869 const Tp frac = diff / f0;
14870 if (std::abs(frac) > max_abs_frac)
14871 max_abs_frac = std::abs(frac);
14872 }
14873 }
14874 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14875}
14876
14877// Test data for a=20.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
14878testcase_hyperg<double> data216[] = {
f92ab29f 14879 { 0.26690449940521566, 20.000000000000000, 0.50000000000000000,
7c62b943 14880 2.0000000000000000, -0.90000000000000002 },
f92ab29f 14881 { 0.28252302866181805, 20.000000000000000, 0.50000000000000000,
7c62b943 14882 2.0000000000000000, -0.80000000000000004 },
f92ab29f 14883 { 0.30123616141153819, 20.000000000000000, 0.50000000000000000,
7c62b943 14884 2.0000000000000000, -0.69999999999999996 },
f92ab29f 14885 { 0.32421384687602628, 20.000000000000000, 0.50000000000000000,
7c62b943 14886 2.0000000000000000, -0.59999999999999998 },
f92ab29f 14887 { 0.35334630811776752, 20.000000000000000, 0.50000000000000000,
7c62b943 14888 2.0000000000000000, -0.50000000000000000 },
f92ab29f 14889 { 0.39191793127467034, 20.000000000000000, 0.50000000000000000,
7c62b943 14890 2.0000000000000000, -0.40000000000000002 },
f92ab29f 14891 { 0.44620488618129206, 20.000000000000000, 0.50000000000000000,
7c62b943 14892 2.0000000000000000, -0.30000000000000004 },
f92ab29f 14893 { 0.52980896919265685, 20.000000000000000, 0.50000000000000000,
7c62b943 14894 2.0000000000000000, -0.19999999999999996 },
f92ab29f 14895 { 0.67754711477562357, 20.000000000000000, 0.50000000000000000,
7c62b943 14896 2.0000000000000000, -0.099999999999999978 },
f92ab29f 14897 { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
7c62b943 14898 2.0000000000000000, 0.0000000000000000 },
f92ab29f 14899 { 1.9567557771780317, 20.000000000000000, 0.50000000000000000,
7c62b943 14900 2.0000000000000000, 0.10000000000000009 },
f92ab29f 14901 { 6.1816042148333086, 20.000000000000000, 0.50000000000000000,
7c62b943 14902 2.0000000000000000, 0.19999999999999996 },
f92ab29f 14903 { 35.653088618561227, 20.000000000000000, 0.50000000000000000,
7c62b943 14904 2.0000000000000000, 0.30000000000000004 },
f92ab29f 14905 { 377.51482843179906, 20.000000000000000, 0.50000000000000000,
7c62b943 14906 2.0000000000000000, 0.39999999999999991 },
f92ab29f 14907 { 7645.8816551195359, 20.000000000000000, 0.50000000000000000,
7c62b943 14908 2.0000000000000000, 0.50000000000000000 },
f92ab29f 14909 { 354791.74537980522, 20.000000000000000, 0.50000000000000000,
7c62b943 14910 2.0000000000000000, 0.60000000000000009 },
f92ab29f 14911 { 57009889.966638684, 20.000000000000000, 0.50000000000000000,
7c62b943 14912 2.0000000000000000, 0.69999999999999996 },
f92ab29f 14913 { 83771357024.863937, 20.000000000000000, 0.50000000000000000,
7c62b943 14914 2.0000000000000000, 0.80000000000000004 },
f92ab29f 14915 { 25866972896376408., 20.000000000000000, 0.50000000000000000,
7c62b943
BK
14916 2.0000000000000000, 0.89999999999999991 },
14917};
14918
14919// Test function for a=20.000000000000000, b=0.50000000000000000, c=2.0000000000000000.
14920template <typename Tp>
14921void test216()
14922{
14923 const Tp eps = std::numeric_limits<Tp>::epsilon();
14924 Tp max_abs_diff = -Tp(1);
14925 Tp max_abs_frac = -Tp(1);
14926 unsigned int num_datum = sizeof(data216)
14927 / sizeof(testcase_hyperg<double>);
14928 for (unsigned int i = 0; i < num_datum; ++i)
14929 {
14930 const Tp f = std::tr1::hyperg(Tp(data216[i].a), Tp(data216[i].b),
14931 Tp(data216[i].c), Tp(data216[i].x));
14932 const Tp f0 = data216[i].f0;
14933 const Tp diff = f - f0;
14934 if (std::abs(diff) > max_abs_diff)
14935 max_abs_diff = std::abs(diff);
14936 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
14937 {
14938 const Tp frac = diff / f0;
14939 if (std::abs(frac) > max_abs_frac)
14940 max_abs_frac = std::abs(frac);
14941 }
14942 }
14943 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
14944}
14945
14946// Test data for a=20.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
14947testcase_hyperg<double> data217[] = {
f92ab29f 14948 { 0.40342659436153405, 20.000000000000000, 0.50000000000000000,
7c62b943 14949 4.0000000000000000, -0.90000000000000002 },
f92ab29f 14950 { 0.42420571192034318, 20.000000000000000, 0.50000000000000000,
7c62b943 14951 4.0000000000000000, -0.80000000000000004 },
f92ab29f 14952 { 0.44852768286073008, 20.000000000000000, 0.50000000000000000,
7c62b943 14953 4.0000000000000000, -0.69999999999999996 },
f92ab29f 14954 { 0.47751245808592863, 20.000000000000000, 0.50000000000000000,
7c62b943 14955 4.0000000000000000, -0.59999999999999998 },
f92ab29f 14956 { 0.51283632632707754, 20.000000000000000, 0.50000000000000000,
7c62b943 14957 4.0000000000000000, -0.50000000000000000 },
f92ab29f 14958 { 0.55713468814894307, 20.000000000000000, 0.50000000000000000,
7c62b943 14959 4.0000000000000000, -0.40000000000000002 },
f92ab29f 14960 { 0.61481320817757312, 20.000000000000000, 0.50000000000000000,
7c62b943 14961 4.0000000000000000, -0.30000000000000004 },
f92ab29f 14962 { 0.69383483410097202, 20.000000000000000, 0.50000000000000000,
7c62b943 14963 4.0000000000000000, -0.19999999999999996 },
f92ab29f 14964 { 0.81012002526006033, 20.000000000000000, 0.50000000000000000,
7c62b943 14965 4.0000000000000000, -0.099999999999999978 },
f92ab29f 14966 { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
7c62b943 14967 4.0000000000000000, 0.0000000000000000 },
f92ab29f 14968 { 1.3622225506603911, 20.000000000000000, 0.50000000000000000,
7c62b943 14969 4.0000000000000000, 0.10000000000000009 },
f92ab29f 14970 { 2.2349513086109001, 20.000000000000000, 0.50000000000000000,
7c62b943 14971 4.0000000000000000, 0.19999999999999996 },
f92ab29f 14972 { 5.1864917536761723, 20.000000000000000, 0.50000000000000000,
7c62b943 14973 4.0000000000000000, 0.30000000000000004 },
f92ab29f 14974 { 21.020560423779411, 20.000000000000000, 0.50000000000000000,
7c62b943 14975 4.0000000000000000, 0.39999999999999991 },
f92ab29f 14976 { 175.19649997100612, 20.000000000000000, 0.50000000000000000,
7c62b943 14977 4.0000000000000000, 0.50000000000000000 },
f92ab29f 14978 { 3467.1587803688708, 20.000000000000000, 0.50000000000000000,
7c62b943 14979 4.0000000000000000, 0.60000000000000009 },
f92ab29f 14980 { 225003.88683445856, 20.000000000000000, 0.50000000000000000,
7c62b943 14981 4.0000000000000000, 0.69999999999999996 },
f92ab29f 14982 { 110837674.65652709, 20.000000000000000, 0.50000000000000000,
7c62b943 14983 4.0000000000000000, 0.80000000000000004 },
f92ab29f 14984 { 6688966964170.6807, 20.000000000000000, 0.50000000000000000,
7c62b943
BK
14985 4.0000000000000000, 0.89999999999999991 },
14986};
14987
14988// Test function for a=20.000000000000000, b=0.50000000000000000, c=4.0000000000000000.
14989template <typename Tp>
14990void test217()
14991{
14992 const Tp eps = std::numeric_limits<Tp>::epsilon();
14993 Tp max_abs_diff = -Tp(1);
14994 Tp max_abs_frac = -Tp(1);
14995 unsigned int num_datum = sizeof(data217)
14996 / sizeof(testcase_hyperg<double>);
14997 for (unsigned int i = 0; i < num_datum; ++i)
14998 {
14999 const Tp f = std::tr1::hyperg(Tp(data217[i].a), Tp(data217[i].b),
15000 Tp(data217[i].c), Tp(data217[i].x));
15001 const Tp f0 = data217[i].f0;
15002 const Tp diff = f - f0;
15003 if (std::abs(diff) > max_abs_diff)
15004 max_abs_diff = std::abs(diff);
15005 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15006 {
15007 const Tp frac = diff / f0;
15008 if (std::abs(frac) > max_abs_frac)
15009 max_abs_frac = std::abs(frac);
15010 }
15011 }
15012 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15013}
15014
15015// Test data for a=20.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
15016testcase_hyperg<double> data218[] = {
f92ab29f 15017 { 0.48716309885816761, 20.000000000000000, 0.50000000000000000,
7c62b943 15018 6.0000000000000000, -0.90000000000000002 },
f92ab29f 15019 { 0.50965859152542281, 20.000000000000000, 0.50000000000000000,
7c62b943 15020 6.0000000000000000, -0.80000000000000004 },
f92ab29f 15021 { 0.53554809210658971, 20.000000000000000, 0.50000000000000000,
7c62b943 15022 6.0000000000000000, -0.69999999999999996 },
f92ab29f 15023 { 0.56576689207507136, 20.000000000000000, 0.50000000000000000,
7c62b943 15024 6.0000000000000000, -0.59999999999999998 },
f92ab29f 15025 { 0.60164849637133688, 20.000000000000000, 0.50000000000000000,
7c62b943 15026 6.0000000000000000, -0.50000000000000000 },
f92ab29f 15027 { 0.64516711595404375, 20.000000000000000, 0.50000000000000000,
7c62b943 15028 6.0000000000000000, -0.40000000000000002 },
f92ab29f 15029 { 0.69938278735493542, 20.000000000000000, 0.50000000000000000,
7c62b943 15030 6.0000000000000000, -0.30000000000000004 },
f92ab29f 15031 { 0.76931621518401860, 20.000000000000000, 0.50000000000000000,
7c62b943 15032 6.0000000000000000, -0.19999999999999996 },
f92ab29f 15033 { 0.86381808725530695, 20.000000000000000, 0.50000000000000000,
7c62b943 15034 6.0000000000000000, -0.099999999999999978 },
f92ab29f 15035 { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
7c62b943 15036 6.0000000000000000, 0.0000000000000000 },
f92ab29f 15037 { 1.2152051956815531, 20.000000000000000, 0.50000000000000000,
7c62b943 15038 6.0000000000000000, 0.10000000000000009 },
f92ab29f 15039 { 1.6052546785425543, 20.000000000000000, 0.50000000000000000,
7c62b943 15040 6.0000000000000000, 0.19999999999999996 },
f92ab29f 15041 { 2.4765586046012635, 20.000000000000000, 0.50000000000000000,
7c62b943 15042 6.0000000000000000, 0.30000000000000004 },
f92ab29f 15043 { 5.1564492216997486, 20.000000000000000, 0.50000000000000000,
7c62b943 15044 6.0000000000000000, 0.39999999999999991 },
f92ab29f 15045 { 18.446158392136365, 20.000000000000000, 0.50000000000000000,
7c62b943 15046 6.0000000000000000, 0.50000000000000000 },
f92ab29f 15047 { 150.44577670123971, 20.000000000000000, 0.50000000000000000,
7c62b943 15048 6.0000000000000000, 0.60000000000000009 },
f92ab29f 15049 { 3862.6317400115768, 20.000000000000000, 0.50000000000000000,
7c62b943 15050 6.0000000000000000, 0.69999999999999996 },
f92ab29f 15051 { 632428.34833625401, 20.000000000000000, 0.50000000000000000,
7c62b943 15052 6.0000000000000000, 0.80000000000000004 },
f92ab29f 15053 { 7426927663.3808765, 20.000000000000000, 0.50000000000000000,
7c62b943
BK
15054 6.0000000000000000, 0.89999999999999991 },
15055};
15056
15057// Test function for a=20.000000000000000, b=0.50000000000000000, c=6.0000000000000000.
15058template <typename Tp>
15059void test218()
15060{
15061 const Tp eps = std::numeric_limits<Tp>::epsilon();
15062 Tp max_abs_diff = -Tp(1);
15063 Tp max_abs_frac = -Tp(1);
15064 unsigned int num_datum = sizeof(data218)
15065 / sizeof(testcase_hyperg<double>);
15066 for (unsigned int i = 0; i < num_datum; ++i)
15067 {
15068 const Tp f = std::tr1::hyperg(Tp(data218[i].a), Tp(data218[i].b),
15069 Tp(data218[i].c), Tp(data218[i].x));
15070 const Tp f0 = data218[i].f0;
15071 const Tp diff = f - f0;
15072 if (std::abs(diff) > max_abs_diff)
15073 max_abs_diff = std::abs(diff);
15074 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15075 {
15076 const Tp frac = diff / f0;
15077 if (std::abs(frac) > max_abs_frac)
15078 max_abs_frac = std::abs(frac);
15079 }
15080 }
15081 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15082}
15083
15084// Test data for a=20.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
15085testcase_hyperg<double> data219[] = {
f92ab29f 15086 { 0.54703266209548362, 20.000000000000000, 0.50000000000000000,
7c62b943 15087 8.0000000000000000, -0.90000000000000002 },
f92ab29f 15088 { 0.56997321774144971, 20.000000000000000, 0.50000000000000000,
7c62b943 15089 8.0000000000000000, -0.80000000000000004 },
f92ab29f 15090 { 0.59603026159654970, 20.000000000000000, 0.50000000000000000,
7c62b943 15091 8.0000000000000000, -0.69999999999999996 },
f92ab29f 15092 { 0.62596978851120511, 20.000000000000000, 0.50000000000000000,
7c62b943 15093 8.0000000000000000, -0.59999999999999998 },
f92ab29f 15094 { 0.66084565876898926, 20.000000000000000, 0.50000000000000000,
7c62b943 15095 8.0000000000000000, -0.50000000000000000 },
f92ab29f 15096 { 0.70215256667232839, 20.000000000000000, 0.50000000000000000,
7c62b943 15097 8.0000000000000000, -0.40000000000000002 },
f92ab29f 15098 { 0.75208916592008568, 20.000000000000000, 0.50000000000000000,
7c62b943 15099 8.0000000000000000, -0.30000000000000004 },
f92ab29f 15100 { 0.81403631111658648, 20.000000000000000, 0.50000000000000000,
7c62b943 15101 8.0000000000000000, -0.19999999999999996 },
f92ab29f 15102 { 0.89348608489854608, 20.000000000000000, 0.50000000000000000,
7c62b943 15103 8.0000000000000000, -0.099999999999999978 },
f92ab29f 15104 { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
7c62b943 15105 8.0000000000000000, 0.0000000000000000 },
f92ab29f 15106 { 1.1517793185139173, 20.000000000000000, 0.50000000000000000,
7c62b943 15107 8.0000000000000000, 0.10000000000000009 },
f92ab29f 15108 { 1.3878110313656598, 20.000000000000000, 0.50000000000000000,
7c62b943 15109 8.0000000000000000, 0.19999999999999996 },
f92ab29f 15110 { 1.8061071794572381, 20.000000000000000, 0.50000000000000000,
7c62b943 15111 8.0000000000000000, 0.30000000000000004 },
f92ab29f 15112 { 2.7148594517859586, 20.000000000000000, 0.50000000000000000,
7c62b943 15113 8.0000000000000000, 0.39999999999999991 },
f92ab29f 15114 { 5.4529435709049361, 20.000000000000000, 0.50000000000000000,
7c62b943 15115 8.0000000000000000, 0.50000000000000000 },
f92ab29f 15116 { 19.487310275377109, 20.000000000000000, 0.50000000000000000,
7c62b943 15117 8.0000000000000000, 0.60000000000000009 },
f92ab29f 15118 { 191.69079165937470, 20.000000000000000, 0.50000000000000000,
7c62b943 15119 8.0000000000000000, 0.69999999999999996 },
f92ab29f 15120 { 10218.543981792311, 20.000000000000000, 0.50000000000000000,
7c62b943 15121 8.0000000000000000, 0.80000000000000004 },
f92ab29f 15122 { 23160836.646583911, 20.000000000000000, 0.50000000000000000,
7c62b943
BK
15123 8.0000000000000000, 0.89999999999999991 },
15124};
15125
15126// Test function for a=20.000000000000000, b=0.50000000000000000, c=8.0000000000000000.
15127template <typename Tp>
15128void test219()
15129{
15130 const Tp eps = std::numeric_limits<Tp>::epsilon();
15131 Tp max_abs_diff = -Tp(1);
15132 Tp max_abs_frac = -Tp(1);
15133 unsigned int num_datum = sizeof(data219)
15134 / sizeof(testcase_hyperg<double>);
15135 for (unsigned int i = 0; i < num_datum; ++i)
15136 {
15137 const Tp f = std::tr1::hyperg(Tp(data219[i].a), Tp(data219[i].b),
15138 Tp(data219[i].c), Tp(data219[i].x));
15139 const Tp f0 = data219[i].f0;
15140 const Tp diff = f - f0;
15141 if (std::abs(diff) > max_abs_diff)
15142 max_abs_diff = std::abs(diff);
15143 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15144 {
15145 const Tp frac = diff / f0;
15146 if (std::abs(frac) > max_abs_frac)
15147 max_abs_frac = std::abs(frac);
15148 }
15149 }
15150 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15151}
15152
15153// Test data for a=20.000000000000000, b=0.50000000000000000, c=10.000000000000000.
15154testcase_hyperg<double> data220[] = {
f92ab29f 15155 { 0.59292067298616002, 20.000000000000000, 0.50000000000000000,
7c62b943 15156 10.000000000000000, -0.90000000000000002 },
f92ab29f 15157 { 0.61572496720679915, 20.000000000000000, 0.50000000000000000,
7c62b943 15158 10.000000000000000, -0.80000000000000004 },
f92ab29f 15159 { 0.64135339122875623, 20.000000000000000, 0.50000000000000000,
7c62b943 15160 10.000000000000000, -0.69999999999999996 },
f92ab29f 15161 { 0.67043457419280483, 20.000000000000000, 0.50000000000000000,
7c62b943 15162 10.000000000000000, -0.59999999999999998 },
f92ab29f 15163 { 0.70380956268170980, 20.000000000000000, 0.50000000000000000,
7c62b943 15164 10.000000000000000, -0.50000000000000000 },
f92ab29f 15165 { 0.74263251901495231, 20.000000000000000, 0.50000000000000000,
7c62b943 15166 10.000000000000000, -0.40000000000000002 },
f92ab29f 15167 { 0.78853555445528278, 20.000000000000000, 0.50000000000000000,
7c62b943 15168 10.000000000000000, -0.30000000000000004 },
f92ab29f 15169 { 0.84391122775673766, 20.000000000000000, 0.50000000000000000,
7c62b943 15170 10.000000000000000, -0.19999999999999996 },
f92ab29f 15171 { 0.91242401018807406, 20.000000000000000, 0.50000000000000000,
7c62b943 15172 10.000000000000000, -0.099999999999999978 },
f92ab29f 15173 { 1.0000000000000000, 20.000000000000000, 0.50000000000000000,
7c62b943 15174 10.000000000000000, 0.0000000000000000 },
f92ab29f 15175 { 1.1169059681274873, 20.000000000000000, 0.50000000000000000,
7c62b943 15176 10.000000000000000, 0.10000000000000009 },
f92ab29f 15177 { 1.2825928301302667, 20.000000000000000, 0.50000000000000000,
7c62b943 15178 10.000000000000000, 0.19999999999999996 },
f92ab29f 15179 { 1.5385937789924939, 20.000000000000000, 0.50000000000000000,
7c62b943 15180 10.000000000000000, 0.30000000000000004 },
f92ab29f 15181 { 1.9895771187893898, 20.000000000000000, 0.50000000000000000,
7c62b943 15182 10.000000000000000, 0.39999999999999991 },
f92ab29f 15183 { 2.9707335806970168, 20.000000000000000, 0.50000000000000000,
7c62b943 15184 10.000000000000000, 0.50000000000000000 },
f92ab29f 15185 { 6.0299506157180467, 20.000000000000000, 0.50000000000000000,
7c62b943 15186 10.000000000000000, 0.60000000000000009 },
f92ab29f 15187 { 24.259090336955577, 20.000000000000000, 0.50000000000000000,
7c62b943 15188 10.000000000000000, 0.69999999999999996 },
f92ab29f 15189 { 406.27267173257223, 20.000000000000000, 0.50000000000000000,
7c62b943 15190 10.000000000000000, 0.80000000000000004 },
f92ab29f 15191 { 174330.03997220192, 20.000000000000000, 0.50000000000000000,
7c62b943
BK
15192 10.000000000000000, 0.89999999999999991 },
15193};
15194
15195// Test function for a=20.000000000000000, b=0.50000000000000000, c=10.000000000000000.
15196template <typename Tp>
15197void test220()
15198{
15199 const Tp eps = std::numeric_limits<Tp>::epsilon();
15200 Tp max_abs_diff = -Tp(1);
15201 Tp max_abs_frac = -Tp(1);
15202 unsigned int num_datum = sizeof(data220)
15203 / sizeof(testcase_hyperg<double>);
15204 for (unsigned int i = 0; i < num_datum; ++i)
15205 {
15206 const Tp f = std::tr1::hyperg(Tp(data220[i].a), Tp(data220[i].b),
15207 Tp(data220[i].c), Tp(data220[i].x));
15208 const Tp f0 = data220[i].f0;
15209 const Tp diff = f - f0;
15210 if (std::abs(diff) > max_abs_diff)
15211 max_abs_diff = std::abs(diff);
15212 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15213 {
15214 const Tp frac = diff / f0;
15215 if (std::abs(frac) > max_abs_frac)
15216 max_abs_frac = std::abs(frac);
15217 }
15218 }
15219 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15220}
15221
15222// Test data for a=20.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
15223testcase_hyperg<double> data221[] = {
f92ab29f 15224 { 0.058479236576646373, 20.000000000000000, 1.0000000000000000,
7c62b943 15225 2.0000000000000000, -0.90000000000000002 },
f92ab29f 15226 { 0.065788544763137669, 20.000000000000000, 1.0000000000000000,
7c62b943 15227 2.0000000000000000, -0.80000000000000004 },
f92ab29f 15228 { 0.075184824937824662, 20.000000000000000, 1.0000000000000000,
7c62b943 15229 2.0000000000000000, -0.69999999999999996 },
f92ab29f 15230 { 0.087707688693157260, 20.000000000000000, 1.0000000000000000,
7c62b943 15231 2.0000000000000000, -0.59999999999999998 },
f92ab29f 15232 { 0.10521567442213345, 20.000000000000000, 1.0000000000000000,
7c62b943 15233 2.0000000000000000, -0.50000000000000000 },
f92ab29f 15234 { 0.13135877960541525, 20.000000000000000, 1.0000000000000000,
7c62b943 15235 2.0000000000000000, -0.40000000000000002 },
f92ab29f 15236 { 0.17423854066297104, 20.000000000000000, 1.0000000000000000,
7c62b943 15237 2.0000000000000000, -0.30000000000000004 },
f92ab29f 15238 { 0.25492082527223525, 20.000000000000000, 1.0000000000000000,
7c62b943 15239 2.0000000000000000, -0.19999999999999996 },
f92ab29f 15240 { 0.44025895219654843, 20.000000000000000, 1.0000000000000000,
7c62b943 15241 2.0000000000000000, -0.099999999999999978 },
f92ab29f 15242 { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
7c62b943 15243 2.0000000000000000, 0.0000000000000000 },
f92ab29f 15244 { 3.3698615820910360, 20.000000000000000, 1.0000000000000000,
7c62b943 15245 2.0000000000000000, 0.10000000000000009 },
f92ab29f 15246 { 17.997089220808483, 20.000000000000000, 1.0000000000000000,
7c62b943 15247 2.0000000000000000, 0.19999999999999996 },
f92ab29f 15248 { 153.73298291118951, 20.000000000000000, 1.0000000000000000,
7c62b943 15249 2.0000000000000000, 0.30000000000000004 },
f92ab29f 15250 { 2159.1667587825627, 20.000000000000000, 1.0000000000000000,
7c62b943 15251 2.0000000000000000, 0.39999999999999991 },
f92ab29f 15252 { 55188.105263157879, 20.000000000000000, 1.0000000000000000,
7c62b943 15253 2.0000000000000000, 0.50000000000000000 },
f92ab29f 15254 { 3191209.3921857267, 20.000000000000000, 1.0000000000000000,
7c62b943 15255 2.0000000000000000, 0.60000000000000009 },
f92ab29f 15256 { 646910975.29152656, 20.000000000000000, 1.0000000000000000,
7c62b943 15257 2.0000000000000000, 0.69999999999999996 },
f92ab29f 15258 { 1254834626850.2659, 20.000000000000000, 1.0000000000000000,
7c62b943 15259 2.0000000000000000, 0.80000000000000004 },
f92ab29f 15260 { 5.8479532163741414e+17, 20.000000000000000, 1.0000000000000000,
7c62b943
BK
15261 2.0000000000000000, 0.89999999999999991 },
15262};
15263
15264// Test function for a=20.000000000000000, b=1.0000000000000000, c=2.0000000000000000.
15265template <typename Tp>
15266void test221()
15267{
15268 const Tp eps = std::numeric_limits<Tp>::epsilon();
15269 Tp max_abs_diff = -Tp(1);
15270 Tp max_abs_frac = -Tp(1);
15271 unsigned int num_datum = sizeof(data221)
15272 / sizeof(testcase_hyperg<double>);
15273 for (unsigned int i = 0; i < num_datum; ++i)
15274 {
15275 const Tp f = std::tr1::hyperg(Tp(data221[i].a), Tp(data221[i].b),
15276 Tp(data221[i].c), Tp(data221[i].x));
15277 const Tp f0 = data221[i].f0;
15278 const Tp diff = f - f0;
15279 if (std::abs(diff) > max_abs_diff)
15280 max_abs_diff = std::abs(diff);
15281 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15282 {
15283 const Tp frac = diff / f0;
15284 if (std::abs(frac) > max_abs_frac)
15285 max_abs_frac = std::abs(frac);
15286 }
15287 }
15288 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15289}
15290
15291// Test data for a=20.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
15292testcase_hyperg<double> data222[] = {
f92ab29f 15293 { 0.15519511120894947, 20.000000000000000, 1.0000000000000000,
7c62b943 15294 4.0000000000000000, -0.90000000000000002 },
f92ab29f 15295 { 0.17197165701692899, 20.000000000000000, 1.0000000000000000,
7c62b943 15296 4.0000000000000000, -0.80000000000000004 },
f92ab29f 15297 { 0.19276847315207363, 20.000000000000000, 1.0000000000000000,
7c62b943 15298 4.0000000000000000, -0.69999999999999996 },
f92ab29f 15299 { 0.21920107206179093, 20.000000000000000, 1.0000000000000000,
7c62b943 15300 4.0000000000000000, -0.59999999999999998 },
f92ab29f 15301 { 0.25386158960390581, 20.000000000000000, 1.0000000000000000,
7c62b943 15302 4.0000000000000000, -0.50000000000000000 },
f92ab29f 15303 { 0.30115970686600657, 20.000000000000000, 1.0000000000000000,
7c62b943 15304 4.0000000000000000, -0.40000000000000002 },
f92ab29f 15305 { 0.36916408142057117, 20.000000000000000, 1.0000000000000000,
7c62b943 15306 4.0000000000000000, -0.30000000000000004 },
f92ab29f 15307 { 0.47406175901569558, 20.000000000000000, 1.0000000000000000,
7c62b943 15308 4.0000000000000000, -0.19999999999999996 },
f92ab29f 15309 { 0.65237908266239919, 20.000000000000000, 1.0000000000000000,
7c62b943 15310 4.0000000000000000, -0.099999999999999978 },
f92ab29f 15311 { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
7c62b943 15312 4.0000000000000000, 0.0000000000000000 },
f92ab29f 15313 { 1.8227213362622299, 20.000000000000000, 1.0000000000000000,
7c62b943 15314 4.0000000000000000, 0.10000000000000009 },
f92ab29f 15315 { 4.3716358339791332, 20.000000000000000, 1.0000000000000000,
7c62b943 15316 4.0000000000000000, 0.19999999999999996 },
f92ab29f 15317 { 15.670841312959222, 20.000000000000000, 1.0000000000000000,
7c62b943 15318 4.0000000000000000, 0.30000000000000004 },
f92ab29f 15319 { 94.742651122760179, 20.000000000000000, 1.0000000000000000,
7c62b943 15320 4.0000000000000000, 0.39999999999999991 },
f92ab29f 15321 { 1081.7275541795671, 20.000000000000000, 1.0000000000000000,
7c62b943 15322 4.0000000000000000, 0.50000000000000000 },
f92ab29f 15323 { 27809.787731465960, 20.000000000000000, 1.0000000000000000,
7c62b943 15324 4.0000000000000000, 0.60000000000000009 },
f92ab29f 15325 { 2329811.1715181042, 20.000000000000000, 1.0000000000000000,
7c62b943 15326 4.0000000000000000, 0.69999999999999996 },
f92ab29f 15327 { 1537787532.6780224, 20.000000000000000, 1.0000000000000000,
7c62b943 15328 4.0000000000000000, 0.80000000000000004 },
f92ab29f 15329 { 141562653506999.88, 20.000000000000000, 1.0000000000000000,
7c62b943
BK
15330 4.0000000000000000, 0.89999999999999991 },
15331};
15332
15333// Test function for a=20.000000000000000, b=1.0000000000000000, c=4.0000000000000000.
15334template <typename Tp>
15335void test222()
15336{
15337 const Tp eps = std::numeric_limits<Tp>::epsilon();
15338 Tp max_abs_diff = -Tp(1);
15339 Tp max_abs_frac = -Tp(1);
15340 unsigned int num_datum = sizeof(data222)
15341 / sizeof(testcase_hyperg<double>);
15342 for (unsigned int i = 0; i < num_datum; ++i)
15343 {
15344 const Tp f = std::tr1::hyperg(Tp(data222[i].a), Tp(data222[i].b),
15345 Tp(data222[i].c), Tp(data222[i].x));
15346 const Tp f0 = data222[i].f0;
15347 const Tp diff = f - f0;
15348 if (std::abs(diff) > max_abs_diff)
15349 max_abs_diff = std::abs(diff);
15350 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15351 {
15352 const Tp frac = diff / f0;
15353 if (std::abs(frac) > max_abs_frac)
15354 max_abs_frac = std::abs(frac);
15355 }
15356 }
15357 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15358}
15359
15360// Test data for a=20.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
15361testcase_hyperg<double> data223[] = {
f92ab29f 15362 { 0.23253645591196570, 20.000000000000000, 1.0000000000000000,
7c62b943 15363 6.0000000000000000, -0.90000000000000002 },
f92ab29f 15364 { 0.25484220947068353, 20.000000000000000, 1.0000000000000000,
7c62b943 15365 6.0000000000000000, -0.80000000000000004 },
f92ab29f 15366 { 0.28181987881113829, 20.000000000000000, 1.0000000000000000,
7c62b943 15367 6.0000000000000000, -0.69999999999999996 },
f92ab29f 15368 { 0.31508211677735765, 20.000000000000000, 1.0000000000000000,
7c62b943 15369 6.0000000000000000, -0.59999999999999998 },
f92ab29f 15370 { 0.35706285886959599, 20.000000000000000, 1.0000000000000000,
7c62b943 15371 6.0000000000000000, -0.50000000000000000 },
f92ab29f 15372 { 0.41160053409238195, 20.000000000000000, 1.0000000000000000,
7c62b943 15373 6.0000000000000000, -0.40000000000000002 },
f92ab29f 15374 { 0.48508083111181949, 20.000000000000000, 1.0000000000000000,
7c62b943 15375 6.0000000000000000, -0.30000000000000004 },
f92ab29f 15376 { 0.58885194371375260, 20.000000000000000, 1.0000000000000000,
7c62b943 15377 6.0000000000000000, -0.19999999999999996 },
f92ab29f 15378 { 0.74482241684585748, 20.000000000000000, 1.0000000000000000,
7c62b943 15379 6.0000000000000000, -0.099999999999999978 },
f92ab29f 15380 { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
7c62b943 15381 6.0000000000000000, 0.0000000000000000 },
f92ab29f 15382 { 1.4700356864367146, 20.000000000000000, 1.0000000000000000,
7c62b943 15383 6.0000000000000000, 0.10000000000000009 },
f92ab29f 15384 { 2.4955144453055143, 20.000000000000000, 1.0000000000000000,
7c62b943 15385 6.0000000000000000, 0.19999999999999996 },
f92ab29f 15386 { 5.3506594845833471, 20.000000000000000, 1.0000000000000000,
7c62b943 15387 6.0000000000000000, 0.30000000000000004 },
f92ab29f 15388 { 16.618413752184221, 20.000000000000000, 1.0000000000000000,
7c62b943 15389 6.0000000000000000, 0.39999999999999991 },
f92ab29f 15390 { 89.310629514963878, 20.000000000000000, 1.0000000000000000,
7c62b943 15391 6.0000000000000000, 0.50000000000000000 },
f92ab29f 15392 { 1029.3439900542960, 20.000000000000000, 1.0000000000000000,
7c62b943 15393 6.0000000000000000, 0.60000000000000009 },
f92ab29f 15394 { 35659.847863372350, 20.000000000000000, 1.0000000000000000,
7c62b943 15395 6.0000000000000000, 0.69999999999999996 },
f92ab29f 15396 { 8009309.6233230168, 20.000000000000000, 1.0000000000000000,
7c62b943 15397 6.0000000000000000, 0.80000000000000004 },
f92ab29f 15398 { 145640590027.39731, 20.000000000000000, 1.0000000000000000,
7c62b943
BK
15399 6.0000000000000000, 0.89999999999999991 },
15400};
15401
15402// Test function for a=20.000000000000000, b=1.0000000000000000, c=6.0000000000000000.
15403template <typename Tp>
15404void test223()
15405{
15406 const Tp eps = std::numeric_limits<Tp>::epsilon();
15407 Tp max_abs_diff = -Tp(1);
15408 Tp max_abs_frac = -Tp(1);
15409 unsigned int num_datum = sizeof(data223)
15410 / sizeof(testcase_hyperg<double>);
15411 for (unsigned int i = 0; i < num_datum; ++i)
15412 {
15413 const Tp f = std::tr1::hyperg(Tp(data223[i].a), Tp(data223[i].b),
15414 Tp(data223[i].c), Tp(data223[i].x));
15415 const Tp f0 = data223[i].f0;
15416 const Tp diff = f - f0;
15417 if (std::abs(diff) > max_abs_diff)
15418 max_abs_diff = std::abs(diff);
15419 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15420 {
15421 const Tp frac = diff / f0;
15422 if (std::abs(frac) > max_abs_frac)
15423 max_abs_frac = std::abs(frac);
15424 }
15425 }
15426 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15427}
15428
15429// Test data for a=20.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
15430testcase_hyperg<double> data224[] = {
f92ab29f 15431 { 0.29614148314592498, 20.000000000000000, 1.0000000000000000,
7c62b943 15432 8.0000000000000000, -0.90000000000000002 },
f92ab29f 15433 { 0.32176277356430810, 20.000000000000000, 1.0000000000000000,
7c62b943 15434 8.0000000000000000, -0.80000000000000004 },
f92ab29f 15435 { 0.35217870475550522, 20.000000000000000, 1.0000000000000000,
7c62b943 15436 8.0000000000000000, -0.69999999999999996 },
f92ab29f 15437 { 0.38885270445515091, 20.000000000000000, 1.0000000000000000,
7c62b943 15438 8.0000000000000000, -0.59999999999999998 },
f92ab29f 15439 { 0.43389978380608424, 20.000000000000000, 1.0000000000000000,
7c62b943 15440 8.0000000000000000, -0.50000000000000000 },
f92ab29f 15441 { 0.49048612522269436, 20.000000000000000, 1.0000000000000000,
7c62b943 15442 8.0000000000000000, -0.40000000000000002 },
f92ab29f 15443 { 0.56355539635634611, 20.000000000000000, 1.0000000000000000,
7c62b943 15444 8.0000000000000000, -0.30000000000000004 },
f92ab29f 15445 { 0.66123153239117682, 20.000000000000000, 1.0000000000000000,
7c62b943 15446 8.0000000000000000, -0.19999999999999996 },
f92ab29f 15447 { 0.79773363961895427, 20.000000000000000, 1.0000000000000000,
7c62b943 15448 8.0000000000000000, -0.099999999999999978 },
f92ab29f 15449 { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
7c62b943 15450 8.0000000000000000, 0.0000000000000000 },
f92ab29f 15451 { 1.3245132157016595, 20.000000000000000, 1.0000000000000000,
7c62b943 15452 8.0000000000000000, 0.10000000000000009 },
f92ab29f 15453 { 1.9065148749742076, 20.000000000000000, 1.0000000000000000,
7c62b943 15454 8.0000000000000000, 0.19999999999999996 },
f92ab29f 15455 { 3.1328798652457452, 20.000000000000000, 1.0000000000000000,
7c62b943 15456 8.0000000000000000, 0.30000000000000004 },
f92ab29f 15457 { 6.4172532944033476, 20.000000000000000, 1.0000000000000000,
7c62b943 15458 8.0000000000000000, 0.39999999999999991 },
f92ab29f 15459 { 19.071683734222436, 20.000000000000000, 1.0000000000000000,
7c62b943 15460 8.0000000000000000, 0.50000000000000000 },
f92ab29f 15461 { 104.41989641582512, 20.000000000000000, 1.0000000000000000,
7c62b943 15462 8.0000000000000000, 0.60000000000000009 },
f92ab29f 15463 { 1510.5743992324240, 20.000000000000000, 1.0000000000000000,
7c62b943 15464 8.0000000000000000, 0.69999999999999996 },
f92ab29f 15465 { 115518.14360562043, 20.000000000000000, 1.0000000000000000,
7c62b943 15466 8.0000000000000000, 0.80000000000000004 },
f92ab29f 15467 { 414930455.29173034, 20.000000000000000, 1.0000000000000000,
7c62b943
BK
15468 8.0000000000000000, 0.89999999999999991 },
15469};
15470
15471// Test function for a=20.000000000000000, b=1.0000000000000000, c=8.0000000000000000.
15472template <typename Tp>
15473void test224()
15474{
15475 const Tp eps = std::numeric_limits<Tp>::epsilon();
15476 Tp max_abs_diff = -Tp(1);
15477 Tp max_abs_frac = -Tp(1);
15478 unsigned int num_datum = sizeof(data224)
15479 / sizeof(testcase_hyperg<double>);
15480 for (unsigned int i = 0; i < num_datum; ++i)
15481 {
15482 const Tp f = std::tr1::hyperg(Tp(data224[i].a), Tp(data224[i].b),
15483 Tp(data224[i].c), Tp(data224[i].x));
15484 const Tp f0 = data224[i].f0;
15485 const Tp diff = f - f0;
15486 if (std::abs(diff) > max_abs_diff)
15487 max_abs_diff = std::abs(diff);
15488 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15489 {
15490 const Tp frac = diff / f0;
15491 if (std::abs(frac) > max_abs_frac)
15492 max_abs_frac = std::abs(frac);
15493 }
15494 }
15495 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15496}
15497
15498// Test data for a=20.000000000000000, b=1.0000000000000000, c=10.000000000000000.
15499testcase_hyperg<double> data225[] = {
f92ab29f 15500 { 0.34954259539177696, 20.000000000000000, 1.0000000000000000,
7c62b943 15501 10.000000000000000, -0.90000000000000002 },
f92ab29f 15502 { 0.37714038609235123, 20.000000000000000, 1.0000000000000000,
7c62b943 15503 10.000000000000000, -0.80000000000000004 },
f92ab29f 15504 { 0.40942091659748725, 20.000000000000000, 1.0000000000000000,
7c62b943 15505 10.000000000000000, -0.69999999999999996 },
f92ab29f 15506 { 0.44767109606846428, 20.000000000000000, 1.0000000000000000,
7c62b943 15507 10.000000000000000, -0.59999999999999998 },
f92ab29f 15508 { 0.49368984777532254, 20.000000000000000, 1.0000000000000000,
7c62b943 15509 10.000000000000000, -0.50000000000000000 },
f92ab29f 15510 { 0.55006638216982318, 20.000000000000000, 1.0000000000000000,
7c62b943 15511 10.000000000000000, -0.40000000000000002 },
f92ab29f 15512 { 0.62065830207408912, 20.000000000000000, 1.0000000000000000,
7c62b943 15513 10.000000000000000, -0.30000000000000004 },
f92ab29f 15514 { 0.71145554513583786, 20.000000000000000, 1.0000000000000000,
7c62b943 15515 10.000000000000000, -0.19999999999999996 },
f92ab29f 15516 { 0.83223839666914623, 20.000000000000000, 1.0000000000000000,
7c62b943 15517 10.000000000000000, -0.099999999999999978 },
f92ab29f 15518 { 1.0000000000000000, 20.000000000000000, 1.0000000000000000,
7c62b943 15519 10.000000000000000, 0.0000000000000000 },
f92ab29f 15520 { 1.2466748028187731, 20.000000000000000, 1.0000000000000000,
7c62b943 15521 10.000000000000000, 0.10000000000000009 },
f92ab29f 15522 { 1.6386752725021749, 20.000000000000000, 1.0000000000000000,
7c62b943 15523 10.000000000000000, 0.19999999999999996 },
f92ab29f 15524 { 2.3340068725479681, 20.000000000000000, 1.0000000000000000,
7c62b943 15525 10.000000000000000, 0.30000000000000004 },
f92ab29f 15526 { 3.7848108613132054, 20.000000000000000, 1.0000000000000000,
7c62b943 15527 10.000000000000000, 0.39999999999999991 },
f92ab29f 15528 { 7.6754638550304133, 20.000000000000000, 1.0000000000000000,
7c62b943 15529 10.000000000000000, 0.50000000000000000 },
f92ab29f 15530 { 23.344217312927277, 20.000000000000000, 1.0000000000000000,
7c62b943 15531 10.000000000000000, 0.60000000000000009 },
f92ab29f 15532 { 149.83491198246921, 20.000000000000000, 1.0000000000000000,
7c62b943 15533 10.000000000000000, 0.69999999999999996 },
f92ab29f 15534 { 3936.9253501916060, 20.000000000000000, 1.0000000000000000,
7c62b943 15535 10.000000000000000, 0.80000000000000004 },
f92ab29f 15536 { 2794143.5036480185, 20.000000000000000, 1.0000000000000000,
7c62b943
BK
15537 10.000000000000000, 0.89999999999999991 },
15538};
15539
15540// Test function for a=20.000000000000000, b=1.0000000000000000, c=10.000000000000000.
15541template <typename Tp>
15542void test225()
15543{
15544 const Tp eps = std::numeric_limits<Tp>::epsilon();
15545 Tp max_abs_diff = -Tp(1);
15546 Tp max_abs_frac = -Tp(1);
15547 unsigned int num_datum = sizeof(data225)
15548 / sizeof(testcase_hyperg<double>);
15549 for (unsigned int i = 0; i < num_datum; ++i)
15550 {
15551 const Tp f = std::tr1::hyperg(Tp(data225[i].a), Tp(data225[i].b),
15552 Tp(data225[i].c), Tp(data225[i].x));
15553 const Tp f0 = data225[i].f0;
15554 const Tp diff = f - f0;
15555 if (std::abs(diff) > max_abs_diff)
15556 max_abs_diff = std::abs(diff);
15557 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15558 {
15559 const Tp frac = diff / f0;
15560 if (std::abs(frac) > max_abs_frac)
15561 max_abs_frac = std::abs(frac);
15562 }
15563 }
15564 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15565}
15566
15567// Test data for a=20.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
15568testcase_hyperg<double> data226[] = {
f92ab29f 15569 { 2.6602838683283435e-06, 20.000000000000000, 2.0000000000000000,
7c62b943 15570 2.0000000000000000, -0.90000000000000002 },
f92ab29f 15571 { 7.8442223930072316e-06, 20.000000000000000, 2.0000000000000000,
7c62b943 15572 2.0000000000000000, -0.80000000000000004 },
f92ab29f 15573 { 2.4604898194634598e-05, 20.000000000000000, 2.0000000000000000,
7c62b943 15574 2.0000000000000000, -0.69999999999999996 },
f92ab29f 15575 { 8.2718061255302686e-05, 20.000000000000000, 2.0000000000000000,
7c62b943 15576 2.0000000000000000, -0.59999999999999998 },
f92ab29f 15577 { 0.00030072865982171723, 20.000000000000000, 2.0000000000000000,
7c62b943 15578 2.0000000000000000, -0.50000000000000000 },
f92ab29f 15579 { 0.0011951964277455193, 20.000000000000000, 2.0000000000000000,
7c62b943 15580 2.0000000000000000, -0.40000000000000002 },
f92ab29f 15581 { 0.0052617832469731814, 20.000000000000000, 2.0000000000000000,
7c62b943 15582 2.0000000000000000, -0.30000000000000004 },
f92ab29f 15583 { 0.026084053304588847, 20.000000000000000, 2.0000000000000000,
7c62b943 15584 2.0000000000000000, -0.19999999999999996 },
f92ab29f 15585 { 0.14864362802414346, 20.000000000000000, 2.0000000000000000,
7c62b943 15586 2.0000000000000000, -0.099999999999999978 },
f92ab29f 15587 { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
7c62b943 15588 2.0000000000000000, 0.0000000000000000 },
f92ab29f 15589 { 8.2252633399699757, 20.000000000000000, 2.0000000000000000,
7c62b943 15590 2.0000000000000000, 0.10000000000000009 },
f92ab29f 15591 { 86.736173798840269, 20.000000000000000, 2.0000000000000000,
7c62b943 15592 2.0000000000000000, 0.19999999999999996 },
f92ab29f 15593 { 1253.2542894196865, 20.000000000000000, 2.0000000000000000,
7c62b943 15594 2.0000000000000000, 0.30000000000000004 },
f92ab29f 15595 { 27351.112277912434, 20.000000000000000, 2.0000000000000000,
7c62b943 15596 2.0000000000000000, 0.39999999999999991 },
f92ab29f 15597 { 1048576.0000000000, 20.000000000000000, 2.0000000000000000,
7c62b943 15598 2.0000000000000000, 0.50000000000000000 },
f92ab29f 15599 { 90949470.177293226, 20.000000000000000, 2.0000000000000000,
7c62b943 15600 2.0000000000000000, 0.60000000000000009 },
f92ab29f 15601 { 28679719907.924358, 20.000000000000000, 2.0000000000000000,
7c62b943 15602 2.0000000000000000, 0.69999999999999996 },
f92ab29f 15603 { 95367431640624.906, 20.000000000000000, 2.0000000000000000,
7c62b943 15604 2.0000000000000000, 0.80000000000000004 },
f92ab29f 15605 { 9.9999999999998657e+19, 20.000000000000000, 2.0000000000000000,
7c62b943
BK
15606 2.0000000000000000, 0.89999999999999991 },
15607};
15608
15609// Test function for a=20.000000000000000, b=2.0000000000000000, c=2.0000000000000000.
15610template <typename Tp>
15611void test226()
15612{
15613 const Tp eps = std::numeric_limits<Tp>::epsilon();
15614 Tp max_abs_diff = -Tp(1);
15615 Tp max_abs_frac = -Tp(1);
15616 unsigned int num_datum = sizeof(data226)
15617 / sizeof(testcase_hyperg<double>);
15618 for (unsigned int i = 0; i < num_datum; ++i)
15619 {
15620 const Tp f = std::tr1::hyperg(Tp(data226[i].a), Tp(data226[i].b),
15621 Tp(data226[i].c), Tp(data226[i].x));
15622 const Tp f0 = data226[i].f0;
15623 const Tp diff = f - f0;
15624 if (std::abs(diff) > max_abs_diff)
15625 max_abs_diff = std::abs(diff);
15626 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15627 {
15628 const Tp frac = diff / f0;
15629 if (std::abs(frac) > max_abs_frac)
15630 max_abs_frac = std::abs(frac);
15631 }
15632 }
15633 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
15634}
15635
15636// Test data for a=20.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
15637testcase_hyperg<double> data227[] = {
f92ab29f 15638 { 0.018828092583720951, 20.000000000000000, 2.0000000000000000,
7c62b943 15639 4.0000000000000000, -0.90000000000000002 },
f92ab29f 15640 { 0.023381944060455316, 20.000000000000000, 2.0000000000000000,
7c62b943 15641 4.0000000000000000, -0.80000000000000004 },
f92ab29f 15642 { 0.029789623984280793, 20.000000000000000, 2.0000000000000000,
7c62b943 15643 4.0000000000000000, -0.69999999999999996 },
f92ab29f 15644 { 0.039191021482500497, 20.000000000000000, 2.0000000000000000,
7c62b943 15645 4.0000000000000000, -0.59999999999999998 },
f92ab29f 15646 { 0.053727813036721514, 20.000000000000000, 2.0000000000000000,
7c62b943 15647 4.0000000000000000, -0.50000000000000000 },
f92ab29f 15648 { 0.077762010061669024, 20.000000000000000, 2.0000000000000000,
7c62b943 15649 4.0000000000000000, -0.40000000000000002 },
f92ab29f 15650 { 0.12110505620123302, 20.000000000000000, 2.0000000000000000,
7c62b943 15651 4.0000000000000000, -0.30000000000000004 },
f92ab29f 15652 { 0.20870149809080590, 20.000000000000000, 2.0000000000000000,
7c62b943 15653 4.0000000000000000, -0.19999999999999996 },
f92ab29f 15654 { 0.41429234328785769, 20.000000000000000, 2.0000000000000000,
7c62b943 15655 4.0000000000000000, -0.099999999999999978 },
f92ab29f 15656 { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
7c62b943 15657 4.0000000000000000, 0.0000000000000000 },
f92ab29f 15658 { 3.1308087404153113, 20.000000000000000, 2.0000000000000000,
7c62b943 15659 4.0000000000000000, 0.10000000000000009 },
f92ab29f 15660 { 13.586180626453050, 20.000000000000000, 2.0000000000000000,
7c62b943 15661 4.0000000000000000, 0.19999999999999996 },
f92ab29f 15662 { 87.117304082784415, 20.000000000000000, 2.0000000000000000,
7c62b943 15663 4.0000000000000000, 0.30000000000000004 },
f92ab29f 15664 { 889.26474381242826, 20.000000000000000, 2.0000000000000000,
7c62b943 15665 4.0000000000000000, 0.39999999999999991 },
f92ab29f 15666 { 16231.913312693494, 20.000000000000000, 2.0000000000000000,
7c62b943 15667 4.0000000000000000, 0.50000000000000000 },
f92ab29f 15668 { 653537.51168945129, 20.000000000000000, 2.0000000000000000,
7c62b943 15669 4.0000000000000000, 0.60000000000000009 },
f92ab29f 15670 { 87756230.793848589, 20.000000000000000, 2.0000000000000000,
7c62b943 15671 4.0000000000000000, 0.69999999999999996 },
f92ab29f 15672 { 101493977171.74945, 20.000000000000000, 2.0000000000000000,
7c62b943 15673 4.0000000000000000, 0.80000000000000004 },
f92ab29f 15674 { 21375960679556916., 20.000000000000000, 2.0000000000000000,
7c62b943
BK
15675 4.0000000000000000, 0.89999999999999991 },
15676};
15677
15678// Test function for a=20.000000000000000, b=2.0000000000000000, c=4.0000000000000000.
15679template <typename Tp>
15680void test227()
15681{
15682 const Tp eps = std::numeric_limits<Tp>::epsilon();
15683 Tp max_abs_diff = -Tp(1);
15684 Tp max_abs_frac = -Tp(1);
15685 unsigned int num_datum = sizeof(data227)
15686 / sizeof(testcase_hyperg<double>);
15687 for (unsigned int i = 0; i < num_datum; ++i)
15688 {
15689 const Tp f = std::tr1::hyperg(Tp(data227[i].a), Tp(data227[i].b),
15690 Tp(data227[i].c), Tp(data227[i].x));
15691 const Tp f0 = data227[i].f0;
15692 const Tp diff = f - f0;
15693 if (std::abs(diff) > max_abs_diff)
15694 max_abs_diff = std::abs(diff);
15695 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15696 {
15697 const Tp frac = diff / f0;
15698 if (std::abs(frac) > max_abs_frac)
15699 max_abs_frac = std::abs(frac);
15700 }
15701 }
15702 VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
15703}
15704
15705// Test data for a=20.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
15706testcase_hyperg<double> data228[] = {
f92ab29f 15707 { 0.049200410661854252, 20.000000000000000, 2.0000000000000000,
7c62b943 15708 6.0000000000000000, -0.90000000000000002 },
f92ab29f 15709 { 0.059460876757152226, 20.000000000000000, 2.0000000000000000,
7c62b943 15710 6.0000000000000000, -0.80000000000000004 },
f92ab29f 15711 { 0.073244762686653350, 20.000000000000000, 2.0000000000000000,
7c62b943 15712 6.0000000000000000, -0.69999999999999996 },
f92ab29f 15713 { 0.092334626017932922, 20.000000000000000, 2.0000000000000000,
7c62b943 15714 6.0000000000000000, -0.59999999999999998 },
f92ab29f 15715 { 0.11976760350696837, 20.000000000000000, 2.0000000000000000,
7c62b943 15716 6.0000000000000000, -0.50000000000000000 },
f92ab29f 15717 { 0.16102414609169383, 20.000000000000000, 2.0000000000000000,
7c62b943 15718 6.0000000000000000, -0.40000000000000002 },
f92ab29f 15719 { 0.22670456785796222, 20.000000000000000, 2.0000000000000000,
7c62b943 15720 6.0000000000000000, -0.30000000000000004 },
f92ab29f 15721 { 0.33912903252727361, 20.000000000000000, 2.0000000000000000,
7c62b943 15722 6.0000000000000000, -0.19999999999999996 },
f92ab29f 15723 { 0.55049794600858060, 20.000000000000000, 2.0000000000000000,
7c62b943 15724 6.0000000000000000, -0.099999999999999978 },
f92ab29f 15725 { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
7c62b943 15726 6.0000000000000000, 0.0000000000000000 },
f92ab29f 15727 { 2.1254722872032232, 20.000000000000000, 2.0000000000000000,
7c62b943 15728 6.0000000000000000, 0.10000000000000009 },
f92ab29f 15729 { 5.6261213886736172, 20.000000000000000, 2.0000000000000000,
7c62b943 15730 6.0000000000000000, 0.19999999999999996 },
f92ab29f 15731 { 20.137315891130996, 20.000000000000000, 2.0000000000000000,
7c62b943 15732 6.0000000000000000, 0.30000000000000004 },
f92ab29f 15733 { 108.04381584643853, 20.000000000000000, 2.0000000000000000,
7c62b943 15734 6.0000000000000000, 0.39999999999999991 },
f92ab29f 15735 { 992.41692466460245, 20.000000000000000, 2.0000000000000000,
7c62b943 15736 6.0000000000000000, 0.50000000000000000 },
f92ab29f 15737 { 19055.363816004465, 20.000000000000000, 2.0000000000000000,
7c62b943 15738 6.0000000000000000, 0.60000000000000009 },
f92ab29f 15739 { 1105471.9504312086, 20.000000000000000, 2.0000000000000000,
7c62b943 15740 6.0000000000000000, 0.69999999999999996 },
f92ab29f 15741 { 448521363.90608919, 20.000000000000000, 2.0000000000000000,
7c62b943 15742 6.0000000000000000, 0.80000000000000004 },
f92ab29f 15743 { 19078917293639.004, 20.000000000000000, 2.0000000000000000,
7c62b943
BK
15744 6.0000000000000000, 0.89999999999999991 },
15745};
15746
15747// Test function for a=20.000000000000000, b=2.0000000000000000, c=6.0000000000000000.
15748template <typename Tp>
15749void test228()
15750{
15751 const Tp eps = std::numeric_limits<Tp>::epsilon();
15752 Tp max_abs_diff = -Tp(1);
15753 Tp max_abs_frac = -Tp(1);
15754 unsigned int num_datum = sizeof(data228)
15755 / sizeof(testcase_hyperg<double>);
15756 for (unsigned int i = 0; i < num_datum; ++i)
15757 {
15758 const Tp f = std::tr1::hyperg(Tp(data228[i].a), Tp(data228[i].b),
15759 Tp(data228[i].c), Tp(data228[i].x));
15760 const Tp f0 = data228[i].f0;
15761 const Tp diff = f - f0;
15762 if (std::abs(diff) > max_abs_diff)
15763 max_abs_diff = std::abs(diff);
15764 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15765 {
15766 const Tp frac = diff / f0;
15767 if (std::abs(frac) > max_abs_frac)
15768 max_abs_frac = std::abs(frac);
15769 }
15770 }
15771 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
15772}
15773
15774// Test data for a=20.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
15775testcase_hyperg<double> data229[] = {
f92ab29f 15776 { 0.083753547015334745, 20.000000000000000, 2.0000000000000000,
7c62b943 15777 8.0000000000000000, -0.90000000000000002 },
f92ab29f 15778 { 0.099238444687035701, 20.000000000000000, 2.0000000000000000,
7c62b943 15779 8.0000000000000000, -0.80000000000000004 },
f92ab29f 15780 { 0.11938294012867758, 20.000000000000000, 2.0000000000000000,
7c62b943 15781 8.0000000000000000, -0.69999999999999996 },
f92ab29f 15782 { 0.14622683905023326, 20.000000000000000, 2.0000000000000000,
7c62b943 15783 8.0000000000000000, -0.59999999999999998 },
f92ab29f 15784 { 0.18303556733713025, 20.000000000000000, 2.0000000000000000,
7c62b943 15785 8.0000000000000000, -0.50000000000000000 },
f92ab29f 15786 { 0.23527764069382409, 20.000000000000000, 2.0000000000000000,
7c62b943 15787 8.0000000000000000, -0.40000000000000002 },
f92ab29f 15788 { 0.31261681740827085, 20.000000000000000, 2.0000000000000000,
7c62b943 15789 8.0000000000000000, -0.30000000000000004 },
f92ab29f 15790 { 0.43327581880538862, 20.000000000000000, 2.0000000000000000,
7c62b943 15791 8.0000000000000000, -0.19999999999999996 },
f92ab29f 15792 { 0.63445840637296658, 20.000000000000000, 2.0000000000000000,
7c62b943 15793 8.0000000000000000, -0.099999999999999978 },
f92ab29f 15794 { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
7c62b943 15795 8.0000000000000000, 0.0000000000000000 },
f92ab29f 15796 { 1.7438842395813297, 20.000000000000000, 2.0000000000000000,
7c62b943 15797 8.0000000000000000, 0.10000000000000009 },
f92ab29f 15798 { 3.5070840938209269, 20.000000000000000, 2.0000000000000000,
7c62b943 15799 8.0000000000000000, 0.19999999999999996 },
f92ab29f 15800 { 8.6573372006089713, 20.000000000000000, 2.0000000000000000,
7c62b943 15801 8.0000000000000000, 0.30000000000000004 },
f92ab29f 15802 { 28.779342118408906, 20.000000000000000, 2.0000000000000000,
7c62b943 15803 8.0000000000000000, 0.39999999999999991 },
f92ab29f 15804 { 147.50178613955714, 20.000000000000000, 2.0000000000000000,
7c62b943 15805 8.0000000000000000, 0.50000000000000000 },
f92ab29f 15806 { 1427.1686016136398, 20.000000000000000, 2.0000000000000000,
7c62b943 15807 8.0000000000000000, 0.60000000000000009 },
f92ab29f 15808 { 36780.643714655642, 20.000000000000000, 2.0000000000000000,
7c62b943 15809 8.0000000000000000, 0.69999999999999996 },
f92ab29f 15810 { 5313869.6058585485, 20.000000000000000, 2.0000000000000000,
7c62b943 15811 8.0000000000000000, 0.80000000000000004 },
f92ab29f 15812 { 46057280607.381966, 20.000000000000000, 2.0000000000000000,
7c62b943
BK
15813 8.0000000000000000, 0.89999999999999991 },
15814};
15815
15816// Test function for a=20.000000000000000, b=2.0000000000000000, c=8.0000000000000000.
15817template <typename Tp>
15818void test229()
15819{
15820 const Tp eps = std::numeric_limits<Tp>::epsilon();
15821 Tp max_abs_diff = -Tp(1);
15822 Tp max_abs_frac = -Tp(1);
15823 unsigned int num_datum = sizeof(data229)
15824 / sizeof(testcase_hyperg<double>);
15825 for (unsigned int i = 0; i < num_datum; ++i)
15826 {
15827 const Tp f = std::tr1::hyperg(Tp(data229[i].a), Tp(data229[i].b),
15828 Tp(data229[i].c), Tp(data229[i].x));
15829 const Tp f0 = data229[i].f0;
15830 const Tp diff = f - f0;
15831 if (std::abs(diff) > max_abs_diff)
15832 max_abs_diff = std::abs(diff);
15833 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15834 {
15835 const Tp frac = diff / f0;
15836 if (std::abs(frac) > max_abs_frac)
15837 max_abs_frac = std::abs(frac);
15838 }
15839 }
15840 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15841}
15842
15843// Test data for a=20.000000000000000, b=2.0000000000000000, c=10.000000000000000.
15844testcase_hyperg<double> data230[] = {
f92ab29f 15845 { 0.11920045035073683, 20.000000000000000, 2.0000000000000000,
7c62b943 15846 10.000000000000000, -0.90000000000000002 },
f92ab29f 15847 { 0.13907946814302774, 20.000000000000000, 2.0000000000000000,
7c62b943 15848 10.000000000000000, -0.80000000000000004 },
f92ab29f 15849 { 0.16431439792559688, 20.000000000000000, 2.0000000000000000,
7c62b943 15850 10.000000000000000, -0.69999999999999996 },
f92ab29f 15851 { 0.19698796016987008, 20.000000000000000, 2.0000000000000000,
7c62b943 15852 10.000000000000000, -0.59999999999999998 },
f92ab29f 15853 { 0.24028510928790570, 20.000000000000000, 2.0000000000000000,
7c62b943 15854 10.000000000000000, -0.50000000000000000 },
f92ab29f 15855 { 0.29926031296483119, 20.000000000000000, 2.0000000000000000,
7c62b943 15856 10.000000000000000, -0.40000000000000002 },
f92ab29f 15857 { 0.38229327814229169, 20.000000000000000, 2.0000000000000000,
7c62b943 15858 10.000000000000000, -0.30000000000000004 },
f92ab29f 15859 { 0.50402047283093110, 20.000000000000000, 2.0000000000000000,
7c62b943 15860 10.000000000000000, -0.19999999999999996 },
f92ab29f 15861 { 0.69167261179586503, 20.000000000000000, 2.0000000000000000,
7c62b943 15862 10.000000000000000, -0.099999999999999978 },
f92ab29f 15863 { 1.0000000000000000, 20.000000000000000, 2.0000000000000000,
7c62b943 15864 10.000000000000000, 0.0000000000000000 },
f92ab29f 15865 { 1.5503152253394308, 20.000000000000000, 2.0000000000000000,
7c62b943 15866 10.000000000000000, 0.10000000000000009 },
f92ab29f 15867 { 2.6469548193635797, 20.000000000000000, 2.0000000000000000,
7c62b943 15868 10.000000000000000, 0.19999999999999996 },
f92ab29f 15869 { 5.1882631330566813, 20.000000000000000, 2.0000000000000000,
7c62b943 15870 10.000000000000000, 0.30000000000000004 },
f92ab29f 15871 { 12.476792759124516, 20.000000000000000, 2.0000000000000000,
7c62b943 15872 10.000000000000000, 0.39999999999999991 },
f92ab29f 15873 { 41.026391565091259, 20.000000000000000, 2.0000000000000000,
7c62b943 15874 10.000000000000000, 0.50000000000000000 },
f92ab29f 15875 { 220.92584715988204, 20.000000000000000, 2.0000000000000000,
7c62b943 15876 10.000000000000000, 0.60000000000000009 },
f92ab29f 15877 { 2677.0834450236207, 20.000000000000000, 2.0000000000000000,
7c62b943 15878 10.000000000000000, 0.69999999999999996 },
f92ab29f 15879 { 141774.31260689779, 20.000000000000000, 2.0000000000000000,
7c62b943 15880 10.000000000000000, 0.80000000000000004 },
f92ab29f 15881 { 254267148.83196995, 20.000000000000000, 2.0000000000000000,
7c62b943
BK
15882 10.000000000000000, 0.89999999999999991 },
15883};
15884
15885// Test function for a=20.000000000000000, b=2.0000000000000000, c=10.000000000000000.
15886template <typename Tp>
15887void test230()
15888{
15889 const Tp eps = std::numeric_limits<Tp>::epsilon();
15890 Tp max_abs_diff = -Tp(1);
15891 Tp max_abs_frac = -Tp(1);
15892 unsigned int num_datum = sizeof(data230)
15893 / sizeof(testcase_hyperg<double>);
15894 for (unsigned int i = 0; i < num_datum; ++i)
15895 {
15896 const Tp f = std::tr1::hyperg(Tp(data230[i].a), Tp(data230[i].b),
15897 Tp(data230[i].c), Tp(data230[i].x));
15898 const Tp f0 = data230[i].f0;
15899 const Tp diff = f - f0;
15900 if (std::abs(diff) > max_abs_diff)
15901 max_abs_diff = std::abs(diff);
15902 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15903 {
15904 const Tp frac = diff / f0;
15905 if (std::abs(frac) > max_abs_frac)
15906 max_abs_frac = std::abs(frac);
15907 }
15908 }
15909 VERIFY(max_abs_frac < Tp(2.5000000000000020e-13));
15910}
15911
15912// Test data for a=20.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
15913testcase_hyperg<double> data231[] = {
f92ab29f 15914 { -1.8650300348791041e-05, 20.000000000000000, 5.0000000000000000,
7c62b943 15915 2.0000000000000000, -0.90000000000000002 },
f92ab29f 15916 { -3.6488008415183135e-05, 20.000000000000000, 5.0000000000000000,
7c62b943 15917 2.0000000000000000, -0.80000000000000004 },
f92ab29f 15918 { -6.4614776410999025e-05, 20.000000000000000, 5.0000000000000000,
7c62b943 15919 2.0000000000000000, -0.69999999999999996 },
f92ab29f 15920 { -8.4495207102575916e-05, 20.000000000000000, 5.0000000000000000,
7c62b943 15921 2.0000000000000000, -0.59999999999999998 },
f92ab29f 15922 { 2.2276197023819217e-05, 20.000000000000000, 5.0000000000000000,
7c62b943 15923 2.0000000000000000, -0.50000000000000000 },
f92ab29f 15924 { 0.00070736115111467578, 20.000000000000000, 5.0000000000000000,
7c62b943 15925 2.0000000000000000, -0.40000000000000002 },
f92ab29f 15926 { 0.0027829732057272809, 20.000000000000000, 5.0000000000000000,
7c62b943 15927 2.0000000000000000, -0.30000000000000004 },
f92ab29f 15928 { 0.0013283545664373570, 20.000000000000000, 5.0000000000000000,
7c62b943 15929 2.0000000000000000, -0.19999999999999996 },
f92ab29f 15930 { -0.041767631015048733, 20.000000000000000, 5.0000000000000000,
7c62b943 15931 2.0000000000000000, -0.099999999999999978 },
f92ab29f 15932 { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
7c62b943 15933 2.0000000000000000, 0.0000000000000000 },
f92ab29f 15934 { 61.311496556100003, 20.000000000000000, 5.0000000000000000,
7c62b943 15935 2.0000000000000000, 0.10000000000000009 },
f92ab29f 15936 { 2397.4420539085681, 20.000000000000000, 5.0000000000000000,
7c62b943 15937 2.0000000000000000, 0.19999999999999996 },
f92ab29f 15938 { 103687.60998586559, 20.000000000000000, 5.0000000000000000,
7c62b943 15939 2.0000000000000000, 0.30000000000000004 },
f92ab29f 15940 { 6247196.6451068865, 20.000000000000000, 5.0000000000000000,
7c62b943 15941 2.0000000000000000, 0.39999999999999991 },
f92ab29f 15942 { 656408576.00000000, 20.000000000000000, 5.0000000000000000,
7c62b943 15943 2.0000000000000000, 0.50000000000000000 },
f92ab29f 15944 { 165334768098.54715, 20.000000000000000, 5.0000000000000000,
7c62b943 15945 2.0000000000000000, 0.60000000000000009 },
f92ab29f 15946 { 175097125520816.81, 20.000000000000000, 5.0000000000000000,
7c62b943 15947 2.0000000000000000, 0.69999999999999996 },
f92ab29f 15948 { 2.6818275451660257e+18, 20.000000000000000, 5.0000000000000000,
7c62b943 15949 2.0000000000000000, 0.80000000000000004 },
f92ab29f 15950 { 2.9794599999999321e+25, 20.000000000000000, 5.0000000000000000,
7c62b943
BK
15951 2.0000000000000000, 0.89999999999999991 },
15952};
15953
15954// Test function for a=20.000000000000000, b=5.0000000000000000, c=2.0000000000000000.
15955template <typename Tp>
15956void test231()
15957{
15958 const Tp eps = std::numeric_limits<Tp>::epsilon();
15959 Tp max_abs_diff = -Tp(1);
15960 Tp max_abs_frac = -Tp(1);
15961 unsigned int num_datum = sizeof(data231)
15962 / sizeof(testcase_hyperg<double>);
15963 for (unsigned int i = 0; i < num_datum; ++i)
15964 {
15965 const Tp f = std::tr1::hyperg(Tp(data231[i].a), Tp(data231[i].b),
15966 Tp(data231[i].c), Tp(data231[i].x));
15967 const Tp f0 = data231[i].f0;
15968 const Tp diff = f - f0;
15969 if (std::abs(diff) > max_abs_diff)
15970 max_abs_diff = std::abs(diff);
15971 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
15972 {
15973 const Tp frac = diff / f0;
15974 if (std::abs(frac) > max_abs_frac)
15975 max_abs_frac = std::abs(frac);
15976 }
15977 }
15978 VERIFY(max_abs_frac < Tp(5.0000000000000034e-10));
15979}
15980
15981// Test data for a=20.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
15982testcase_hyperg<double> data232[] = {
f92ab29f 15983 { -3.6403884515183385e-06, 20.000000000000000, 5.0000000000000000,
7c62b943 15984 4.0000000000000000, -0.90000000000000002 },
f92ab29f 15985 { -9.5873829247725586e-06, 20.000000000000000, 5.0000000000000000,
7c62b943 15986 4.0000000000000000, -0.80000000000000004 },
f92ab29f 15987 { -2.6052245147354694e-05, 20.000000000000000, 5.0000000000000000,
7c62b943 15988 4.0000000000000000, -0.69999999999999996 },
f92ab29f 15989 { -7.2378303598294010e-05, 20.000000000000000, 5.0000000000000000,
7c62b943 15990 4.0000000000000000, -0.59999999999999998 },
f92ab29f 15991 { -0.00020048577321454082, 20.000000000000000, 5.0000000000000000,
7c62b943 15992 4.0000000000000000, -0.50000000000000000 },
f92ab29f 15993 { -0.00051222704046236022, 20.000000000000000, 5.0000000000000000,
7c62b943 15994 4.0000000000000000, -0.40000000000000002 },
f92ab29f 15995 { -0.00080950511491911315, 20.000000000000000, 5.0000000000000000,
7c62b943 15996 4.0000000000000000, -0.30000000000000004 },
f92ab29f 15997 { 0.0043473422174314449, 20.000000000000000, 5.0000000000000000,
7c62b943 15998 4.0000000000000000, -0.19999999999999996 },
f92ab29f 15999 { 0.081078342558623825, 20.000000000000000, 5.0000000000000000,
7c62b943 16000 4.0000000000000000, -0.099999999999999978 },
f92ab29f 16001 { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
7c62b943 16002 4.0000000000000000, 0.0000000000000000 },
f92ab29f 16003 { 12.794854084397739, 20.000000000000000, 5.0000000000000000,
7c62b943 16004 4.0000000000000000, 0.10000000000000009 },
f92ab29f 16005 { 195.15639104739046, 20.000000000000000, 5.0000000000000000,
7c62b943 16006 4.0000000000000000, 0.19999999999999996 },
f92ab29f 16007 { 3938.7991953190131, 20.000000000000000, 5.0000000000000000,
7c62b943 16008 4.0000000000000000, 0.30000000000000004 },
f92ab29f 16009 { 118521.48653762060, 20.000000000000000, 5.0000000000000000,
7c62b943 16010 4.0000000000000000, 0.39999999999999991 },
f92ab29f 16011 { 6291455.9999999972, 20.000000000000000, 5.0000000000000000,
7c62b943 16012 4.0000000000000000, 0.50000000000000000 },
f92ab29f 16013 { 773070496.50699198, 20.000000000000000, 5.0000000000000000,
7c62b943 16014 4.0000000000000000, 0.60000000000000009 },
f92ab29f 16015 { 363276452167.04102, 20.000000000000000, 5.0000000000000000,
7c62b943 16016 4.0000000000000000, 0.69999999999999996 },
f92ab29f 16017 { 2002716064453133.0, 20.000000000000000, 5.0000000000000000,
7c62b943 16018 4.0000000000000000, 0.80000000000000004 },
f92ab29f 16019 { 4.5999999999999109e+21, 20.000000000000000, 5.0000000000000000,
7c62b943
BK
16020 4.0000000000000000, 0.89999999999999991 },
16021};
16022
16023// Test function for a=20.000000000000000, b=5.0000000000000000, c=4.0000000000000000.
16024template <typename Tp>
16025void test232()
16026{
16027 const Tp eps = std::numeric_limits<Tp>::epsilon();
16028 Tp max_abs_diff = -Tp(1);
16029 Tp max_abs_frac = -Tp(1);
16030 unsigned int num_datum = sizeof(data232)
16031 / sizeof(testcase_hyperg<double>);
16032 for (unsigned int i = 0; i < num_datum; ++i)
16033 {
16034 const Tp f = std::tr1::hyperg(Tp(data232[i].a), Tp(data232[i].b),
16035 Tp(data232[i].c), Tp(data232[i].x));
16036 const Tp f0 = data232[i].f0;
16037 const Tp diff = f - f0;
16038 if (std::abs(diff) > max_abs_diff)
16039 max_abs_diff = std::abs(diff);
16040 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16041 {
16042 const Tp frac = diff / f0;
16043 if (std::abs(frac) > max_abs_frac)
16044 max_abs_frac = std::abs(frac);
16045 }
16046 }
16047 VERIFY(max_abs_frac < Tp(2.5000000000000013e-09));
16048}
16049
16050// Test data for a=20.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
16051testcase_hyperg<double> data233[] = {
f92ab29f 16052 { 0.00014313323624069244, 20.000000000000000, 5.0000000000000000,
7c62b943 16053 6.0000000000000000, -0.90000000000000002 },
f92ab29f 16054 { 0.00025426183473140697, 20.000000000000000, 5.0000000000000000,
7c62b943 16055 6.0000000000000000, -0.80000000000000004 },
f92ab29f 16056 { 0.00048255612836426809, 20.000000000000000, 5.0000000000000000,
7c62b943 16057 6.0000000000000000, -0.69999999999999996 },
f92ab29f 16058 { 0.00099096904674788092, 20.000000000000000, 5.0000000000000000,
7c62b943 16059 6.0000000000000000, -0.59999999999999998 },
f92ab29f 16060 { 0.0022347805521915607, 20.000000000000000, 5.0000000000000000,
7c62b943 16061 6.0000000000000000, -0.50000000000000000 },
f92ab29f 16062 { 0.0056271390060292376, 20.000000000000000, 5.0000000000000000,
7c62b943 16063 6.0000000000000000, -0.40000000000000002 },
f92ab29f 16064 { 0.016109059519227226, 20.000000000000000, 5.0000000000000000,
7c62b943 16065 6.0000000000000000, -0.30000000000000004 },
f92ab29f 16066 { 0.053453465775608999, 20.000000000000000, 5.0000000000000000,
7c62b943 16067 6.0000000000000000, -0.19999999999999996 },
f92ab29f 16068 { 0.20995202901839258, 20.000000000000000, 5.0000000000000000,
7c62b943 16069 6.0000000000000000, -0.099999999999999978 },
f92ab29f 16070 { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
7c62b943 16071 6.0000000000000000, 0.0000000000000000 },
f92ab29f 16072 { 5.9534372167648799, 20.000000000000000, 5.0000000000000000,
7c62b943 16073 6.0000000000000000, 0.10000000000000009 },
f92ab29f 16074 { 46.157632071205875, 20.000000000000000, 5.0000000000000000,
7c62b943 16075 6.0000000000000000, 0.19999999999999996 },
f92ab29f 16076 { 494.32074431164915, 20.000000000000000, 5.0000000000000000,
7c62b943 16077 6.0000000000000000, 0.30000000000000004 },
f92ab29f 16078 { 7989.5277611775946, 20.000000000000000, 5.0000000000000000,
7c62b943 16079 6.0000000000000000, 0.39999999999999991 },
f92ab29f 16080 { 224179.55830753347, 20.000000000000000, 5.0000000000000000,
7c62b943 16081 6.0000000000000000, 0.50000000000000000 },
f92ab29f 16082 { 13848144.485282511, 20.000000000000000, 5.0000000000000000,
7c62b943 16083 6.0000000000000000, 0.60000000000000009 },
f92ab29f 16084 { 2948587692.8891716, 20.000000000000000, 5.0000000000000000,
7c62b943 16085 6.0000000000000000, 0.69999999999999996 },
f92ab29f 16086 { 5940513286161.6602, 20.000000000000000, 5.0000000000000000,
7c62b943 16087 6.0000000000000000, 0.80000000000000004 },
f92ab29f 16088 { 2.8531757655945201e+18, 20.000000000000000, 5.0000000000000000,
7c62b943
BK
16089 6.0000000000000000, 0.89999999999999991 },
16090};
16091
16092// Test function for a=20.000000000000000, b=5.0000000000000000, c=6.0000000000000000.
16093template <typename Tp>
16094void test233()
16095{
16096 const Tp eps = std::numeric_limits<Tp>::epsilon();
16097 Tp max_abs_diff = -Tp(1);
16098 Tp max_abs_frac = -Tp(1);
16099 unsigned int num_datum = sizeof(data233)
16100 / sizeof(testcase_hyperg<double>);
16101 for (unsigned int i = 0; i < num_datum; ++i)
16102 {
16103 const Tp f = std::tr1::hyperg(Tp(data233[i].a), Tp(data233[i].b),
16104 Tp(data233[i].c), Tp(data233[i].x));
16105 const Tp f0 = data233[i].f0;
16106 const Tp diff = f - f0;
16107 if (std::abs(diff) > max_abs_diff)
16108 max_abs_diff = std::abs(diff);
16109 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16110 {
16111 const Tp frac = diff / f0;
16112 if (std::abs(frac) > max_abs_frac)
16113 max_abs_frac = std::abs(frac);
16114 }
16115 }
16116 VERIFY(max_abs_frac < Tp(1.0000000000000006e-10));
16117}
16118
16119// Test data for a=20.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
16120testcase_hyperg<double> data234[] = {
f92ab29f 16121 { 0.0012492049968742865, 20.000000000000000, 5.0000000000000000,
7c62b943 16122 8.0000000000000000, -0.90000000000000002 },
f92ab29f 16123 { 0.0019931241968014451, 20.000000000000000, 5.0000000000000000,
7c62b943 16124 8.0000000000000000, -0.80000000000000004 },
f92ab29f 16125 { 0.0033203386861411057, 20.000000000000000, 5.0000000000000000,
7c62b943 16126 8.0000000000000000, -0.69999999999999996 },
f92ab29f 16127 { 0.0058191894509855282, 20.000000000000000, 5.0000000000000000,
7c62b943 16128 8.0000000000000000, -0.59999999999999998 },
f92ab29f 16129 { 0.010830090368313866, 20.000000000000000, 5.0000000000000000,
7c62b943 16130 8.0000000000000000, -0.50000000000000000 },
f92ab29f 16131 { 0.021653062305193163, 20.000000000000000, 5.0000000000000000,
7c62b943 16132 8.0000000000000000, -0.40000000000000002 },
f92ab29f 16133 { 0.047180821280919084, 20.000000000000000, 5.0000000000000000,
7c62b943 16134 8.0000000000000000, -0.30000000000000004 },
f92ab29f 16135 { 0.11405637279736180, 20.000000000000000, 5.0000000000000000,
7c62b943 16136 8.0000000000000000, -0.19999999999999996 },
f92ab29f 16137 { 0.31275468794720990, 20.000000000000000, 5.0000000000000000,
7c62b943 16138 8.0000000000000000, -0.099999999999999978 },
f92ab29f 16139 { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
7c62b943 16140 8.0000000000000000, 0.0000000000000000 },
f92ab29f 16141 { 3.8598904658643969, 20.000000000000000, 5.0000000000000000,
7c62b943 16142 8.0000000000000000, 0.10000000000000009 },
f92ab29f 16143 { 18.806301417906667, 20.000000000000000, 5.0000000000000000,
7c62b943 16144 8.0000000000000000, 0.19999999999999996 },
f92ab29f 16145 { 122.77054465017432, 20.000000000000000, 5.0000000000000000,
7c62b943 16146 8.0000000000000000, 0.30000000000000004 },
f92ab29f 16147 { 1168.4762146808946, 20.000000000000000, 5.0000000000000000,
7c62b943 16148 8.0000000000000000, 0.39999999999999991 },
f92ab29f 16149 { 18437.511788521082, 20.000000000000000, 5.0000000000000000,
7c62b943 16150 8.0000000000000000, 0.50000000000000000 },
f92ab29f 16151 { 597441.79669264762, 20.000000000000000, 5.0000000000000000,
7c62b943 16152 8.0000000000000000, 0.60000000000000009 },
f92ab29f 16153 { 59390411.369227782, 20.000000000000000, 5.0000000000000000,
7c62b943 16154 8.0000000000000000, 0.69999999999999996 },
f92ab29f 16155 { 44681668993.361603, 20.000000000000000, 5.0000000000000000,
7c62b943 16156 8.0000000000000000, 0.80000000000000004 },
f92ab29f 16157 { 4559673269683164.0, 20.000000000000000, 5.0000000000000000,
7c62b943
BK
16158 8.0000000000000000, 0.89999999999999991 },
16159};
16160
16161// Test function for a=20.000000000000000, b=5.0000000000000000, c=8.0000000000000000.
16162template <typename Tp>
16163void test234()
16164{
16165 const Tp eps = std::numeric_limits<Tp>::epsilon();
16166 Tp max_abs_diff = -Tp(1);
16167 Tp max_abs_frac = -Tp(1);
16168 unsigned int num_datum = sizeof(data234)
16169 / sizeof(testcase_hyperg<double>);
16170 for (unsigned int i = 0; i < num_datum; ++i)
16171 {
16172 const Tp f = std::tr1::hyperg(Tp(data234[i].a), Tp(data234[i].b),
16173 Tp(data234[i].c), Tp(data234[i].x));
16174 const Tp f0 = data234[i].f0;
16175 const Tp diff = f - f0;
16176 if (std::abs(diff) > max_abs_diff)
16177 max_abs_diff = std::abs(diff);
16178 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16179 {
16180 const Tp frac = diff / f0;
16181 if (std::abs(frac) > max_abs_frac)
16182 max_abs_frac = std::abs(frac);
16183 }
16184 }
16185 VERIFY(max_abs_frac < Tp(1.0000000000000006e-11));
16186}
16187
16188// Test data for a=20.000000000000000, b=5.0000000000000000, c=10.000000000000000.
16189testcase_hyperg<double> data235[] = {
f92ab29f 16190 { 0.0038867957051371450, 20.000000000000000, 5.0000000000000000,
7c62b943 16191 10.000000000000000, -0.90000000000000002 },
f92ab29f 16192 { 0.0058484892597364443, 20.000000000000000, 5.0000000000000000,
7c62b943 16193 10.000000000000000, -0.80000000000000004 },
f92ab29f 16194 { 0.0090987656053757009, 20.000000000000000, 5.0000000000000000,
7c62b943 16195 10.000000000000000, -0.69999999999999996 },
f92ab29f 16196 { 0.014714392537270733, 20.000000000000000, 5.0000000000000000,
7c62b943 16197 10.000000000000000, -0.59999999999999998 },
f92ab29f 16198 { 0.024900404542056769, 20.000000000000000, 5.0000000000000000,
7c62b943 16199 10.000000000000000, -0.50000000000000000 },
f92ab29f 16200 { 0.044460184663785055, 20.000000000000000, 5.0000000000000000,
7c62b943 16201 10.000000000000000, -0.40000000000000002 },
f92ab29f 16202 { 0.084638849196356836, 20.000000000000000, 5.0000000000000000,
7c62b943 16203 10.000000000000000, -0.30000000000000004 },
f92ab29f 16204 { 0.17409058241290998, 20.000000000000000, 5.0000000000000000,
7c62b943 16205 10.000000000000000, -0.19999999999999996 },
f92ab29f 16206 { 0.39357055823580755, 20.000000000000000, 5.0000000000000000,
7c62b943 16207 10.000000000000000, -0.099999999999999978 },
f92ab29f 16208 { 1.0000000000000000, 20.000000000000000, 5.0000000000000000,
7c62b943 16209 10.000000000000000, 0.0000000000000000 },
f92ab29f 16210 { 2.9410794636226596, 20.000000000000000, 5.0000000000000000,
7c62b943 16211 10.000000000000000, 0.10000000000000009 },
f92ab29f 16212 { 10.417226071414344, 20.000000000000000, 5.0000000000000000,
7c62b943 16213 10.000000000000000, 0.19999999999999996 },
f92ab29f 16214 { 46.930585873140835, 20.000000000000000, 5.0000000000000000,
7c62b943 16215 10.000000000000000, 0.30000000000000004 },
f92ab29f 16216 { 290.76717121814852, 20.000000000000000, 5.0000000000000000,
7c62b943 16217 10.000000000000000, 0.39999999999999991 },
f92ab29f 16218 { 2788.1641083374830, 20.000000000000000, 5.0000000000000000,
7c62b943 16219 10.000000000000000, 0.50000000000000000 },
f92ab29f 16220 { 50228.117718560752, 20.000000000000000, 5.0000000000000000,
7c62b943 16221 10.000000000000000, 0.60000000000000009 },
f92ab29f 16222 { 2433042.3476752634, 20.000000000000000, 5.0000000000000000,
7c62b943 16223 10.000000000000000, 0.69999999999999996 },
f92ab29f 16224 { 705345246.77141762, 20.000000000000000, 5.0000000000000000,
7c62b943 16225 10.000000000000000, 0.80000000000000004 },
f92ab29f 16226 { 15652478868616.762, 20.000000000000000, 5.0000000000000000,
7c62b943
BK
16227 10.000000000000000, 0.89999999999999991 },
16228};
16229
16230// Test function for a=20.000000000000000, b=5.0000000000000000, c=10.000000000000000.
16231template <typename Tp>
16232void test235()
16233{
16234 const Tp eps = std::numeric_limits<Tp>::epsilon();
16235 Tp max_abs_diff = -Tp(1);
16236 Tp max_abs_frac = -Tp(1);
16237 unsigned int num_datum = sizeof(data235)
16238 / sizeof(testcase_hyperg<double>);
16239 for (unsigned int i = 0; i < num_datum; ++i)
16240 {
16241 const Tp f = std::tr1::hyperg(Tp(data235[i].a), Tp(data235[i].b),
16242 Tp(data235[i].c), Tp(data235[i].x));
16243 const Tp f0 = data235[i].f0;
16244 const Tp diff = f - f0;
16245 if (std::abs(diff) > max_abs_diff)
16246 max_abs_diff = std::abs(diff);
16247 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16248 {
16249 const Tp frac = diff / f0;
16250 if (std::abs(frac) > max_abs_frac)
16251 max_abs_frac = std::abs(frac);
16252 }
16253 }
16254 VERIFY(max_abs_frac < Tp(1.0000000000000008e-12));
16255}
16256
16257// Test data for a=20.000000000000000, b=10.000000000000000, c=2.0000000000000000.
16258testcase_hyperg<double> data236[] = {
f92ab29f 16259 { -2.1776535308707967e-07, 20.000000000000000, 10.000000000000000,
7c62b943 16260 2.0000000000000000, -0.90000000000000002 },
f92ab29f 16261 { -2.9128833151427998e-06, 20.000000000000000, 10.000000000000000,
7c62b943 16262 2.0000000000000000, -0.80000000000000004 },
f92ab29f 16263 { -9.4755553429035093e-06, 20.000000000000000, 10.000000000000000,
7c62b943 16264 2.0000000000000000, -0.69999999999999996 },
f92ab29f 16265 { -1.2844297353813116e-05, 20.000000000000000, 10.000000000000000,
7c62b943 16266 2.0000000000000000, -0.59999999999999998 },
f92ab29f 16267 { 3.6576965483568809e-05, 20.000000000000000, 10.000000000000000,
7c62b943 16268 2.0000000000000000, -0.50000000000000000 },
f92ab29f 16269 { 0.00020847453890692649, 20.000000000000000, 10.000000000000000,
7c62b943 16270 2.0000000000000000, -0.40000000000000002 },
f92ab29f 16271 { -0.00022868510398174632, 20.000000000000000, 10.000000000000000,
7c62b943 16272 2.0000000000000000, -0.30000000000000004 },
f92ab29f 16273 { -0.0021855513841942732, 20.000000000000000, 10.000000000000000,
7c62b943 16274 2.0000000000000000, -0.19999999999999996 },
f92ab29f 16275 { 0.014662111759334634, 20.000000000000000, 10.000000000000000,
7c62b943 16276 2.0000000000000000, -0.099999999999999978 },
f92ab29f 16277 { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
7c62b943 16278 2.0000000000000000, 0.0000000000000000 },
f92ab29f 16279 { 746.44776348798098, 20.000000000000000, 10.000000000000000,
7c62b943 16280 2.0000000000000000, 0.10000000000000009 },
f92ab29f 16281 { 136080.48445225612, 20.000000000000000, 10.000000000000000,
7c62b943 16282 2.0000000000000000, 0.19999999999999996 },
f92ab29f 16283 { 23094279.597826406, 20.000000000000000, 10.000000000000000,
7c62b943 16284 2.0000000000000000, 0.30000000000000004 },
f92ab29f 16285 { 5315913395.5545301, 20.000000000000000, 10.000000000000000,
7c62b943 16286 2.0000000000000000, 0.39999999999999991 },
f92ab29f 16287 { 2261935718399.9990, 20.000000000000000, 10.000000000000000,
7c62b943 16288 2.0000000000000000, 0.50000000000000000 },
f92ab29f 16289 { 2669150854828235.0, 20.000000000000000, 10.000000000000000,
7c62b943 16290 2.0000000000000000, 0.60000000000000009 },
f92ab29f 16291 { 1.7499363099365994e+19, 20.000000000000000, 10.000000000000000,
7c62b943 16292 2.0000000000000000, 0.69999999999999996 },
f92ab29f 16293 { 2.8881518494606140e+24, 20.000000000000000, 10.000000000000000,
7c62b943 16294 2.0000000000000000, 0.80000000000000004 },
f92ab29f 16295 { 1.4165513933661626e+33, 20.000000000000000, 10.000000000000000,
7c62b943
BK
16296 2.0000000000000000, 0.89999999999999991 },
16297};
16298
16299// Test function for a=20.000000000000000, b=10.000000000000000, c=2.0000000000000000.
16300template <typename Tp>
16301void test236()
16302{
16303 const Tp eps = std::numeric_limits<Tp>::epsilon();
16304 Tp max_abs_diff = -Tp(1);
16305 Tp max_abs_frac = -Tp(1);
16306 unsigned int num_datum = sizeof(data236)
16307 / sizeof(testcase_hyperg<double>);
16308 for (unsigned int i = 0; i < num_datum; ++i)
16309 {
16310 const Tp f = std::tr1::hyperg(Tp(data236[i].a), Tp(data236[i].b),
16311 Tp(data236[i].c), Tp(data236[i].x));
16312 const Tp f0 = data236[i].f0;
16313 const Tp diff = f - f0;
16314 if (std::abs(diff) > max_abs_diff)
16315 max_abs_diff = std::abs(diff);
16316 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16317 {
16318 const Tp frac = diff / f0;
16319 if (std::abs(frac) > max_abs_frac)
16320 max_abs_frac = std::abs(frac);
16321 }
16322 }
16323 VERIFY(max_abs_frac < Tp(1.0000000000000005e-08));
16324}
16325
16326// Test data for a=20.000000000000000, b=10.000000000000000, c=4.0000000000000000.
16327testcase_hyperg<double> data237[] = {
f92ab29f 16328 { 1.7149006973860441e-07, 20.000000000000000, 10.000000000000000,
7c62b943 16329 4.0000000000000000, -0.90000000000000002 },
f92ab29f 16330 { 3.2399324904088936e-07, 20.000000000000000, 10.000000000000000,
7c62b943 16331 4.0000000000000000, -0.80000000000000004 },
f92ab29f 16332 { 1.6015317712089860e-07, 20.000000000000000, 10.000000000000000,
7c62b943 16333 4.0000000000000000, -0.69999999999999996 },
f92ab29f 16334 { -2.0500917204199595e-06, 20.000000000000000, 10.000000000000000,
7c62b943 16335 4.0000000000000000, -0.59999999999999998 },
f92ab29f 16336 { -1.0175546788599472e-05, 20.000000000000000, 10.000000000000000,
7c62b943 16337 4.0000000000000000, -0.50000000000000000 },
f92ab29f 16338 { -1.1720101988202453e-05, 20.000000000000000, 10.000000000000000,
7c62b943 16339 4.0000000000000000, -0.40000000000000002 },
f92ab29f 16340 { 0.00014199637113974185, 20.000000000000000, 10.000000000000000,
7c62b943 16341 4.0000000000000000, -0.30000000000000004 },
f92ab29f 16342 { 0.00021263363640642297, 20.000000000000000, 10.000000000000000,
7c62b943 16343 4.0000000000000000, -0.19999999999999996 },
f92ab29f 16344 { -0.0072649256698441751, 20.000000000000000, 10.000000000000000,
7c62b943 16345 4.0000000000000000, -0.099999999999999978 },
f92ab29f 16346 { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
7c62b943 16347 4.0000000000000000, 0.0000000000000000 },
f92ab29f 16348 { 90.430293772869618, 20.000000000000000, 10.000000000000000,
7c62b943 16349 4.0000000000000000, 0.10000000000000009 },
f92ab29f 16350 { 6248.1455940292308, 20.000000000000000, 10.000000000000000,
7c62b943 16351 4.0000000000000000, 0.19999999999999996 },
f92ab29f 16352 { 501143.39852548984, 20.000000000000000, 10.000000000000000,
7c62b943 16353 4.0000000000000000, 0.30000000000000004 },
f92ab29f 16354 { 58852027.356439680, 20.000000000000000, 10.000000000000000,
7c62b943 16355 4.0000000000000000, 0.39999999999999991 },
f92ab29f 16356 { 12942923093.333330, 20.000000000000000, 10.000000000000000,
7c62b943 16357 4.0000000000000000, 0.50000000000000000 },
f92ab29f 16358 { 7618073993853.6592, 20.000000000000000, 10.000000000000000,
7c62b943 16359 4.0000000000000000, 0.60000000000000009 },
f92ab29f 16360 { 22630251562549288., 20.000000000000000, 10.000000000000000,
7c62b943 16361 4.0000000000000000, 0.69999999999999996 },
f92ab29f 16362 { 1.3708372433980356e+21, 20.000000000000000, 10.000000000000000,
7c62b943 16363 4.0000000000000000, 0.80000000000000004 },
f92ab29f 16364 { 1.4154113619999653e+29, 20.000000000000000, 10.000000000000000,
7c62b943
BK
16365 4.0000000000000000, 0.89999999999999991 },
16366};
16367
16368// Test function for a=20.000000000000000, b=10.000000000000000, c=4.0000000000000000.
16369template <typename Tp>
16370void test237()
16371{
16372 const Tp eps = std::numeric_limits<Tp>::epsilon();
16373 Tp max_abs_diff = -Tp(1);
16374 Tp max_abs_frac = -Tp(1);
16375 unsigned int num_datum = sizeof(data237)
16376 / sizeof(testcase_hyperg<double>);
16377 for (unsigned int i = 0; i < num_datum; ++i)
16378 {
16379 const Tp f = std::tr1::hyperg(Tp(data237[i].a), Tp(data237[i].b),
16380 Tp(data237[i].c), Tp(data237[i].x));
16381 const Tp f0 = data237[i].f0;
16382 const Tp diff = f - f0;
16383 if (std::abs(diff) > max_abs_diff)
16384 max_abs_diff = std::abs(diff);
16385 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16386 {
16387 const Tp frac = diff / f0;
16388 if (std::abs(frac) > max_abs_frac)
16389 max_abs_frac = std::abs(frac);
16390 }
16391 }
16392 VERIFY(max_abs_frac < Tp(5.0000000000000024e-08));
16393}
16394
16395// Test data for a=20.000000000000000, b=10.000000000000000, c=6.0000000000000000.
16396testcase_hyperg<double> data238[] = {
f92ab29f 16397 { -1.6667473370780257e-08, 20.000000000000000, 10.000000000000000,
7c62b943 16398 6.0000000000000000, -0.90000000000000002 },
f92ab29f 16399 { 8.6214844067774863e-08, 20.000000000000000, 10.000000000000000,
7c62b943 16400 6.0000000000000000, -0.80000000000000004 },
f92ab29f 16401 { 5.7778331238835108e-07, 20.000000000000000, 10.000000000000000,
7c62b943 16402 6.0000000000000000, -0.69999999999999996 },
f92ab29f 16403 { 2.1911400500362969e-06, 20.000000000000000, 10.000000000000000,
7c62b943 16404 6.0000000000000000, -0.59999999999999998 },
f92ab29f 16405 { 4.7440049217100417e-06, 20.000000000000000, 10.000000000000000,
7c62b943 16406 6.0000000000000000, -0.50000000000000000 },
f92ab29f 16407 { -1.0564233314924258e-05, 20.000000000000000, 10.000000000000000,
7c62b943 16408 6.0000000000000000, -0.40000000000000002 },
f92ab29f 16409 { -0.00017990026051856349, 20.000000000000000, 10.000000000000000,
7c62b943 16410 6.0000000000000000, -0.30000000000000004 },
f92ab29f 16411 { -0.00027618146288744351, 20.000000000000000, 10.000000000000000,
7c62b943 16412 6.0000000000000000, -0.19999999999999996 },
f92ab29f 16413 { 0.030606019577723392, 20.000000000000000, 10.000000000000000,
7c62b943 16414 6.0000000000000000, -0.099999999999999978 },
f92ab29f 16415 { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
7c62b943 16416 6.0000000000000000, 0.0000000000000000 },
f92ab29f 16417 { 27.832854169493341, 20.000000000000000, 10.000000000000000,
7c62b943 16418 6.0000000000000000, 0.10000000000000009 },
f92ab29f 16419 { 874.00624088575228, 20.000000000000000, 10.000000000000000,
7c62b943 16420 6.0000000000000000, 0.19999999999999996 },
f92ab29f 16421 { 36049.199340831554, 20.000000000000000, 10.000000000000000,
7c62b943 16422 6.0000000000000000, 0.30000000000000004 },
f92ab29f 16423 { 2270967.7298624986, 20.000000000000000, 10.000000000000000,
7c62b943 16424 6.0000000000000000, 0.39999999999999991 },
f92ab29f 16425 { 266979100.44444439, 20.000000000000000, 10.000000000000000,
7c62b943 16426 6.0000000000000000, 0.50000000000000000 },
f92ab29f 16427 { 80311224337.493027, 20.000000000000000, 10.000000000000000,
7c62b943 16428 6.0000000000000000, 0.60000000000000009 },
f92ab29f 16429 { 110111693103799.72, 20.000000000000000, 10.000000000000000,
7c62b943 16430 6.0000000000000000, 0.69999999999999996 },
f92ab29f 16431 { 2.4838871426052618e+18, 20.000000000000000, 10.000000000000000,
7c62b943 16432 6.0000000000000000, 0.80000000000000004 },
f92ab29f 16433 { 5.4626349999998603e+25, 20.000000000000000, 10.000000000000000,
7c62b943
BK
16434 6.0000000000000000, 0.89999999999999991 },
16435};
16436
16437// Test function for a=20.000000000000000, b=10.000000000000000, c=6.0000000000000000.
16438template <typename Tp>
16439void test238()
16440{
16441 const Tp eps = std::numeric_limits<Tp>::epsilon();
16442 Tp max_abs_diff = -Tp(1);
16443 Tp max_abs_frac = -Tp(1);
16444 unsigned int num_datum = sizeof(data238)
16445 / sizeof(testcase_hyperg<double>);
16446 for (unsigned int i = 0; i < num_datum; ++i)
16447 {
16448 const Tp f = std::tr1::hyperg(Tp(data238[i].a), Tp(data238[i].b),
16449 Tp(data238[i].c), Tp(data238[i].x));
16450 const Tp f0 = data238[i].f0;
16451 const Tp diff = f - f0;
16452 if (std::abs(diff) > max_abs_diff)
16453 max_abs_diff = std::abs(diff);
16454 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16455 {
16456 const Tp frac = diff / f0;
16457 if (std::abs(frac) > max_abs_frac)
16458 max_abs_frac = std::abs(frac);
16459 }
16460 }
16461 VERIFY(max_abs_frac < Tp(5.0000000000000019e-07));
16462}
16463
16464// Test data for a=20.000000000000000, b=10.000000000000000, c=8.0000000000000000.
16465testcase_hyperg<double> data239[] = {
f92ab29f 16466 { -1.5843795893321480e-07, 20.000000000000000, 10.000000000000000,
7c62b943 16467 8.0000000000000000, -0.90000000000000002 },
f92ab29f 16468 { -5.4877275994033766e-07, 20.000000000000000, 10.000000000000000,
7c62b943 16469 8.0000000000000000, -0.80000000000000004 },
f92ab29f 16470 { -1.7169507967745992e-06, 20.000000000000000, 10.000000000000000,
7c62b943 16471 8.0000000000000000, -0.69999999999999996 },
f92ab29f 16472 { -4.5236439748752000e-06, 20.000000000000000, 10.000000000000000,
7c62b943 16473 8.0000000000000000, -0.59999999999999998 },
f92ab29f 16474 { -5.5690492560325806e-06, 20.000000000000000, 10.000000000000000,
7c62b943 16475 8.0000000000000000, -0.50000000000000000 },
f92ab29f 16476 { 5.6914115606934911e-05, 20.000000000000000, 10.000000000000000,
7c62b943 16477 8.0000000000000000, -0.40000000000000002 },
f92ab29f 16478 { 0.00082507252097519922, 20.000000000000000, 10.000000000000000,
7c62b943 16479 8.0000000000000000, -0.30000000000000004 },
f92ab29f 16480 { 0.0085739249288229857, 20.000000000000000, 10.000000000000000,
7c62b943 16481 8.0000000000000000, -0.19999999999999996 },
f92ab29f 16482 { 0.088244357683754757, 20.000000000000000, 10.000000000000000,
7c62b943 16483 8.0000000000000000, -0.099999999999999978 },
f92ab29f 16484 { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
7c62b943 16485 8.0000000000000000, 0.0000000000000000 },
f92ab29f 16486 { 13.387208440156897, 20.000000000000000, 10.000000000000000,
7c62b943 16487 8.0000000000000000, 0.10000000000000009 },
f92ab29f 16488 { 226.77895441155110, 20.000000000000000, 10.000000000000000,
7c62b943 16489 8.0000000000000000, 0.19999999999999996 },
f92ab29f 16490 { 5281.5716482686785, 20.000000000000000, 10.000000000000000,
7c62b943 16491 8.0000000000000000, 0.30000000000000004 },
f92ab29f 16492 { 189431.77762850464, 20.000000000000000, 10.000000000000000,
7c62b943 16493 8.0000000000000000, 0.39999999999999991 },
f92ab29f 16494 { 12408149.333333332, 20.000000000000000, 10.000000000000000,
7c62b943 16495 8.0000000000000000, 0.50000000000000000 },
f92ab29f 16496 { 1966782292.5839682, 20.000000000000000, 10.000000000000000,
7c62b943 16497 8.0000000000000000, 0.60000000000000009 },
f92ab29f 16498 { 1274123112205.7495, 20.000000000000000, 10.000000000000000,
7c62b943 16499 8.0000000000000000, 0.69999999999999996 },
f92ab29f 16500 { 10903676350911508., 20.000000000000000, 10.000000000000000,
7c62b943 16501 8.0000000000000000, 0.80000000000000004 },
f92ab29f 16502 { 5.1849999999998819e+22, 20.000000000000000, 10.000000000000000,
7c62b943
BK
16503 8.0000000000000000, 0.89999999999999991 },
16504};
16505
16506// Test function for a=20.000000000000000, b=10.000000000000000, c=8.0000000000000000.
16507template <typename Tp>
16508void test239()
16509{
16510 const Tp eps = std::numeric_limits<Tp>::epsilon();
16511 Tp max_abs_diff = -Tp(1);
16512 Tp max_abs_frac = -Tp(1);
16513 unsigned int num_datum = sizeof(data239)
16514 / sizeof(testcase_hyperg<double>);
16515 for (unsigned int i = 0; i < num_datum; ++i)
16516 {
16517 const Tp f = std::tr1::hyperg(Tp(data239[i].a), Tp(data239[i].b),
16518 Tp(data239[i].c), Tp(data239[i].x));
16519 const Tp f0 = data239[i].f0;
16520 const Tp diff = f - f0;
16521 if (std::abs(diff) > max_abs_diff)
16522 max_abs_diff = std::abs(diff);
16523 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16524 {
16525 const Tp frac = diff / f0;
16526 if (std::abs(frac) > max_abs_frac)
16527 max_abs_frac = std::abs(frac);
16528 }
16529 }
16530 VERIFY(max_abs_frac < Tp(2.5000000000000012e-08));
16531}
16532
16533// Test data for a=20.000000000000000, b=10.000000000000000, c=10.000000000000000.
16534testcase_hyperg<double> data240[] = {
f92ab29f 16535 { 2.6602838683283435e-06, 20.000000000000000, 10.000000000000000,
7c62b943 16536 10.000000000000000, -0.90000000000000002 },
f92ab29f 16537 { 7.8442223930072316e-06, 20.000000000000000, 10.000000000000000,
7c62b943 16538 10.000000000000000, -0.80000000000000004 },
f92ab29f 16539 { 2.4604898194634598e-05, 20.000000000000000, 10.000000000000000,
7c62b943 16540 10.000000000000000, -0.69999999999999996 },
f92ab29f 16541 { 8.2718061255302686e-05, 20.000000000000000, 10.000000000000000,
7c62b943 16542 10.000000000000000, -0.59999999999999998 },
f92ab29f 16543 { 0.00030072865982171723, 20.000000000000000, 10.000000000000000,
7c62b943 16544 10.000000000000000, -0.50000000000000000 },
f92ab29f 16545 { 0.0011951964277455193, 20.000000000000000, 10.000000000000000,
7c62b943 16546 10.000000000000000, -0.40000000000000002 },
f92ab29f 16547 { 0.0052617832469731814, 20.000000000000000, 10.000000000000000,
7c62b943 16548 10.000000000000000, -0.30000000000000004 },
f92ab29f 16549 { 0.026084053304588847, 20.000000000000000, 10.000000000000000,
7c62b943 16550 10.000000000000000, -0.19999999999999996 },
f92ab29f 16551 { 0.14864362802414346, 20.000000000000000, 10.000000000000000,
7c62b943 16552 10.000000000000000, -0.099999999999999978 },
f92ab29f 16553 { 1.0000000000000000, 20.000000000000000, 10.000000000000000,
7c62b943 16554 10.000000000000000, 0.0000000000000000 },
f92ab29f 16555 { 8.2252633399699757, 20.000000000000000, 10.000000000000000,
7c62b943 16556 10.000000000000000, 0.10000000000000009 },
f92ab29f 16557 { 86.736173798840269, 20.000000000000000, 10.000000000000000,
7c62b943 16558 10.000000000000000, 0.19999999999999996 },
f92ab29f 16559 { 1253.2542894196865, 20.000000000000000, 10.000000000000000,
7c62b943 16560 10.000000000000000, 0.30000000000000004 },
f92ab29f 16561 { 27351.112277912434, 20.000000000000000, 10.000000000000000,
7c62b943 16562 10.000000000000000, 0.39999999999999991 },
f92ab29f 16563 { 1048576.0000000000, 20.000000000000000, 10.000000000000000,
7c62b943 16564 10.000000000000000, 0.50000000000000000 },
f92ab29f 16565 { 90949470.177293226, 20.000000000000000, 10.000000000000000,
7c62b943 16566 10.000000000000000, 0.60000000000000009 },
f92ab29f 16567 { 28679719907.924358, 20.000000000000000, 10.000000000000000,
7c62b943 16568 10.000000000000000, 0.69999999999999996 },
f92ab29f 16569 { 95367431640624.906, 20.000000000000000, 10.000000000000000,
7c62b943 16570 10.000000000000000, 0.80000000000000004 },
f92ab29f 16571 { 9.9999999999998657e+19, 20.000000000000000, 10.000000000000000,
7c62b943
BK
16572 10.000000000000000, 0.89999999999999991 },
16573};
16574
16575// Test function for a=20.000000000000000, b=10.000000000000000, c=10.000000000000000.
16576template <typename Tp>
16577void test240()
16578{
16579 const Tp eps = std::numeric_limits<Tp>::epsilon();
16580 Tp max_abs_diff = -Tp(1);
16581 Tp max_abs_frac = -Tp(1);
16582 unsigned int num_datum = sizeof(data240)
16583 / sizeof(testcase_hyperg<double>);
16584 for (unsigned int i = 0; i < num_datum; ++i)
16585 {
16586 const Tp f = std::tr1::hyperg(Tp(data240[i].a), Tp(data240[i].b),
16587 Tp(data240[i].c), Tp(data240[i].x));
16588 const Tp f0 = data240[i].f0;
16589 const Tp diff = f - f0;
16590 if (std::abs(diff) > max_abs_diff)
16591 max_abs_diff = std::abs(diff);
16592 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16593 {
16594 const Tp frac = diff / f0;
16595 if (std::abs(frac) > max_abs_frac)
16596 max_abs_frac = std::abs(frac);
16597 }
16598 }
16599 VERIFY(max_abs_frac < Tp(5.0000000000000039e-13));
16600}
16601
16602// Test data for a=20.000000000000000, b=20.000000000000000, c=2.0000000000000000.
16603testcase_hyperg<double> data241[] = {
f92ab29f 16604 { 7.4612991101768883e-09, 20.000000000000000, 20.000000000000000,
7c62b943 16605 2.0000000000000000, -0.90000000000000002 },
f92ab29f 16606 { 1.1006588946889981e-07, 20.000000000000000, 20.000000000000000,
7c62b943 16607 2.0000000000000000, -0.80000000000000004 },
f92ab29f 16608 { 2.0126933743389316e-07, 20.000000000000000, 20.000000000000000,
7c62b943 16609 2.0000000000000000, -0.69999999999999996 },
f92ab29f 16610 { -1.0013775379801016e-06, 20.000000000000000, 20.000000000000000,
7c62b943 16611 2.0000000000000000, -0.59999999999999998 },
f92ab29f 16612 { -3.0371956856472516e-06, 20.000000000000000, 20.000000000000000,
7c62b943 16613 2.0000000000000000, -0.50000000000000000 },
f92ab29f 16614 { 2.2012669924527286e-05, 20.000000000000000, 20.000000000000000,
7c62b943 16615 2.0000000000000000, -0.40000000000000002 },
f92ab29f 16616 { -6.2415598025417670e-05, 20.000000000000000, 20.000000000000000,
7c62b943 16617 2.0000000000000000, -0.30000000000000004 },
f92ab29f 16618 { 0.00033551320394378602, 20.000000000000000, 20.000000000000000,
7c62b943 16619 2.0000000000000000, -0.19999999999999996 },
f92ab29f 16620 { -0.0062342152641436353, 20.000000000000000, 20.000000000000000,
7c62b943 16621 2.0000000000000000, -0.099999999999999978 },
f92ab29f 16622 { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
7c62b943 16623 2.0000000000000000, 0.0000000000000000 },
f92ab29f 16624 { 34830.688900741610, 20.000000000000000, 20.000000000000000,
7c62b943 16625 2.0000000000000000, 0.10000000000000009 },
f92ab29f 16626 { 67626221.263030857, 20.000000000000000, 20.000000000000000,
7c62b943 16627 2.0000000000000000, 0.19999999999999996 },
f92ab29f 16628 { 102764604848.69762, 20.000000000000000, 20.000000000000000,
7c62b943 16629 2.0000000000000000, 0.30000000000000004 },
f92ab29f 16630 { 220278355222373.38, 20.000000000000000, 20.000000000000000,
7c62b943 16631 2.0000000000000000, 0.39999999999999991 },
f92ab29f 16632 { 1.0422324699794536e+18, 20.000000000000000, 20.000000000000000,
7c62b943 16633 2.0000000000000000, 0.50000000000000000 },
f92ab29f 16634 { 1.9128731788368004e+22, 20.000000000000000, 20.000000000000000,
7c62b943 16635 2.0000000000000000, 0.60000000000000009 },
f92ab29f 16636 { 3.5234592919485287e+27, 20.000000000000000, 20.000000000000000,
7c62b943 16637 2.0000000000000000, 0.69999999999999996 },
f92ab29f 16638 { 5.0867023209025249e+34, 20.000000000000000, 20.000000000000000,
7c62b943 16639 2.0000000000000000, 0.80000000000000004 },
f92ab29f 16640 { 3.7461088506658564e+46, 20.000000000000000, 20.000000000000000,
7c62b943
BK
16641 2.0000000000000000, 0.89999999999999991 },
16642};
16643
16644// Test function for a=20.000000000000000, b=20.000000000000000, c=2.0000000000000000.
16645template <typename Tp>
16646void test241()
16647{
16648 const Tp eps = std::numeric_limits<Tp>::epsilon();
16649 Tp max_abs_diff = -Tp(1);
16650 Tp max_abs_frac = -Tp(1);
16651 unsigned int num_datum = sizeof(data241)
16652 / sizeof(testcase_hyperg<double>);
16653 for (unsigned int i = 0; i < num_datum; ++i)
16654 {
16655 const Tp f = std::tr1::hyperg(Tp(data241[i].a), Tp(data241[i].b),
16656 Tp(data241[i].c), Tp(data241[i].x));
16657 const Tp f0 = data241[i].f0;
16658 const Tp diff = f - f0;
16659 if (std::abs(diff) > max_abs_diff)
16660 max_abs_diff = std::abs(diff);
16661 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16662 {
16663 const Tp frac = diff / f0;
16664 if (std::abs(frac) > max_abs_frac)
16665 max_abs_frac = std::abs(frac);
16666 }
16667 }
16668 VERIFY(max_abs_frac < Tp(1.0000000000000005e-07));
16669}
16670
16671// Test data for a=20.000000000000000, b=20.000000000000000, c=4.0000000000000000.
16672testcase_hyperg<double> data242[] = {
f92ab29f 16673 { -1.5895900796973045e-09, 20.000000000000000, 20.000000000000000,
7c62b943 16674 4.0000000000000000, -0.90000000000000002 },
f92ab29f 16675 { -2.4403576837293198e-09, 20.000000000000000, 20.000000000000000,
7c62b943 16676 4.0000000000000000, -0.80000000000000004 },
f92ab29f 16677 { 1.1622915290732117e-08, 20.000000000000000, 20.000000000000000,
7c62b943 16678 4.0000000000000000, -0.69999999999999996 },
f92ab29f 16679 { 6.3899796307731726e-08, 20.000000000000000, 20.000000000000000,
7c62b943 16680 4.0000000000000000, -0.59999999999999998 },
f92ab29f 16681 { -1.3503608352807462e-07, 20.000000000000000, 20.000000000000000,
7c62b943 16682 4.0000000000000000, -0.50000000000000000 },
f92ab29f 16683 { -1.2198533623899163e-06, 20.000000000000000, 20.000000000000000,
7c62b943 16684 4.0000000000000000, -0.40000000000000002 },
f92ab29f 16685 { 9.9086618119129001e-06, 20.000000000000000, 20.000000000000000,
7c62b943 16686 4.0000000000000000, -0.30000000000000004 },
f92ab29f 16687 { -7.6797020080162010e-05, 20.000000000000000, 20.000000000000000,
7c62b943 16688 4.0000000000000000, -0.19999999999999996 },
f92ab29f 16689 { 0.0013196405087170875, 20.000000000000000, 20.000000000000000,
7c62b943 16690 4.0000000000000000, -0.099999999999999978 },
f92ab29f 16691 { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
7c62b943 16692 4.0000000000000000, 0.0000000000000000 },
f92ab29f 16693 { 2274.2044768143564, 20.000000000000000, 20.000000000000000,
7c62b943 16694 4.0000000000000000, 0.10000000000000009 },
f92ab29f 16695 { 1611640.1560475440, 20.000000000000000, 20.000000000000000,
7c62b943 16696 4.0000000000000000, 0.19999999999999996 },
f92ab29f 16697 { 1147063984.7359734, 20.000000000000000, 20.000000000000000,
7c62b943 16698 4.0000000000000000, 0.30000000000000004 },
f92ab29f 16699 { 1253162497163.8311, 20.000000000000000, 20.000000000000000,
7c62b943 16700 4.0000000000000000, 0.39999999999999991 },
f92ab29f 16701 { 3071321673390476.0, 20.000000000000000, 20.000000000000000,
7c62b943 16702 4.0000000000000000, 0.50000000000000000 },
f92ab29f 16703 { 2.8221123559124324e+19, 20.000000000000000, 20.000000000000000,
7c62b943 16704 4.0000000000000000, 0.60000000000000009 },
f92ab29f 16705 { 2.3658463807419519e+24, 20.000000000000000, 20.000000000000000,
7c62b943 16706 4.0000000000000000, 0.69999999999999996 },
f92ab29f 16707 { 1.2596553731345468e+31, 20.000000000000000, 20.000000000000000,
7c62b943 16708 4.0000000000000000, 0.80000000000000004 },
f92ab29f 16709 { 1.9627175792062075e+42, 20.000000000000000, 20.000000000000000,
7c62b943
BK
16710 4.0000000000000000, 0.89999999999999991 },
16711};
16712
16713// Test function for a=20.000000000000000, b=20.000000000000000, c=4.0000000000000000.
16714template <typename Tp>
16715void test242()
16716{
16717 const Tp eps = std::numeric_limits<Tp>::epsilon();
16718 Tp max_abs_diff = -Tp(1);
16719 Tp max_abs_frac = -Tp(1);
16720 unsigned int num_datum = sizeof(data242)
16721 / sizeof(testcase_hyperg<double>);
16722 for (unsigned int i = 0; i < num_datum; ++i)
16723 {
16724 const Tp f = std::tr1::hyperg(Tp(data242[i].a), Tp(data242[i].b),
16725 Tp(data242[i].c), Tp(data242[i].x));
16726 const Tp f0 = data242[i].f0;
16727 const Tp diff = f - f0;
16728 if (std::abs(diff) > max_abs_diff)
16729 max_abs_diff = std::abs(diff);
16730 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16731 {
16732 const Tp frac = diff / f0;
16733 if (std::abs(frac) > max_abs_frac)
16734 max_abs_frac = std::abs(frac);
16735 }
16736 }
16737 VERIFY(max_abs_frac < Tp(2.5000000000000006e-06));
16738}
16739
16740// Test data for a=20.000000000000000, b=20.000000000000000, c=6.0000000000000000.
16741testcase_hyperg<double> data243[] = {
f92ab29f 16742 { 8.0159808156941562e-11, 20.000000000000000, 20.000000000000000,
7c62b943 16743 6.0000000000000000, -0.90000000000000002 },
f92ab29f 16744 { -6.4422687845093557e-10, 20.000000000000000, 20.000000000000000,
7c62b943 16745 6.0000000000000000, -0.80000000000000004 },
f92ab29f 16746 { -3.7526134186308981e-09, 20.000000000000000, 20.000000000000000,
7c62b943 16747 6.0000000000000000, -0.69999999999999996 },
f92ab29f 16748 { -1.7692034167897114e-09, 20.000000000000000, 20.000000000000000,
7c62b943 16749 6.0000000000000000, -0.59999999999999998 },
f92ab29f 16750 { 7.9304558772837909e-08, 20.000000000000000, 20.000000000000000,
7c62b943 16751 6.0000000000000000, -0.50000000000000000 },
f92ab29f 16752 { 5.9348070318594204e-08, 20.000000000000000, 20.000000000000000,
7c62b943 16753 6.0000000000000000, -0.40000000000000002 },
f92ab29f 16754 { -3.5827694517425210e-06, 20.000000000000000, 20.000000000000000,
7c62b943 16755 6.0000000000000000, -0.30000000000000004 },
f92ab29f 16756 { 4.4951490418284159e-05, 20.000000000000000, 20.000000000000000,
7c62b943 16757 6.0000000000000000, -0.19999999999999996 },
f92ab29f 16758 { -0.0013716249406310486, 20.000000000000000, 20.000000000000000,
7c62b943 16759 6.0000000000000000, -0.099999999999999978 },
f92ab29f 16760 { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
7c62b943 16761 6.0000000000000000, 0.0000000000000000 },
f92ab29f 16762 { 415.32493304415505, 20.000000000000000, 20.000000000000000,
7c62b943 16763 6.0000000000000000, 0.10000000000000009 },
f92ab29f 16764 { 121300.42991518594, 20.000000000000000, 20.000000000000000,
7c62b943 16765 6.0000000000000000, 0.19999999999999996 },
f92ab29f 16766 { 42725673.833462097, 20.000000000000000, 20.000000000000000,
7c62b943 16767 6.0000000000000000, 0.30000000000000004 },
f92ab29f 16768 { 24588915328.261719, 20.000000000000000, 20.000000000000000,
7c62b943 16769 6.0000000000000000, 0.39999999999999991 },
f92ab29f 16770 { 31929082412503.652, 20.000000000000000, 20.000000000000000,
7c62b943 16771 6.0000000000000000, 0.50000000000000000 },
f92ab29f 16772 { 1.4934954443280477e+17, 20.000000000000000, 20.000000000000000,
7c62b943 16773 6.0000000000000000, 0.60000000000000009 },
f92ab29f 16774 { 5.7726220597696125e+21, 20.000000000000000, 20.000000000000000,
7c62b943 16775 6.0000000000000000, 0.69999999999999996 },
f92ab29f 16776 { 1.1454387824049374e+28, 20.000000000000000, 20.000000000000000,
7c62b943 16777 6.0000000000000000, 0.80000000000000004 },
f92ab29f 16778 { 3.8088637321581534e+38, 20.000000000000000, 20.000000000000000,
7c62b943
BK
16779 6.0000000000000000, 0.89999999999999991 },
16780};
16781
16782// Test function for a=20.000000000000000, b=20.000000000000000, c=6.0000000000000000.
16783template <typename Tp>
16784void test243()
16785{
16786 const Tp eps = std::numeric_limits<Tp>::epsilon();
16787 Tp max_abs_diff = -Tp(1);
16788 Tp max_abs_frac = -Tp(1);
16789 unsigned int num_datum = sizeof(data243)
16790 / sizeof(testcase_hyperg<double>);
16791 for (unsigned int i = 0; i < num_datum; ++i)
16792 {
16793 const Tp f = std::tr1::hyperg(Tp(data243[i].a), Tp(data243[i].b),
16794 Tp(data243[i].c), Tp(data243[i].x));
16795 const Tp f0 = data243[i].f0;
16796 const Tp diff = f - f0;
16797 if (std::abs(diff) > max_abs_diff)
16798 max_abs_diff = std::abs(diff);
16799 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16800 {
16801 const Tp frac = diff / f0;
16802 if (std::abs(frac) > max_abs_frac)
16803 max_abs_frac = std::abs(frac);
16804 }
16805 }
16806 VERIFY(max_abs_frac < Tp(2.5000000000000005e-05));
16807}
16808
16809// Test data for a=20.000000000000000, b=20.000000000000000, c=8.0000000000000000.
16810testcase_hyperg<double> data244[] = {
f92ab29f 16811 { 1.0699072529874453e-10, 20.000000000000000, 20.000000000000000,
7c62b943 16812 8.0000000000000000, -0.90000000000000002 },
f92ab29f 16813 { 5.4297753417228627e-10, 20.000000000000000, 20.000000000000000,
7c62b943 16814 8.0000000000000000, -0.80000000000000004 },
f92ab29f 16815 { 9.7625471266824426e-10, 20.000000000000000, 20.000000000000000,
7c62b943 16816 8.0000000000000000, -0.69999999999999996 },
f92ab29f 16817 { -6.7257762867770348e-09, 20.000000000000000, 20.000000000000000,
7c62b943 16818 8.0000000000000000, -0.59999999999999998 },
f92ab29f 16819 { -5.4634571496175302e-08, 20.000000000000000, 20.000000000000000,
7c62b943 16820 8.0000000000000000, -0.50000000000000000 },
f92ab29f 16821 { 1.4595644213893387e-07, 20.000000000000000, 20.000000000000000,
7c62b943 16822 8.0000000000000000, -0.40000000000000002 },
f92ab29f 16823 { 3.3515966497049909e-06, 20.000000000000000, 20.000000000000000,
7c62b943 16824 8.0000000000000000, -0.30000000000000004 },
f92ab29f 16825 { -6.5848086985914887e-05, 20.000000000000000, 20.000000000000000,
7c62b943 16826 8.0000000000000000, -0.19999999999999996 },
f92ab29f 16827 { 0.0034800171306214813, 20.000000000000000, 20.000000000000000,
7c62b943 16828 8.0000000000000000, -0.099999999999999978 },
f92ab29f 16829 { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
7c62b943 16830 8.0000000000000000, 0.0000000000000000 },
f92ab29f 16831 { 130.93865856750304, 20.000000000000000, 20.000000000000000,
7c62b943 16832 8.0000000000000000, 0.10000000000000009 },
f92ab29f 16833 { 17850.203502975532, 20.000000000000000, 20.000000000000000,
7c62b943 16834 8.0000000000000000, 0.19999999999999996 },
f92ab29f 16835 { 3307058.5655149994, 20.000000000000000, 20.000000000000000,
7c62b943 16836 8.0000000000000000, 0.30000000000000004 },
f92ab29f 16837 { 1041065396.2302787, 20.000000000000000, 20.000000000000000,
7c62b943 16838 8.0000000000000000, 0.39999999999999991 },
f92ab29f 16839 { 735221357488.41736, 20.000000000000000, 20.000000000000000,
7c62b943 16840 8.0000000000000000, 0.50000000000000000 },
f92ab29f 16841 { 1785176805049585.2, 20.000000000000000, 20.000000000000000,
7c62b943 16842 8.0000000000000000, 0.60000000000000009 },
f92ab29f 16843 { 3.2302829930269192e+19, 20.000000000000000, 20.000000000000000,
7c62b943 16844 8.0000000000000000, 0.69999999999999996 },
f92ab29f 16845 { 2.4184909805178299e+25, 20.000000000000000, 20.000000000000000,
7c62b943 16846 8.0000000000000000, 0.80000000000000004 },
f92ab29f 16847 { 1.7340021007794567e+35, 20.000000000000000, 20.000000000000000,
7c62b943
BK
16848 8.0000000000000000, 0.89999999999999991 },
16849};
16850
16851// Test function for a=20.000000000000000, b=20.000000000000000, c=8.0000000000000000.
16852template <typename Tp>
16853void test244()
16854{
16855 const Tp eps = std::numeric_limits<Tp>::epsilon();
16856 Tp max_abs_diff = -Tp(1);
16857 Tp max_abs_frac = -Tp(1);
16858 unsigned int num_datum = sizeof(data244)
16859 / sizeof(testcase_hyperg<double>);
16860 for (unsigned int i = 0; i < num_datum; ++i)
16861 {
16862 const Tp f = std::tr1::hyperg(Tp(data244[i].a), Tp(data244[i].b),
16863 Tp(data244[i].c), Tp(data244[i].x));
16864 const Tp f0 = data244[i].f0;
16865 const Tp diff = f - f0;
16866 if (std::abs(diff) > max_abs_diff)
16867 max_abs_diff = std::abs(diff);
16868 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16869 {
16870 const Tp frac = diff / f0;
16871 if (std::abs(frac) > max_abs_frac)
16872 max_abs_frac = std::abs(frac);
16873 }
16874 }
16875 VERIFY(max_abs_frac < Tp(2.5000000000000005e-05));
16876}
16877
16878// Test data for a=20.000000000000000, b=20.000000000000000, c=10.000000000000000.
16879testcase_hyperg<double> data245[] = {
f92ab29f 16880 { -1.7945363894141429e-10, 20.000000000000000, 20.000000000000000,
7c62b943 16881 10.000000000000000, -0.90000000000000002 },
f92ab29f 16882 { -4.4440666675421800e-10, 20.000000000000000, 20.000000000000000,
7c62b943 16883 10.000000000000000, -0.80000000000000004 },
f92ab29f 16884 { 6.6171630913717945e-10, 20.000000000000000, 20.000000000000000,
7c62b943 16885 10.000000000000000, -0.69999999999999996 },
f92ab29f 16886 { 1.5453889642199650e-08, 20.000000000000000, 20.000000000000000,
7c62b943 16887 10.000000000000000, -0.59999999999999998 },
f92ab29f 16888 { 7.5754083860094422e-08, 20.000000000000000, 20.000000000000000,
7c62b943 16889 10.000000000000000, -0.50000000000000000 },
f92ab29f 16890 { -4.1113628639873710e-07, 20.000000000000000, 20.000000000000000,
7c62b943 16891 10.000000000000000, -0.40000000000000002 },
f92ab29f 16892 { -9.5300704265214247e-06, 20.000000000000000, 20.000000000000000,
7c62b943 16893 10.000000000000000, -0.30000000000000004 },
f92ab29f 16894 { 0.00016081533175785109, 20.000000000000000, 20.000000000000000,
7c62b943 16895 10.000000000000000, -0.19999999999999996 },
f92ab29f 16896 { 0.017684650940379486, 20.000000000000000, 20.000000000000000,
7c62b943 16897 10.000000000000000, -0.099999999999999978 },
f92ab29f 16898 { 1.0000000000000000, 20.000000000000000, 20.000000000000000,
7c62b943 16899 10.000000000000000, 0.0000000000000000 },
f92ab29f 16900 { 57.562247312454403, 20.000000000000000, 20.000000000000000,
7c62b943 16901 10.000000000000000, 0.10000000000000009 },
f92ab29f 16902 { 4124.4159820362511, 20.000000000000000, 20.000000000000000,
7c62b943 16903 10.000000000000000, 0.19999999999999996 },
f92ab29f 16904 { 428774.21436196787, 20.000000000000000, 20.000000000000000,
7c62b943 16905 10.000000000000000, 0.30000000000000004 },
f92ab29f 16906 { 76996819.900892526, 20.000000000000000, 20.000000000000000,
7c62b943 16907 10.000000000000000, 0.39999999999999991 },
f92ab29f 16908 { 30473174828.943691, 20.000000000000000, 20.000000000000000,
7c62b943 16909 10.000000000000000, 0.50000000000000000 },
f92ab29f 16910 { 39291970835753.094, 20.000000000000000, 20.000000000000000,
7c62b943 16911 10.000000000000000, 0.60000000000000009 },
f92ab29f 16912 { 3.3890331048069018e+17, 20.000000000000000, 20.000000000000000,
7c62b943 16913 10.000000000000000, 0.69999999999999996 },
f92ab29f 16914 { 9.7157373454594049e+22, 20.000000000000000, 20.000000000000000,
7c62b943 16915 10.000000000000000, 0.80000000000000004 },
f92ab29f 16916 { 1.5205808288860858e+32, 20.000000000000000, 20.000000000000000,
7c62b943
BK
16917 10.000000000000000, 0.89999999999999991 },
16918};
16919
16920// Test function for a=20.000000000000000, b=20.000000000000000, c=10.000000000000000.
16921template <typename Tp>
16922void test245()
16923{
16924 const Tp eps = std::numeric_limits<Tp>::epsilon();
16925 Tp max_abs_diff = -Tp(1);
16926 Tp max_abs_frac = -Tp(1);
16927 unsigned int num_datum = sizeof(data245)
16928 / sizeof(testcase_hyperg<double>);
16929 for (unsigned int i = 0; i < num_datum; ++i)
16930 {
16931 const Tp f = std::tr1::hyperg(Tp(data245[i].a), Tp(data245[i].b),
16932 Tp(data245[i].c), Tp(data245[i].x));
16933 const Tp f0 = data245[i].f0;
16934 const Tp diff = f - f0;
16935 if (std::abs(diff) > max_abs_diff)
16936 max_abs_diff = std::abs(diff);
16937 if (std::abs(f0) > Tp(10) * eps && std::abs(f) > Tp(10) * eps)
16938 {
16939 const Tp frac = diff / f0;
16940 if (std::abs(frac) > max_abs_frac)
16941 max_abs_frac = std::abs(frac);
16942 }
16943 }
16944 VERIFY(max_abs_frac < Tp(2.5000000000000005e-05));
16945}
16946
16947int main(int, char**)
16948{
16949 test001<double>();
16950 test002<double>();
16951 test003<double>();
16952 test004<double>();
16953 test005<double>();
16954 test006<double>();
16955 test007<double>();
16956 test008<double>();
16957 test009<double>();
16958 test010<double>();
16959 test011<double>();
16960 test012<double>();
16961 test013<double>();
16962 test014<double>();
16963 test015<double>();
16964 test016<double>();
16965 test017<double>();
16966 test018<double>();
16967 test019<double>();
16968 test020<double>();
16969 test021<double>();
16970 test022<double>();
16971 test023<double>();
16972 test024<double>();
16973 test025<double>();
16974 test026<double>();
16975 test027<double>();
16976 test028<double>();
16977 test029<double>();
16978 test030<double>();
16979 test031<double>();
16980 test032<double>();
16981 test033<double>();
16982 test034<double>();
16983 test035<double>();
16984 test036<double>();
16985 test037<double>();
16986 test038<double>();
16987 test039<double>();
16988 test040<double>();
16989 test041<double>();
16990 test042<double>();
16991 test043<double>();
16992 test044<double>();
16993 test045<double>();
16994 test046<double>();
16995 test047<double>();
16996 test048<double>();
16997 test049<double>();
16998 test050<double>();
16999 test051<double>();
17000 test052<double>();
17001 test053<double>();
17002 test054<double>();
17003 test055<double>();
17004 test056<double>();
17005 test057<double>();
17006 test058<double>();
17007 test059<double>();
17008 test060<double>();
17009 test061<double>();
17010 test062<double>();
17011 test063<double>();
17012 test064<double>();
17013 test065<double>();
17014 test066<double>();
17015 test067<double>();
17016 test068<double>();
17017 test069<double>();
17018 test070<double>();
17019 test071<double>();
17020 test072<double>();
17021 test073<double>();
17022 test074<double>();
17023 test075<double>();
17024 test076<double>();
17025 test077<double>();
17026 test078<double>();
17027 test079<double>();
17028 test080<double>();
17029 test081<double>();
17030 test082<double>();
17031 test083<double>();
17032 test084<double>();
17033 test085<double>();
17034 test086<double>();
17035 test087<double>();
17036 test088<double>();
17037 test089<double>();
17038 test090<double>();
17039 test091<double>();
17040 test092<double>();
17041 test093<double>();
17042 test094<double>();
17043 test095<double>();
17044 test096<double>();
17045 test097<double>();
17046 test098<double>();
17047 test099<double>();
17048 test100<double>();
17049 test101<double>();
17050 test102<double>();
17051 test103<double>();
17052 test104<double>();
17053 test105<double>();
17054 test106<double>();
17055 test107<double>();
17056 test108<double>();
17057 test109<double>();
17058 test110<double>();
17059 test111<double>();
17060 test112<double>();
17061 test113<double>();
17062 test114<double>();
17063 test115<double>();
17064 test116<double>();
17065 test117<double>();
17066 test118<double>();
17067 test119<double>();
17068 test120<double>();
17069 test121<double>();
17070 test122<double>();
17071 test123<double>();
17072 test124<double>();
17073 test125<double>();
17074 test126<double>();
17075 test127<double>();
17076 test128<double>();
17077 test129<double>();
17078 test130<double>();
17079 test131<double>();
17080 test132<double>();
17081 test133<double>();
17082 test134<double>();
17083 test135<double>();
17084 test136<double>();
17085 test137<double>();
17086 test138<double>();
17087 test139<double>();
17088 test140<double>();
17089 test141<double>();
17090 test142<double>();
17091 test143<double>();
17092 test144<double>();
17093 test145<double>();
17094 test146<double>();
17095 test147<double>();
17096 test148<double>();
17097 test149<double>();
17098 test150<double>();
17099 test151<double>();
17100 test152<double>();
17101 test153<double>();
17102 test154<double>();
17103 test155<double>();
17104 test156<double>();
17105 test157<double>();
17106 test158<double>();
17107 test159<double>();
17108 test160<double>();
17109 test161<double>();
17110 test162<double>();
17111 test163<double>();
17112 test164<double>();
17113 test165<double>();
17114 test166<double>();
17115 test167<double>();
17116 test168<double>();
17117 test169<double>();
17118 test170<double>();
17119 test171<double>();
17120 test172<double>();
17121 test173<double>();
17122 test174<double>();
17123 test175<double>();
17124 test176<double>();
17125 test177<double>();
17126 test178<double>();
17127 test179<double>();
17128 test180<double>();
17129 test181<double>();
17130 test182<double>();
17131 test183<double>();
17132 test184<double>();
17133 test185<double>();
17134 test186<double>();
17135 test187<double>();
17136 test188<double>();
17137 test189<double>();
17138 test190<double>();
17139 test191<double>();
17140 test192<double>();
17141 test193<double>();
17142 test194<double>();
17143 test195<double>();
17144 test196<double>();
17145 test197<double>();
17146 test198<double>();
17147 test199<double>();
17148 test200<double>();
17149 test201<double>();
17150 test202<double>();
17151 test203<double>();
17152 test204<double>();
17153 test205<double>();
17154 test206<double>();
17155 test207<double>();
17156 test208<double>();
17157 test209<double>();
17158 test210<double>();
17159 test211<double>();
17160 test212<double>();
17161 test213<double>();
17162 test214<double>();
17163 test215<double>();
17164 test216<double>();
17165 test217<double>();
17166 test218<double>();
17167 test219<double>();
17168 test220<double>();
17169 test221<double>();
17170 test222<double>();
17171 test223<double>();
17172 test224<double>();
17173 test225<double>();
17174 test226<double>();
17175 test227<double>();
17176 test228<double>();
17177 test229<double>();
17178 test230<double>();
17179 test231<double>();
17180 test232<double>();
17181 test233<double>();
17182 test234<double>();
17183 test235<double>();
17184 test236<double>();
17185 test237<double>();
17186 test238<double>();
17187 test239<double>();
17188 test240<double>();
17189 test241<double>();
17190 test242<double>();
17191 test243<double>();
17192 test244<double>();
17193 test245<double>();
17194 return 0;
17195}