]>
Commit | Line | Data |
---|---|---|
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) \ | |
30 | if (!(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. | |
43 | testcase_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. | |
85 | template <typename Tp> | |
86 | void 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. | |
112 | testcase_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. | |
154 | template <typename Tp> | |
155 | void 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. | |
181 | testcase_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. | |
223 | template <typename Tp> | |
224 | void 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. | |
250 | testcase_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. | |
292 | template <typename Tp> | |
293 | void 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. | |
319 | testcase_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. | |
361 | template <typename Tp> | |
362 | void 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. | |
388 | testcase_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. | |
430 | template <typename Tp> | |
431 | void 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. | |
457 | testcase_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. | |
499 | template <typename Tp> | |
500 | void 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. | |
526 | testcase_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. | |
568 | template <typename Tp> | |
569 | void 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. | |
595 | testcase_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. | |
637 | template <typename Tp> | |
638 | void 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. | |
664 | testcase_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. | |
706 | template <typename Tp> | |
707 | void 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. | |
733 | testcase_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. | |
775 | template <typename Tp> | |
776 | void 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. | |
802 | testcase_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. | |
844 | template <typename Tp> | |
845 | void 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. | |
871 | testcase_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. | |
913 | template <typename Tp> | |
914 | void 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. | |
940 | testcase_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. | |
982 | template <typename Tp> | |
983 | void 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. | |
1009 | testcase_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. | |
1051 | template <typename Tp> | |
1052 | void 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. | |
1078 | testcase_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. | |
1120 | template <typename Tp> | |
1121 | void 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. | |
1147 | testcase_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. | |
1189 | template <typename Tp> | |
1190 | void 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. | |
1216 | testcase_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. | |
1258 | template <typename Tp> | |
1259 | void 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. | |
1285 | testcase_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. | |
1327 | template <typename Tp> | |
1328 | void 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. | |
1354 | testcase_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. | |
1396 | template <typename Tp> | |
1397 | void 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. | |
1423 | testcase_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. | |
1465 | template <typename Tp> | |
1466 | void 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. | |
1492 | testcase_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. | |
1534 | template <typename Tp> | |
1535 | void 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. | |
1561 | testcase_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. | |
1603 | template <typename Tp> | |
1604 | void 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. | |
1630 | testcase_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. | |
1672 | template <typename Tp> | |
1673 | void 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. | |
1699 | testcase_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. | |
1741 | template <typename Tp> | |
1742 | void 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. | |
1768 | testcase_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. | |
1810 | template <typename Tp> | |
1811 | void 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. | |
1837 | testcase_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. | |
1879 | template <typename Tp> | |
1880 | void 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. | |
1906 | testcase_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. | |
1948 | template <typename Tp> | |
1949 | void 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. | |
1975 | testcase_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. | |
2017 | template <typename Tp> | |
2018 | void 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. | |
2044 | testcase_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. | |
2086 | template <typename Tp> | |
2087 | void 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. | |
2113 | testcase_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. | |
2155 | template <typename Tp> | |
2156 | void 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. | |
2182 | testcase_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. | |
2224 | template <typename Tp> | |
2225 | void 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. | |
2251 | testcase_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. | |
2293 | template <typename Tp> | |
2294 | void 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. | |
2320 | testcase_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. | |
2362 | template <typename Tp> | |
2363 | void 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. | |
2389 | testcase_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. | |
2431 | template <typename Tp> | |
2432 | void 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. | |
2458 | testcase_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. | |
2500 | template <typename Tp> | |
2501 | void 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. | |
2527 | testcase_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. | |
2569 | template <typename Tp> | |
2570 | void 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. | |
2596 | testcase_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. | |
2638 | template <typename Tp> | |
2639 | void 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. | |
2665 | testcase_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. | |
2707 | template <typename Tp> | |
2708 | void 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. | |
2734 | testcase_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. | |
2776 | template <typename Tp> | |
2777 | void 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. | |
2803 | testcase_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. | |
2845 | template <typename Tp> | |
2846 | void 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. | |
2872 | testcase_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. | |
2914 | template <typename Tp> | |
2915 | void 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. | |
2941 | testcase_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. | |
2983 | template <typename Tp> | |
2984 | void 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. | |
3010 | testcase_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. | |
3052 | template <typename Tp> | |
3053 | void 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. | |
3079 | testcase_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. | |
3121 | template <typename Tp> | |
3122 | void 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. | |
3148 | testcase_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. | |
3190 | template <typename Tp> | |
3191 | void 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. | |
3217 | testcase_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. | |
3259 | template <typename Tp> | |
3260 | void 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. | |
3286 | testcase_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. | |
3328 | template <typename Tp> | |
3329 | void 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. | |
3355 | testcase_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. | |
3397 | template <typename Tp> | |
3398 | void 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. | |
3424 | testcase_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. | |
3466 | template <typename Tp> | |
3467 | void 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. | |
3493 | testcase_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. | |
3535 | template <typename Tp> | |
3536 | void 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. | |
3562 | testcase_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. | |
3604 | template <typename Tp> | |
3605 | void 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. | |
3631 | testcase_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. | |
3673 | template <typename Tp> | |
3674 | void 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. | |
3700 | testcase_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. | |
3742 | template <typename Tp> | |
3743 | void 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. | |
3769 | testcase_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. | |
3811 | template <typename Tp> | |
3812 | void 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. | |
3838 | testcase_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. | |
3880 | template <typename Tp> | |
3881 | void 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. | |
3907 | testcase_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. | |
3949 | template <typename Tp> | |
3950 | void 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. | |
3976 | testcase_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. | |
4018 | template <typename Tp> | |
4019 | void 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. | |
4045 | testcase_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. | |
4087 | template <typename Tp> | |
4088 | void 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. | |
4114 | testcase_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. | |
4156 | template <typename Tp> | |
4157 | void 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. | |
4183 | testcase_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. | |
4225 | template <typename Tp> | |
4226 | void 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. | |
4252 | testcase_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. | |
4294 | template <typename Tp> | |
4295 | void 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. | |
4321 | testcase_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. | |
4363 | template <typename Tp> | |
4364 | void 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. | |
4390 | testcase_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. | |
4432 | template <typename Tp> | |
4433 | void 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. | |
4459 | testcase_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. | |
4501 | template <typename Tp> | |
4502 | void 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. | |
4528 | testcase_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. | |
4570 | template <typename Tp> | |
4571 | void 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. | |
4597 | testcase_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. | |
4639 | template <typename Tp> | |
4640 | void 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. | |
4666 | testcase_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. | |
4708 | template <typename Tp> | |
4709 | void 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. | |
4735 | testcase_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. | |
4777 | template <typename Tp> | |
4778 | void 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. | |
4804 | testcase_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. | |
4846 | template <typename Tp> | |
4847 | void 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. | |
4873 | testcase_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. | |
4915 | template <typename Tp> | |
4916 | void 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. | |
4942 | testcase_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. | |
4984 | template <typename Tp> | |
4985 | void 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. | |
5011 | testcase_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. | |
5053 | template <typename Tp> | |
5054 | void 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. | |
5080 | testcase_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. | |
5122 | template <typename Tp> | |
5123 | void 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. | |
5149 | testcase_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. | |
5191 | template <typename Tp> | |
5192 | void 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. | |
5218 | testcase_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. | |
5260 | template <typename Tp> | |
5261 | void 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. | |
5287 | testcase_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. | |
5329 | template <typename Tp> | |
5330 | void 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. | |
5356 | testcase_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. | |
5398 | template <typename Tp> | |
5399 | void 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. | |
5425 | testcase_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. | |
5467 | template <typename Tp> | |
5468 | void 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. | |
5494 | testcase_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. | |
5536 | template <typename Tp> | |
5537 | void 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. | |
5563 | testcase_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. | |
5605 | template <typename Tp> | |
5606 | void 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. | |
5632 | testcase_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. | |
5674 | template <typename Tp> | |
5675 | void 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. | |
5701 | testcase_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. | |
5743 | template <typename Tp> | |
5744 | void 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. | |
5770 | testcase_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. | |
5812 | template <typename Tp> | |
5813 | void 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. | |
5839 | testcase_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. | |
5881 | template <typename Tp> | |
5882 | void 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. | |
5908 | testcase_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. | |
5950 | template <typename Tp> | |
5951 | void 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. | |
5977 | testcase_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. | |
6019 | template <typename Tp> | |
6020 | void 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. | |
6046 | testcase_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. | |
6088 | template <typename Tp> | |
6089 | void 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. | |
6115 | testcase_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. | |
6157 | template <typename Tp> | |
6158 | void 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. | |
6184 | testcase_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. | |
6226 | template <typename Tp> | |
6227 | void 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. | |
6253 | testcase_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. | |
6295 | template <typename Tp> | |
6296 | void 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. | |
6322 | testcase_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. | |
6364 | template <typename Tp> | |
6365 | void 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. | |
6391 | testcase_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. | |
6433 | template <typename Tp> | |
6434 | void 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. | |
6460 | testcase_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. | |
6502 | template <typename Tp> | |
6503 | void 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. | |
6529 | testcase_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. | |
6571 | template <typename Tp> | |
6572 | void 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. | |
6598 | testcase_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. | |
6640 | template <typename Tp> | |
6641 | void 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. | |
6667 | testcase_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. | |
6709 | template <typename Tp> | |
6710 | void 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. | |
6736 | testcase_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. | |
6778 | template <typename Tp> | |
6779 | void 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. | |
6805 | testcase_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. | |
6847 | template <typename Tp> | |
6848 | void 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. | |
6874 | testcase_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. | |
6916 | template <typename Tp> | |
6917 | void 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. | |
6943 | testcase_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. | |
6985 | template <typename Tp> | |
6986 | void 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. | |
7012 | testcase_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. | |
7054 | template <typename Tp> | |
7055 | void 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. | |
7081 | testcase_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. | |
7123 | template <typename Tp> | |
7124 | void 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. | |
7150 | testcase_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. | |
7192 | template <typename Tp> | |
7193 | void 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. | |
7219 | testcase_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. | |
7261 | template <typename Tp> | |
7262 | void 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. | |
7288 | testcase_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. | |
7330 | template <typename Tp> | |
7331 | void 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. | |
7357 | testcase_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. | |
7399 | template <typename Tp> | |
7400 | void 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. | |
7426 | testcase_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. | |
7468 | template <typename Tp> | |
7469 | void 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. | |
7495 | testcase_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. | |
7537 | template <typename Tp> | |
7538 | void 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. | |
7564 | testcase_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. | |
7606 | template <typename Tp> | |
7607 | void 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. | |
7633 | testcase_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. | |
7675 | template <typename Tp> | |
7676 | void 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. | |
7702 | testcase_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. | |
7744 | template <typename Tp> | |
7745 | void 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. | |
7771 | testcase_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. | |
7813 | template <typename Tp> | |
7814 | void 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. | |
7840 | testcase_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. | |
7882 | template <typename Tp> | |
7883 | void 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. | |
7909 | testcase_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. | |
7951 | template <typename Tp> | |
7952 | void 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. | |
7978 | testcase_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. | |
8020 | template <typename Tp> | |
8021 | void 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. | |
8047 | testcase_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. | |
8089 | template <typename Tp> | |
8090 | void 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. | |
8116 | testcase_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. | |
8158 | template <typename Tp> | |
8159 | void 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. | |
8185 | testcase_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. | |
8227 | template <typename Tp> | |
8228 | void 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. | |
8254 | testcase_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. | |
8296 | template <typename Tp> | |
8297 | void 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. | |
8323 | testcase_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. | |
8365 | template <typename Tp> | |
8366 | void 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. | |
8392 | testcase_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. | |
8434 | template <typename Tp> | |
8435 | void 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. | |
8461 | testcase_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. | |
8503 | template <typename Tp> | |
8504 | void 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. | |
8530 | testcase_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. | |
8572 | template <typename Tp> | |
8573 | void 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. | |
8599 | testcase_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. | |
8641 | template <typename Tp> | |
8642 | void 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. | |
8668 | testcase_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. | |
8710 | template <typename Tp> | |
8711 | void 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. | |
8737 | testcase_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. | |
8779 | template <typename Tp> | |
8780 | void 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. | |
8806 | testcase_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. | |
8848 | template <typename Tp> | |
8849 | void 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. | |
8875 | testcase_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. | |
8917 | template <typename Tp> | |
8918 | void 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. | |
8944 | testcase_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. | |
8986 | template <typename Tp> | |
8987 | void 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. | |
9013 | testcase_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. | |
9055 | template <typename Tp> | |
9056 | void 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. | |
9082 | testcase_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. | |
9124 | template <typename Tp> | |
9125 | void 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. | |
9151 | testcase_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. | |
9193 | template <typename Tp> | |
9194 | void 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. | |
9220 | testcase_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. | |
9262 | template <typename Tp> | |
9263 | void 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. | |
9289 | testcase_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. | |
9331 | template <typename Tp> | |
9332 | void 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. | |
9358 | testcase_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. | |
9400 | template <typename Tp> | |
9401 | void 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. | |
9427 | testcase_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. | |
9469 | template <typename Tp> | |
9470 | void 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. | |
9496 | testcase_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. | |
9538 | template <typename Tp> | |
9539 | void 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. | |
9565 | testcase_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. | |
9607 | template <typename Tp> | |
9608 | void 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. | |
9634 | testcase_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. | |
9676 | template <typename Tp> | |
9677 | void 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. | |
9703 | testcase_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. | |
9745 | template <typename Tp> | |
9746 | void 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. | |
9772 | testcase_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. | |
9814 | template <typename Tp> | |
9815 | void 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. | |
9841 | testcase_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. | |
9883 | template <typename Tp> | |
9884 | void 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. | |
9910 | testcase_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. | |
9952 | template <typename Tp> | |
9953 | void 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. | |
9979 | testcase_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. | |
10021 | template <typename Tp> | |
10022 | void 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. | |
10048 | testcase_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. | |
10090 | template <typename Tp> | |
10091 | void 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. | |
10117 | testcase_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. | |
10159 | template <typename Tp> | |
10160 | void 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. | |
10186 | testcase_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. | |
10228 | template <typename Tp> | |
10229 | void 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. | |
10255 | testcase_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. | |
10297 | template <typename Tp> | |
10298 | void 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. | |
10324 | testcase_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. | |
10366 | template <typename Tp> | |
10367 | void 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. | |
10393 | testcase_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. | |
10435 | template <typename Tp> | |
10436 | void 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. | |
10462 | testcase_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. | |
10504 | template <typename Tp> | |
10505 | void 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. | |
10531 | testcase_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. | |
10573 | template <typename Tp> | |
10574 | void 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. | |
10600 | testcase_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. | |
10642 | template <typename Tp> | |
10643 | void 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. | |
10669 | testcase_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. | |
10711 | template <typename Tp> | |
10712 | void 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. | |
10738 | testcase_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. | |
10780 | template <typename Tp> | |
10781 | void 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. | |
10807 | testcase_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. | |
10849 | template <typename Tp> | |
10850 | void 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. | |
10876 | testcase_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. | |
10918 | template <typename Tp> | |
10919 | void 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. | |
10945 | testcase_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. | |
10987 | template <typename Tp> | |
10988 | void 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. | |
11014 | testcase_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. | |
11056 | template <typename Tp> | |
11057 | void 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. | |
11083 | testcase_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. | |
11125 | template <typename Tp> | |
11126 | void 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. | |
11152 | testcase_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. | |
11194 | template <typename Tp> | |
11195 | void 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. | |
11221 | testcase_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. | |
11263 | template <typename Tp> | |
11264 | void 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. | |
11290 | testcase_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. | |
11332 | template <typename Tp> | |
11333 | void 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. | |
11359 | testcase_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. | |
11401 | template <typename Tp> | |
11402 | void 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. | |
11428 | testcase_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. | |
11470 | template <typename Tp> | |
11471 | void 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. | |
11497 | testcase_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. | |
11539 | template <typename Tp> | |
11540 | void 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. | |
11566 | testcase_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. | |
11608 | template <typename Tp> | |
11609 | void 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. | |
11635 | testcase_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. | |
11677 | template <typename Tp> | |
11678 | void 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. | |
11704 | testcase_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. | |
11746 | template <typename Tp> | |
11747 | void 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. | |
11773 | testcase_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. | |
11815 | template <typename Tp> | |
11816 | void 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. | |
11842 | testcase_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. | |
11884 | template <typename Tp> | |
11885 | void 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. | |
11911 | testcase_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. | |
11953 | template <typename Tp> | |
11954 | void 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. | |
11980 | testcase_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. | |
12022 | template <typename Tp> | |
12023 | void 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. | |
12049 | testcase_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. | |
12091 | template <typename Tp> | |
12092 | void 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. | |
12118 | testcase_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. | |
12160 | template <typename Tp> | |
12161 | void 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. | |
12187 | testcase_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. | |
12229 | template <typename Tp> | |
12230 | void 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. | |
12256 | testcase_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. | |
12298 | template <typename Tp> | |
12299 | void 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. | |
12325 | testcase_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. | |
12367 | template <typename Tp> | |
12368 | void 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. | |
12394 | testcase_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. | |
12436 | template <typename Tp> | |
12437 | void 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. | |
12463 | testcase_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. | |
12505 | template <typename Tp> | |
12506 | void 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. | |
12532 | testcase_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. | |
12574 | template <typename Tp> | |
12575 | void 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. | |
12601 | testcase_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. | |
12643 | template <typename Tp> | |
12644 | void 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. | |
12670 | testcase_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. | |
12712 | template <typename Tp> | |
12713 | void 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. | |
12739 | testcase_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. | |
12781 | template <typename Tp> | |
12782 | void 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. | |
12808 | testcase_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. | |
12850 | template <typename Tp> | |
12851 | void 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. | |
12877 | testcase_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. | |
12919 | template <typename Tp> | |
12920 | void 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. | |
12946 | testcase_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. | |
12988 | template <typename Tp> | |
12989 | void 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. | |
13015 | testcase_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. | |
13057 | template <typename Tp> | |
13058 | void 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. | |
13084 | testcase_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. | |
13126 | template <typename Tp> | |
13127 | void 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. | |
13153 | testcase_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. | |
13195 | template <typename Tp> | |
13196 | void 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. | |
13222 | testcase_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. | |
13264 | template <typename Tp> | |
13265 | void 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. | |
13291 | testcase_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. | |
13333 | template <typename Tp> | |
13334 | void 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. | |
13360 | testcase_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. | |
13402 | template <typename Tp> | |
13403 | void 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. | |
13429 | testcase_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. | |
13471 | template <typename Tp> | |
13472 | void 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. | |
13498 | testcase_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. | |
13540 | template <typename Tp> | |
13541 | void 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. | |
13567 | testcase_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. | |
13609 | template <typename Tp> | |
13610 | void 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. | |
13636 | testcase_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. | |
13678 | template <typename Tp> | |
13679 | void 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. | |
13705 | testcase_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. | |
13747 | template <typename Tp> | |
13748 | void 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. | |
13774 | testcase_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. | |
13816 | template <typename Tp> | |
13817 | void 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. | |
13843 | testcase_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. | |
13885 | template <typename Tp> | |
13886 | void 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. | |
13912 | testcase_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. | |
13954 | template <typename Tp> | |
13955 | void 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. | |
13981 | testcase_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. | |
14023 | template <typename Tp> | |
14024 | void 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. | |
14050 | testcase_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. | |
14092 | template <typename Tp> | |
14093 | void 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. | |
14119 | testcase_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. | |
14161 | template <typename Tp> | |
14162 | void 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. | |
14188 | testcase_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. | |
14230 | template <typename Tp> | |
14231 | void 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. | |
14257 | testcase_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. | |
14299 | template <typename Tp> | |
14300 | void 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. | |
14326 | testcase_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. | |
14368 | template <typename Tp> | |
14369 | void 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. | |
14395 | testcase_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. | |
14437 | template <typename Tp> | |
14438 | void 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. | |
14464 | testcase_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. | |
14506 | template <typename Tp> | |
14507 | void 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. | |
14533 | testcase_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. | |
14575 | template <typename Tp> | |
14576 | void 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. | |
14602 | testcase_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. | |
14644 | template <typename Tp> | |
14645 | void 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. | |
14671 | testcase_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. | |
14713 | template <typename Tp> | |
14714 | void 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. | |
14740 | testcase_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. | |
14782 | template <typename Tp> | |
14783 | void 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. | |
14809 | testcase_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. | |
14851 | template <typename Tp> | |
14852 | void 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. | |
14878 | testcase_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. | |
14920 | template <typename Tp> | |
14921 | void 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. | |
14947 | testcase_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. | |
14989 | template <typename Tp> | |
14990 | void 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. | |
15016 | testcase_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. | |
15058 | template <typename Tp> | |
15059 | void 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. | |
15085 | testcase_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. | |
15127 | template <typename Tp> | |
15128 | void 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. | |
15154 | testcase_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. | |
15196 | template <typename Tp> | |
15197 | void 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. | |
15223 | testcase_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. | |
15265 | template <typename Tp> | |
15266 | void 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. | |
15292 | testcase_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. | |
15334 | template <typename Tp> | |
15335 | void 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. | |
15361 | testcase_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. | |
15403 | template <typename Tp> | |
15404 | void 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. | |
15430 | testcase_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. | |
15472 | template <typename Tp> | |
15473 | void 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. | |
15499 | testcase_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. | |
15541 | template <typename Tp> | |
15542 | void 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. | |
15568 | testcase_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. | |
15610 | template <typename Tp> | |
15611 | void 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. | |
15637 | testcase_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. | |
15679 | template <typename Tp> | |
15680 | void 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. | |
15706 | testcase_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. | |
15748 | template <typename Tp> | |
15749 | void 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. | |
15775 | testcase_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. | |
15817 | template <typename Tp> | |
15818 | void 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. | |
15844 | testcase_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. | |
15886 | template <typename Tp> | |
15887 | void 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. | |
15913 | testcase_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. | |
15955 | template <typename Tp> | |
15956 | void 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. | |
15982 | testcase_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. | |
16024 | template <typename Tp> | |
16025 | void 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. | |
16051 | testcase_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. | |
16093 | template <typename Tp> | |
16094 | void 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. | |
16120 | testcase_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. | |
16162 | template <typename Tp> | |
16163 | void 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. | |
16189 | testcase_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. | |
16231 | template <typename Tp> | |
16232 | void 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. | |
16258 | testcase_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. | |
16300 | template <typename Tp> | |
16301 | void 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. | |
16327 | testcase_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. | |
16369 | template <typename Tp> | |
16370 | void 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. | |
16396 | testcase_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. | |
16438 | template <typename Tp> | |
16439 | void 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. | |
16465 | testcase_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. | |
16507 | template <typename Tp> | |
16508 | void 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. | |
16534 | testcase_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. | |
16576 | template <typename Tp> | |
16577 | void 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. | |
16603 | testcase_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. | |
16645 | template <typename Tp> | |
16646 | void 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. | |
16672 | testcase_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. | |
16714 | template <typename Tp> | |
16715 | void 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. | |
16741 | testcase_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. | |
16783 | template <typename Tp> | |
16784 | void 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. | |
16810 | testcase_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. | |
16852 | template <typename Tp> | |
16853 | void 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. | |
16879 | testcase_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. | |
16921 | template <typename Tp> | |
16922 | void 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 | ||
16947 | int 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 | } |