tjn.c revision 1.1.1.3 1 1.1 mrg /* tjn -- test file for the Bessel function of first kind
2 1.1 mrg
3 1.1.1.3 mrg Copyright 2007-2016 Free Software Foundation, Inc.
4 1.1.1.3 mrg Contributed by the AriC and Caramba projects, INRIA.
5 1.1 mrg
6 1.1 mrg This file is part of the GNU MPFR Library.
7 1.1 mrg
8 1.1 mrg The GNU MPFR Library is free software; you can redistribute it and/or modify
9 1.1 mrg it under the terms of the GNU Lesser General Public License as published by
10 1.1 mrg the Free Software Foundation; either version 3 of the License, or (at your
11 1.1 mrg option) any later version.
12 1.1 mrg
13 1.1 mrg The GNU MPFR Library is distributed in the hope that it will be useful, but
14 1.1 mrg WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 1.1 mrg or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16 1.1 mrg License for more details.
17 1.1 mrg
18 1.1 mrg You should have received a copy of the GNU Lesser General Public License
19 1.1 mrg along with the GNU MPFR Library; see the file COPYING.LESSER. If not, see
20 1.1 mrg http://www.gnu.org/licenses/ or write to the Free Software Foundation, Inc.,
21 1.1 mrg 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. */
22 1.1 mrg
23 1.1 mrg #include <stdio.h>
24 1.1 mrg #include <stdlib.h>
25 1.1 mrg #include <limits.h> /* for LONG_MAX */
26 1.1 mrg
27 1.1 mrg #include "mpfr-test.h"
28 1.1 mrg
29 1.1 mrg int
30 1.1 mrg main (int argc, char *argv[])
31 1.1 mrg {
32 1.1 mrg mpfr_t x, y;
33 1.1 mrg long n;
34 1.1 mrg
35 1.1 mrg if (argc > 1)
36 1.1 mrg {
37 1.1 mrg mpfr_init2 (x, atoi (argv[1]));
38 1.1 mrg mpfr_set_str (x, argv[3], 10, MPFR_RNDN);
39 1.1 mrg mpfr_jn (x, atoi (argv[2]), x, MPFR_RNDN);
40 1.1 mrg mpfr_out_str (stdout, 10, 10, x, MPFR_RNDN);
41 1.1 mrg printf ("\n");
42 1.1 mrg mpfr_clear (x);
43 1.1 mrg return 0;
44 1.1 mrg }
45 1.1 mrg
46 1.1 mrg tests_start_mpfr ();
47 1.1 mrg
48 1.1 mrg mpfr_init (x);
49 1.1 mrg mpfr_init (y);
50 1.1 mrg
51 1.1 mrg /* special values */
52 1.1 mrg mpfr_set_nan (x);
53 1.1 mrg mpfr_jn (y, 17, x, MPFR_RNDN);
54 1.1 mrg MPFR_ASSERTN(mpfr_nan_p (y));
55 1.1 mrg
56 1.1 mrg mpfr_set_inf (x, 1); /* +Inf */
57 1.1 mrg mpfr_jn (y, 17, x, MPFR_RNDN);
58 1.1 mrg MPFR_ASSERTN(mpfr_cmp_ui (y, 0) == 0 && MPFR_IS_POS (y));
59 1.1 mrg
60 1.1 mrg mpfr_set_inf (x, -1); /* -Inf */
61 1.1 mrg mpfr_jn (y, 17, x, MPFR_RNDN);
62 1.1 mrg MPFR_ASSERTN(mpfr_cmp_ui (y, 0) == 0 && MPFR_IS_POS (y));
63 1.1 mrg
64 1.1 mrg mpfr_set_ui (x, 0, MPFR_RNDN); /* +0 */
65 1.1 mrg mpfr_jn (y, 0, x, MPFR_RNDN);
66 1.1 mrg MPFR_ASSERTN(mpfr_cmp_ui (y, 1) == 0); /* j0(+0)=1 */
67 1.1 mrg mpfr_jn (y, 17, x, MPFR_RNDN);
68 1.1 mrg MPFR_ASSERTN(mpfr_cmp_ui (y, 0) == 0 && MPFR_IS_POS (y)); /* j17(+0)=+0 */
69 1.1 mrg mpfr_jn (y, -17, x, MPFR_RNDN);
70 1.1 mrg MPFR_ASSERTN(mpfr_cmp_ui (y, 0) == 0 && MPFR_IS_NEG (y)); /* j-17(+0)=-0 */
71 1.1 mrg mpfr_jn (y, 42, x, MPFR_RNDN);
72 1.1 mrg MPFR_ASSERTN(mpfr_cmp_ui (y, 0) == 0 && MPFR_IS_POS (y)); /* j42(+0)=+0 */
73 1.1 mrg
74 1.1 mrg mpfr_set_ui (x, 0, MPFR_RNDN);
75 1.1 mrg mpfr_neg (x, x, MPFR_RNDN); /* -0 */
76 1.1 mrg mpfr_jn (y, 0, x, MPFR_RNDN);
77 1.1 mrg MPFR_ASSERTN(mpfr_cmp_ui (y, 1) == 0); /* j0(-0)=1 */
78 1.1 mrg mpfr_jn (y, 17, x, MPFR_RNDN);
79 1.1 mrg MPFR_ASSERTN(mpfr_cmp_ui (y, 0) == 0 && MPFR_IS_NEG (y)); /* j17(-0)=-0 */
80 1.1 mrg mpfr_jn (y, -17, x, MPFR_RNDN);
81 1.1 mrg MPFR_ASSERTN(mpfr_cmp_ui (y, 0) == 0 && MPFR_IS_POS (y)); /* j-17(-0)=+0 */
82 1.1 mrg mpfr_jn (y, 42, x, MPFR_RNDN);
83 1.1 mrg MPFR_ASSERTN(mpfr_cmp_ui (y, 0) == 0 && MPFR_IS_POS (y)); /* j42(-0)=+0 */
84 1.1 mrg
85 1.1 mrg mpfr_set_prec (x, 53);
86 1.1 mrg mpfr_set_prec (y, 53);
87 1.1 mrg
88 1.1 mrg mpfr_set_ui (x, 1, MPFR_RNDN);
89 1.1 mrg mpfr_jn (y, 0, x, MPFR_RNDN);
90 1.1 mrg mpfr_set_str_binary (x, "0.1100001111100011111111101101111010111101110001111");
91 1.1 mrg if (mpfr_cmp (x, y))
92 1.1 mrg {
93 1.1 mrg printf ("Error in mpfr_jn for n=0, x=1, rnd=MPFR_RNDN\n");
94 1.1 mrg printf ("Expected "); mpfr_dump (x);
95 1.1 mrg printf ("Got "); mpfr_dump (y);
96 1.1 mrg exit (1);
97 1.1 mrg }
98 1.1 mrg
99 1.1 mrg mpfr_set_si (x, -1, MPFR_RNDN);
100 1.1 mrg mpfr_jn (y, 0, x, MPFR_RNDN);
101 1.1 mrg mpfr_set_str_binary (x, "0.1100001111100011111111101101111010111101110001111");
102 1.1 mrg if (mpfr_cmp (x, y))
103 1.1 mrg {
104 1.1 mrg printf ("Error in mpfr_jn for n=0, x=-1, rnd=MPFR_RNDN\n");
105 1.1 mrg printf ("Expected "); mpfr_dump (x);
106 1.1 mrg printf ("Got "); mpfr_dump (y);
107 1.1 mrg exit (1);
108 1.1 mrg }
109 1.1 mrg
110 1.1 mrg mpfr_set_ui (x, 1, MPFR_RNDN);
111 1.1 mrg mpfr_jn (y, 1, x, MPFR_RNDN);
112 1.1 mrg mpfr_set_str_binary (x, "0.0111000010100111001001111011101001011100001100011011");
113 1.1 mrg if (mpfr_cmp (x, y))
114 1.1 mrg {
115 1.1 mrg printf ("Error in mpfr_jn for n=1, x=1, rnd=MPFR_RNDN\n");
116 1.1 mrg printf ("Expected "); mpfr_dump (x);
117 1.1 mrg printf ("Got "); mpfr_dump (y);
118 1.1 mrg exit (1);
119 1.1 mrg }
120 1.1 mrg
121 1.1 mrg mpfr_set_ui (x, 1, MPFR_RNDN);
122 1.1 mrg mpfr_jn (y, 17, x, MPFR_RNDN);
123 1.1 mrg mpfr_set_str_binary (x, "0.1100011111001010101001001001000110110000010001011E-65");
124 1.1 mrg if (mpfr_cmp (x, y))
125 1.1 mrg {
126 1.1 mrg printf ("Error in mpfr_jn for n=17, x=1, rnd=MPFR_RNDN\n");
127 1.1 mrg printf ("Expected "); mpfr_dump (x);
128 1.1 mrg printf ("Got "); mpfr_dump (y);
129 1.1 mrg exit (1);
130 1.1 mrg }
131 1.1 mrg
132 1.1 mrg mpfr_set_ui (x, 1, MPFR_RNDN);
133 1.1 mrg mpfr_jn (y, 42, x, MPFR_RNDN);
134 1.1 mrg mpfr_set_str_binary (x, "0.10000111100011010100111011100111101101000100000001001E-211");
135 1.1 mrg if (mpfr_cmp (x, y))
136 1.1 mrg {
137 1.1 mrg printf ("Error in mpfr_jn for n=42, x=1, rnd=MPFR_RNDN\n");
138 1.1 mrg printf ("Expected "); mpfr_dump (x);
139 1.1 mrg printf ("Got "); mpfr_dump (y);
140 1.1 mrg exit (1);
141 1.1 mrg }
142 1.1 mrg
143 1.1 mrg mpfr_set_ui (x, 1, MPFR_RNDN);
144 1.1 mrg mpfr_jn (y, -42, x, MPFR_RNDN);
145 1.1 mrg mpfr_set_str_binary (x, "0.10000111100011010100111011100111101101000100000001001E-211");
146 1.1 mrg if (mpfr_cmp (x, y))
147 1.1 mrg {
148 1.1 mrg printf ("Error in mpfr_jn for n=-42, x=1, rnd=MPFR_RNDN\n");
149 1.1 mrg printf ("Expected "); mpfr_dump (x);
150 1.1 mrg printf ("Got "); mpfr_dump (y);
151 1.1 mrg exit (1);
152 1.1 mrg }
153 1.1 mrg
154 1.1 mrg mpfr_set_si (x, -1, MPFR_RNDN);
155 1.1 mrg mpfr_jn (y, 42, x, MPFR_RNDN);
156 1.1 mrg mpfr_set_str_binary (x, "0.10000111100011010100111011100111101101000100000001001E-211");
157 1.1 mrg if (mpfr_cmp (x, y))
158 1.1 mrg {
159 1.1 mrg printf ("Error in mpfr_jn for n=42, x=-1, rnd=MPFR_RNDN\n");
160 1.1 mrg printf ("Expected "); mpfr_dump (x);
161 1.1 mrg printf ("Got "); mpfr_dump (y);
162 1.1 mrg exit (1);
163 1.1 mrg }
164 1.1 mrg
165 1.1 mrg mpfr_set_si (x, -1, MPFR_RNDN);
166 1.1 mrg mpfr_jn (y, -42, x, MPFR_RNDN);
167 1.1 mrg mpfr_set_str_binary (x, "0.10000111100011010100111011100111101101000100000001001E-211");
168 1.1 mrg if (mpfr_cmp (x, y))
169 1.1 mrg {
170 1.1 mrg printf ("Error in mpfr_jn for n=-42, x=-1, rnd=MPFR_RNDN\n");
171 1.1 mrg printf ("Expected "); mpfr_dump (x);
172 1.1 mrg printf ("Got "); mpfr_dump (y);
173 1.1 mrg exit (1);
174 1.1 mrg }
175 1.1 mrg
176 1.1 mrg mpfr_set_ui (x, 17, MPFR_RNDN);
177 1.1 mrg mpfr_jn (y, 4, x, MPFR_RNDN);
178 1.1 mrg mpfr_set_str_binary (x, "-0.0001110001011001100010100111100111100000111110111011111");
179 1.1 mrg if (mpfr_cmp (x, y))
180 1.1 mrg {
181 1.1 mrg printf ("Error in mpfr_jn for n=4, x=17, rnd=MPFR_RNDN\n");
182 1.1 mrg printf ("Expected "); mpfr_dump (x);
183 1.1 mrg printf ("Got "); mpfr_dump (y);
184 1.1 mrg exit (1);
185 1.1 mrg }
186 1.1 mrg
187 1.1 mrg mpfr_set_ui (x, 17, MPFR_RNDN);
188 1.1 mrg mpfr_jn (y, 16, x, MPFR_RNDN);
189 1.1 mrg mpfr_set_str_binary (x, "0.0011101111100111101111010100000111111001111001001010011");
190 1.1 mrg if (mpfr_cmp (x, y))
191 1.1 mrg {
192 1.1 mrg printf ("Error in mpfr_jn for n=16, x=17, rnd=MPFR_RNDN\n");
193 1.1 mrg printf ("Expected "); mpfr_dump (x);
194 1.1 mrg printf ("Got "); mpfr_dump (y);
195 1.1 mrg exit (1);
196 1.1 mrg }
197 1.1 mrg
198 1.1 mrg mpfr_set_ui (x, 17, MPFR_RNDN);
199 1.1 mrg mpfr_jn (y, 256, x, MPFR_RNDN);
200 1.1 mrg mpfr_set_str_binary (x, "0.11111101111100110000000010111101101011101011110001011E-894");
201 1.1 mrg if (mpfr_cmp (x, y))
202 1.1 mrg {
203 1.1 mrg printf ("Error in mpfr_jn for n=256, x=17, rnd=MPFR_RNDN\n");
204 1.1 mrg printf ("Expected "); mpfr_dump (x);
205 1.1 mrg printf ("Got "); mpfr_dump (y);
206 1.1 mrg exit (1);
207 1.1 mrg }
208 1.1 mrg
209 1.1 mrg mpfr_set_ui (x, 17, MPFR_RNDN);
210 1.1 mrg mpfr_jn (y, 65536, x, MPFR_RNDN);
211 1.1 mrg mpfr_set_str_binary (x, "100010010010011010110101100001000100011100010111011E-751747");
212 1.1 mrg if (mpfr_cmp (x, y))
213 1.1 mrg {
214 1.1 mrg printf ("Error in mpfr_jn for n=65536, x=17, rnd=MPFR_RNDN\n");
215 1.1 mrg printf ("Expected "); mpfr_dump (x);
216 1.1 mrg printf ("Got "); mpfr_dump (y);
217 1.1 mrg exit (1);
218 1.1 mrg }
219 1.1 mrg
220 1.1 mrg mpfr_set_ui (x, 17, MPFR_RNDN);
221 1.1 mrg mpfr_jn (y, 131072, x, MPFR_RNDN);
222 1.1 mrg mpfr_set_str_binary (x, "1000001001110011111001110110000010011010000001001101E-1634508");
223 1.1 mrg if (mpfr_cmp (x, y))
224 1.1 mrg {
225 1.1 mrg printf ("Error in mpfr_jn for n=131072, x=17, rnd=MPFR_RNDN\n");
226 1.1 mrg printf ("Expected "); mpfr_dump (x);
227 1.1 mrg printf ("Got "); mpfr_dump (y);
228 1.1 mrg exit (1);
229 1.1 mrg }
230 1.1 mrg
231 1.1 mrg mpfr_set_ui (x, 17, MPFR_RNDN);
232 1.1 mrg mpfr_jn (y, 262144, x, MPFR_RNDN);
233 1.1 mrg mpfr_set_str_binary (x, "1010011011000100111011001011110001000010000010111111E-3531100");
234 1.1 mrg if (mpfr_cmp (x, y))
235 1.1 mrg {
236 1.1 mrg printf ("Error in mpfr_jn for n=262144, x=17, rnd=MPFR_RNDN\n");
237 1.1 mrg printf ("Expected "); mpfr_dump (x);
238 1.1 mrg printf ("Got "); mpfr_dump (y);
239 1.1 mrg exit (1);
240 1.1 mrg }
241 1.1 mrg
242 1.1 mrg mpfr_set_ui (x, 17, MPFR_RNDN);
243 1.1 mrg mpfr_jn (y, 524288, x, MPFR_RNDN);
244 1.1 mrg mpfr_set_str_binary (x, "110000001010001111011011000011001011010100010001011E-7586426");
245 1.1 mrg if (mpfr_cmp (x, y))
246 1.1 mrg {
247 1.1 mrg printf ("Error in mpfr_jn for n=524288, x=17, rnd=MPFR_RNDN\n");
248 1.1 mrg printf ("Expected "); mpfr_dump (x);
249 1.1 mrg printf ("Got "); mpfr_dump (y);
250 1.1 mrg exit (1);
251 1.1 mrg }
252 1.1 mrg
253 1.1 mrg n = LONG_MAX;
254 1.1 mrg /* ensures n is odd */
255 1.1 mrg if (n % 2 == 0)
256 1.1 mrg n --;
257 1.1 mrg mpfr_set_ui (x, 17, MPFR_RNDN);
258 1.1 mrg mpfr_jn (y, n, x, MPFR_RNDN);
259 1.1 mrg mpfr_set_str_binary (x, "0.0");
260 1.1 mrg if (mpfr_cmp (x, y))
261 1.1 mrg {
262 1.1 mrg printf ("Error in mpfr_jn for n=%ld, x=17, rnd=MPFR_RNDN\n", n);
263 1.1 mrg printf ("Expected "); mpfr_dump (x);
264 1.1 mrg printf ("Got "); mpfr_dump (y);
265 1.1 mrg exit (1);
266 1.1 mrg }
267 1.1 mrg
268 1.1 mrg mpfr_set_si (x, -17, MPFR_RNDN);
269 1.1 mrg mpfr_jn (y, n, x, MPFR_RNDN);
270 1.1 mrg mpfr_set_str_binary (x, "-0.0");
271 1.1 mrg if (mpfr_cmp (x, y))
272 1.1 mrg {
273 1.1 mrg printf ("Error in mpfr_jn for n=%ld, x=-17, rnd=MPFR_RNDN\n", n);
274 1.1 mrg printf ("Expected "); mpfr_dump (x);
275 1.1 mrg printf ("Got "); mpfr_dump (y);
276 1.1 mrg exit (1);
277 1.1 mrg }
278 1.1 mrg
279 1.1 mrg mpfr_set_ui (x, 17, MPFR_RNDN);
280 1.1 mrg mpfr_jn (y, -n, x, MPFR_RNDN);
281 1.1 mrg mpfr_set_str_binary (x, "-0.0");
282 1.1 mrg if (mpfr_cmp (x, y))
283 1.1 mrg {
284 1.1 mrg printf ("Error in mpfr_jn for n=%ld, x=17, rnd=MPFR_RNDN\n", -n);
285 1.1 mrg printf ("Expected "); mpfr_dump (x);
286 1.1 mrg printf ("Got "); mpfr_dump (y);
287 1.1 mrg exit (1);
288 1.1 mrg }
289 1.1 mrg
290 1.1 mrg mpfr_set_si (x, -17, MPFR_RNDN);
291 1.1 mrg mpfr_jn (y, -n, x, MPFR_RNDN);
292 1.1 mrg mpfr_set_str_binary (x, "0.0");
293 1.1 mrg if (mpfr_cmp (x, y))
294 1.1 mrg {
295 1.1 mrg printf ("Error in mpfr_jn for n=%ld, x=-17, rnd=MPFR_RNDN\n", -n);
296 1.1 mrg printf ("Expected "); mpfr_dump (x);
297 1.1 mrg printf ("Got "); mpfr_dump (y);
298 1.1 mrg exit (1);
299 1.1 mrg }
300 1.1 mrg
301 1.1 mrg mpfr_clear (x);
302 1.1 mrg mpfr_clear (y);
303 1.1 mrg
304 1.1 mrg tests_end_mpfr ();
305 1.1 mrg
306 1.1 mrg return 0;
307 1.1 mrg }
308