|
Packit |
67cb25 |
/* specfunc/airy_der.c
|
|
Packit |
67cb25 |
*
|
|
Packit |
67cb25 |
* Copyright (C) 1996, 1997, 1998, 1999, 2000 Gerard Jungman
|
|
Packit |
67cb25 |
*
|
|
Packit |
67cb25 |
* This program is free software; you can redistribute it and/or modify
|
|
Packit |
67cb25 |
* it under the terms of the GNU General Public License as published by
|
|
Packit |
67cb25 |
* the Free Software Foundation; either version 3 of the License, or (at
|
|
Packit |
67cb25 |
* your option) any later version.
|
|
Packit |
67cb25 |
*
|
|
Packit |
67cb25 |
* This program is distributed in the hope that it will be useful, but
|
|
Packit |
67cb25 |
* WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
Packit |
67cb25 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
Packit |
67cb25 |
* General Public License for more details.
|
|
Packit |
67cb25 |
*
|
|
Packit |
67cb25 |
* You should have received a copy of the GNU General Public License
|
|
Packit |
67cb25 |
* along with this program; if not, write to the Free Software
|
|
Packit |
67cb25 |
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/* Author: G. Jungman */
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
#include <config.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_math.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_errno.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_sf_exp.h>
|
|
Packit |
67cb25 |
#include <gsl/gsl_sf_airy.h>
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
#include "error.h"
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
#include "chebyshev.h"
|
|
Packit |
67cb25 |
#include "cheb_eval_mode.c"
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*-*-*-*-*-*-*-*-*-*-*-* Private Section *-*-*-*-*-*-*-*-*-*-*-*/
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/* based on SLATEC aide.f, bide.f, aid.f, bid.f, r9admp.f */
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*
|
|
Packit |
67cb25 |
series for aif on the interval -1.00000e+00 to 1.00000e+00
|
|
Packit |
67cb25 |
with weighted error 5.22e-18
|
|
Packit |
67cb25 |
log weighted error 17.28
|
|
Packit |
67cb25 |
significant figures required 16.01
|
|
Packit |
67cb25 |
decimal places required 17.73
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
static double aif_data[8] = {
|
|
Packit |
67cb25 |
0.10527461226531408809,
|
|
Packit |
67cb25 |
0.01183613628152997844,
|
|
Packit |
67cb25 |
0.00012328104173225664,
|
|
Packit |
67cb25 |
0.00000062261225638140,
|
|
Packit |
67cb25 |
0.00000000185298887844,
|
|
Packit |
67cb25 |
0.00000000000363328873,
|
|
Packit |
67cb25 |
0.00000000000000504622,
|
|
Packit |
67cb25 |
0.00000000000000000522
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
static cheb_series aif_cs = {
|
|
Packit |
67cb25 |
aif_data,
|
|
Packit |
67cb25 |
7,
|
|
Packit |
67cb25 |
-1, 1,
|
|
Packit |
67cb25 |
7
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*
|
|
Packit |
67cb25 |
series for aig on the interval -1.00000e+00 to 1.00000e+00
|
|
Packit |
67cb25 |
with weighted error 3.14e-19
|
|
Packit |
67cb25 |
log weighted error 18.50
|
|
Packit |
67cb25 |
significant figures required 17.44
|
|
Packit |
67cb25 |
decimal places required 18.98
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
static double aig_data[9] = {
|
|
Packit |
67cb25 |
0.021233878150918666852,
|
|
Packit |
67cb25 |
0.086315930335214406752,
|
|
Packit |
67cb25 |
0.001797594720383231358,
|
|
Packit |
67cb25 |
0.000014265499875550693,
|
|
Packit |
67cb25 |
0.000000059437995283683,
|
|
Packit |
67cb25 |
0.000000000152403366479,
|
|
Packit |
67cb25 |
0.000000000000264587660,
|
|
Packit |
67cb25 |
0.000000000000000331562,
|
|
Packit |
67cb25 |
0.000000000000000000314
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
static cheb_series aig_cs = {
|
|
Packit |
67cb25 |
aig_data,
|
|
Packit |
67cb25 |
8,
|
|
Packit |
67cb25 |
-1, 1,
|
|
Packit |
67cb25 |
8
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*
|
|
Packit |
67cb25 |
series for aip2 on the interval 0.00000e+00 to 1.25000e-01
|
|
Packit |
67cb25 |
with weighted error 2.15e-17
|
|
Packit |
67cb25 |
log weighted error 16.67
|
|
Packit |
67cb25 |
significant figures required 14.27
|
|
Packit |
67cb25 |
decimal places required 17.26
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
static double aip2_data[15] = {
|
|
Packit |
67cb25 |
0.0065457691989713757,
|
|
Packit |
67cb25 |
0.0023833724120774592,
|
|
Packit |
67cb25 |
-0.0000430700770220586,
|
|
Packit |
67cb25 |
0.0000015629125858629,
|
|
Packit |
67cb25 |
-0.0000000815417186163,
|
|
Packit |
67cb25 |
0.0000000054103738057,
|
|
Packit |
67cb25 |
-0.0000000004284130883,
|
|
Packit |
67cb25 |
0.0000000000389497963,
|
|
Packit |
67cb25 |
-0.0000000000039623161,
|
|
Packit |
67cb25 |
0.0000000000004428184,
|
|
Packit |
67cb25 |
-0.0000000000000536297,
|
|
Packit |
67cb25 |
0.0000000000000069650,
|
|
Packit |
67cb25 |
-0.0000000000000009620,
|
|
Packit |
67cb25 |
0.0000000000000001403,
|
|
Packit |
67cb25 |
-0.0000000000000000215
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
static cheb_series aip2_cs = {
|
|
Packit |
67cb25 |
aip2_data,
|
|
Packit |
67cb25 |
14,
|
|
Packit |
67cb25 |
-1, 1,
|
|
Packit |
67cb25 |
9
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*
|
|
Packit |
67cb25 |
series for aip1 on the interval 1.25000e-01 to 1.00000e+00
|
|
Packit |
67cb25 |
with weighted error 2.60e-17
|
|
Packit |
67cb25 |
log weighted error 16.58
|
|
Packit |
67cb25 |
significant figures required 14.91
|
|
Packit |
67cb25 |
decimal places required 17.28
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
static double aip1_data[25] = {
|
|
Packit |
67cb25 |
0.0358865097808301538,
|
|
Packit |
67cb25 |
0.0114668575627764899,
|
|
Packit |
67cb25 |
-0.0007592073583861400,
|
|
Packit |
67cb25 |
0.0000869517610893841,
|
|
Packit |
67cb25 |
-0.0000128237294298592,
|
|
Packit |
67cb25 |
0.0000022062695681038,
|
|
Packit |
67cb25 |
-0.0000004222295185921,
|
|
Packit |
67cb25 |
0.0000000874686415726,
|
|
Packit |
67cb25 |
-0.0000000192773588418,
|
|
Packit |
67cb25 |
0.0000000044668460054,
|
|
Packit |
67cb25 |
-0.0000000010790108052,
|
|
Packit |
67cb25 |
0.0000000002700029447,
|
|
Packit |
67cb25 |
-0.0000000000696480108,
|
|
Packit |
67cb25 |
0.0000000000184489907,
|
|
Packit |
67cb25 |
-0.0000000000050027817,
|
|
Packit |
67cb25 |
0.0000000000013852243,
|
|
Packit |
67cb25 |
-0.0000000000003908218,
|
|
Packit |
67cb25 |
0.0000000000001121536,
|
|
Packit |
67cb25 |
-0.0000000000000326862,
|
|
Packit |
67cb25 |
0.0000000000000096619,
|
|
Packit |
67cb25 |
-0.0000000000000028935,
|
|
Packit |
67cb25 |
0.0000000000000008770,
|
|
Packit |
67cb25 |
-0.0000000000000002688,
|
|
Packit |
67cb25 |
0.0000000000000000832,
|
|
Packit |
67cb25 |
-0.0000000000000000260
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
static cheb_series aip1_cs = {
|
|
Packit |
67cb25 |
aip1_data,
|
|
Packit |
67cb25 |
24,
|
|
Packit |
67cb25 |
-1, 1,
|
|
Packit |
67cb25 |
14
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*
|
|
Packit |
67cb25 |
series for bif on the interval -1.00000e+00 to 1.00000e+00
|
|
Packit |
67cb25 |
with weighted error 9.05e-18
|
|
Packit |
67cb25 |
log weighted error 17.04
|
|
Packit |
67cb25 |
significant figures required 15.83
|
|
Packit |
67cb25 |
decimal places required 17.49
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
static double bif_data[8] = {
|
|
Packit |
67cb25 |
0.1153536790828570243,
|
|
Packit |
67cb25 |
0.0205007894049192875,
|
|
Packit |
67cb25 |
0.0002135290278902876,
|
|
Packit |
67cb25 |
0.0000010783960614677,
|
|
Packit |
67cb25 |
0.0000000032094708833,
|
|
Packit |
67cb25 |
0.0000000000062930407,
|
|
Packit |
67cb25 |
0.0000000000000087403,
|
|
Packit |
67cb25 |
0.0000000000000000090
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
static cheb_series bif_cs = {
|
|
Packit |
67cb25 |
bif_data,
|
|
Packit |
67cb25 |
7,
|
|
Packit |
67cb25 |
-1, 1,
|
|
Packit |
67cb25 |
7
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*
|
|
Packit |
67cb25 |
series for big on the interval -1.00000e+00 to 1.00000e+00
|
|
Packit |
67cb25 |
with weighted error 5.44e-19
|
|
Packit |
67cb25 |
log weighted error 18.26
|
|
Packit |
67cb25 |
significant figures required 17.46
|
|
Packit |
67cb25 |
decimal places required 18.74
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
static double big_data[9] = {
|
|
Packit |
67cb25 |
-0.097196440416443537390,
|
|
Packit |
67cb25 |
0.149503576843167066571,
|
|
Packit |
67cb25 |
0.003113525387121326042,
|
|
Packit |
67cb25 |
0.000024708570579821297,
|
|
Packit |
67cb25 |
0.000000102949627731379,
|
|
Packit |
67cb25 |
0.000000000263970373987,
|
|
Packit |
67cb25 |
0.000000000000458279271,
|
|
Packit |
67cb25 |
0.000000000000000574283,
|
|
Packit |
67cb25 |
0.000000000000000000544
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
static cheb_series big_cs = {
|
|
Packit |
67cb25 |
big_data,
|
|
Packit |
67cb25 |
8,
|
|
Packit |
67cb25 |
-1, 1,
|
|
Packit |
67cb25 |
8
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*
|
|
Packit |
67cb25 |
series for bif2 on the interval 1.00000e+00 to 8.00000e+00
|
|
Packit |
67cb25 |
with weighted error 3.82e-19
|
|
Packit |
67cb25 |
log weighted error 18.42
|
|
Packit |
67cb25 |
significant figures required 17.68
|
|
Packit |
67cb25 |
decimal places required 18.92
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
static double bif2_data[10] = {
|
|
Packit |
67cb25 |
0.323493987603522033521,
|
|
Packit |
67cb25 |
0.086297871535563559139,
|
|
Packit |
67cb25 |
0.002994025552655397426,
|
|
Packit |
67cb25 |
0.000051430528364661637,
|
|
Packit |
67cb25 |
0.000000525840250036811,
|
|
Packit |
67cb25 |
0.000000003561751373958,
|
|
Packit |
67cb25 |
0.000000000017146864007,
|
|
Packit |
67cb25 |
0.000000000000061663520,
|
|
Packit |
67cb25 |
0.000000000000000171911,
|
|
Packit |
67cb25 |
0.000000000000000000382
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
static cheb_series bif2_cs = {
|
|
Packit |
67cb25 |
bif2_data,
|
|
Packit |
67cb25 |
9,
|
|
Packit |
67cb25 |
-1, 1,
|
|
Packit |
67cb25 |
9
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*
|
|
Packit |
67cb25 |
series for big2 on the interval 1.00000e+00 to 8.00000e+00
|
|
Packit |
67cb25 |
with weighted error 3.35e-17
|
|
Packit |
67cb25 |
log weighted error 16.48
|
|
Packit |
67cb25 |
significant figures required 16.52
|
|
Packit |
67cb25 |
decimal places required 16.98
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
static double big2_data[10] = {
|
|
Packit |
67cb25 |
1.6062999463621294578,
|
|
Packit |
67cb25 |
0.7449088819876088652,
|
|
Packit |
67cb25 |
0.0470138738610277380,
|
|
Packit |
67cb25 |
0.0012284422062548239,
|
|
Packit |
67cb25 |
0.0000173222412256624,
|
|
Packit |
67cb25 |
0.0000001521901652368,
|
|
Packit |
67cb25 |
0.0000000009113560249,
|
|
Packit |
67cb25 |
0.0000000000039547918,
|
|
Packit |
67cb25 |
0.0000000000000130017,
|
|
Packit |
67cb25 |
0.0000000000000000335
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
static cheb_series big2_cs = {
|
|
Packit |
67cb25 |
big2_data,
|
|
Packit |
67cb25 |
9,
|
|
Packit |
67cb25 |
-1, 1,
|
|
Packit |
67cb25 |
9
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*
|
|
Packit |
67cb25 |
series for bip2 on the interval 0.00000e+00 to 1.25000e-01
|
|
Packit |
67cb25 |
with weighted error 2.07e-18
|
|
Packit |
67cb25 |
log weighted error 17.69
|
|
Packit |
67cb25 |
significant figures required 16.51
|
|
Packit |
67cb25 |
decimal places required 18.42
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
static double bip2_data[29] = {
|
|
Packit |
67cb25 |
-0.13269705443526630495,
|
|
Packit |
67cb25 |
-0.00568443626045977481,
|
|
Packit |
67cb25 |
-0.00015643601119611610,
|
|
Packit |
67cb25 |
-0.00001136737203679562,
|
|
Packit |
67cb25 |
-0.00000143464350991284,
|
|
Packit |
67cb25 |
-0.00000018098531185164,
|
|
Packit |
67cb25 |
0.00000000926177343611,
|
|
Packit |
67cb25 |
0.00000001710005490721,
|
|
Packit |
67cb25 |
0.00000000476698163504,
|
|
Packit |
67cb25 |
-0.00000000035195022023,
|
|
Packit |
67cb25 |
-0.00000000058890614316,
|
|
Packit |
67cb25 |
-0.00000000006678499608,
|
|
Packit |
67cb25 |
0.00000000006395565102,
|
|
Packit |
67cb25 |
0.00000000001554529427,
|
|
Packit |
67cb25 |
-0.00000000000792397000,
|
|
Packit |
67cb25 |
-0.00000000000258326243,
|
|
Packit |
67cb25 |
0.00000000000121655048,
|
|
Packit |
67cb25 |
0.00000000000038707207,
|
|
Packit |
67cb25 |
-0.00000000000022487045,
|
|
Packit |
67cb25 |
-0.00000000000004953477,
|
|
Packit |
67cb25 |
0.00000000000004563782,
|
|
Packit |
67cb25 |
0.00000000000000332998,
|
|
Packit |
67cb25 |
-0.00000000000000921750,
|
|
Packit |
67cb25 |
0.00000000000000094157,
|
|
Packit |
67cb25 |
0.00000000000000167154,
|
|
Packit |
67cb25 |
-0.00000000000000055134,
|
|
Packit |
67cb25 |
-0.00000000000000022369,
|
|
Packit |
67cb25 |
0.00000000000000017487,
|
|
Packit |
67cb25 |
0.00000000000000000207
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
static cheb_series bip2_cs = {
|
|
Packit |
67cb25 |
bip2_data,
|
|
Packit |
67cb25 |
28,
|
|
Packit |
67cb25 |
-1, 1,
|
|
Packit |
67cb25 |
14
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*
|
|
Packit |
67cb25 |
series for bip1 on the interval 1.25000e-01 to 3.53553e-01
|
|
Packit |
67cb25 |
with weighted error 1.86e-17
|
|
Packit |
67cb25 |
log weighted error 16.73
|
|
Packit |
67cb25 |
significant figures required 15.67
|
|
Packit |
67cb25 |
decimal places required 17.42
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
static double bip1_data[24] = {
|
|
Packit |
67cb25 |
-0.1729187351079553719,
|
|
Packit |
67cb25 |
-0.0149358492984694364,
|
|
Packit |
67cb25 |
-0.0005471104951678566,
|
|
Packit |
67cb25 |
0.0001537966292958408,
|
|
Packit |
67cb25 |
0.0000154353476192179,
|
|
Packit |
67cb25 |
-0.0000065434113851906,
|
|
Packit |
67cb25 |
0.0000003728082407879,
|
|
Packit |
67cb25 |
0.0000002072078388189,
|
|
Packit |
67cb25 |
-0.0000000658173336470,
|
|
Packit |
67cb25 |
0.0000000074926746354,
|
|
Packit |
67cb25 |
0.0000000011101336884,
|
|
Packit |
67cb25 |
-0.0000000007265140553,
|
|
Packit |
67cb25 |
0.0000000001782723560,
|
|
Packit |
67cb25 |
-0.0000000000217346352,
|
|
Packit |
67cb25 |
-0.0000000000020302035,
|
|
Packit |
67cb25 |
0.0000000000019311827,
|
|
Packit |
67cb25 |
-0.0000000000006044953,
|
|
Packit |
67cb25 |
0.0000000000001209450,
|
|
Packit |
67cb25 |
-0.0000000000000125109,
|
|
Packit |
67cb25 |
-0.0000000000000019917,
|
|
Packit |
67cb25 |
0.0000000000000015154,
|
|
Packit |
67cb25 |
-0.0000000000000004977,
|
|
Packit |
67cb25 |
0.0000000000000001155,
|
|
Packit |
67cb25 |
-0.0000000000000000186
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
static cheb_series bip1_cs = {
|
|
Packit |
67cb25 |
bip1_data,
|
|
Packit |
67cb25 |
23,
|
|
Packit |
67cb25 |
-1, 1,
|
|
Packit |
67cb25 |
13
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*
|
|
Packit |
67cb25 |
series for an22 on the interval -1.00000e+00 to -1.25000e-01
|
|
Packit |
67cb25 |
with weighted error 3.30e-17
|
|
Packit |
67cb25 |
log weighted error 16.48
|
|
Packit |
67cb25 |
significant figures required 14.95
|
|
Packit |
67cb25 |
decimal places required 17.24
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
static double an22_data[33] = {
|
|
Packit |
67cb25 |
0.0537418629629794329,
|
|
Packit |
67cb25 |
-0.0126661435859883193,
|
|
Packit |
67cb25 |
-0.0011924334106593007,
|
|
Packit |
67cb25 |
-0.0002032327627275655,
|
|
Packit |
67cb25 |
-0.0000446468963075164,
|
|
Packit |
67cb25 |
-0.0000113359036053123,
|
|
Packit |
67cb25 |
-0.0000031641352378546,
|
|
Packit |
67cb25 |
-0.0000009446708886149,
|
|
Packit |
67cb25 |
-0.0000002966562236472,
|
|
Packit |
67cb25 |
-0.0000000969118892024,
|
|
Packit |
67cb25 |
-0.0000000326822538653,
|
|
Packit |
67cb25 |
-0.0000000113144618964,
|
|
Packit |
67cb25 |
-0.0000000040042691002,
|
|
Packit |
67cb25 |
-0.0000000014440333684,
|
|
Packit |
67cb25 |
-0.0000000005292853746,
|
|
Packit |
67cb25 |
-0.0000000001967763374,
|
|
Packit |
67cb25 |
-0.0000000000740800096,
|
|
Packit |
67cb25 |
-0.0000000000282016314,
|
|
Packit |
67cb25 |
-0.0000000000108440066,
|
|
Packit |
67cb25 |
-0.0000000000042074801,
|
|
Packit |
67cb25 |
-0.0000000000016459150,
|
|
Packit |
67cb25 |
-0.0000000000006486827,
|
|
Packit |
67cb25 |
-0.0000000000002574095,
|
|
Packit |
67cb25 |
-0.0000000000001027889,
|
|
Packit |
67cb25 |
-0.0000000000000412846,
|
|
Packit |
67cb25 |
-0.0000000000000166711,
|
|
Packit |
67cb25 |
-0.0000000000000067657,
|
|
Packit |
67cb25 |
-0.0000000000000027585,
|
|
Packit |
67cb25 |
-0.0000000000000011296,
|
|
Packit |
67cb25 |
-0.0000000000000004645,
|
|
Packit |
67cb25 |
-0.0000000000000001917,
|
|
Packit |
67cb25 |
-0.0000000000000000794,
|
|
Packit |
67cb25 |
-0.0000000000000000330
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
static cheb_series an22_cs = {
|
|
Packit |
67cb25 |
an22_data,
|
|
Packit |
67cb25 |
32,
|
|
Packit |
67cb25 |
-1, 1,
|
|
Packit |
67cb25 |
18
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*
|
|
Packit |
67cb25 |
series for an21 on the interval -1.25000e-01 to -1.56250e-02
|
|
Packit |
67cb25 |
with weighted error 3.43e-17
|
|
Packit |
67cb25 |
log weighted error 16.47
|
|
Packit |
67cb25 |
significant figures required 14.48
|
|
Packit |
67cb25 |
decimal places required 17.16
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
static double an21_data[24] = {
|
|
Packit |
67cb25 |
0.0198313155263169394,
|
|
Packit |
67cb25 |
-0.0029376249067087533,
|
|
Packit |
67cb25 |
-0.0001136260695958196,
|
|
Packit |
67cb25 |
-0.0000100554451087156,
|
|
Packit |
67cb25 |
-0.0000013048787116563,
|
|
Packit |
67cb25 |
-0.0000002123881993151,
|
|
Packit |
67cb25 |
-0.0000000402270833384,
|
|
Packit |
67cb25 |
-0.0000000084996745953,
|
|
Packit |
67cb25 |
-0.0000000019514839426,
|
|
Packit |
67cb25 |
-0.0000000004783865344,
|
|
Packit |
67cb25 |
-0.0000000001236733992,
|
|
Packit |
67cb25 |
-0.0000000000334137486,
|
|
Packit |
67cb25 |
-0.0000000000093702824,
|
|
Packit |
67cb25 |
-0.0000000000027130128,
|
|
Packit |
67cb25 |
-0.0000000000008075954,
|
|
Packit |
67cb25 |
-0.0000000000002463214,
|
|
Packit |
67cb25 |
-0.0000000000000767656,
|
|
Packit |
67cb25 |
-0.0000000000000243883,
|
|
Packit |
67cb25 |
-0.0000000000000078831,
|
|
Packit |
67cb25 |
-0.0000000000000025882,
|
|
Packit |
67cb25 |
-0.0000000000000008619,
|
|
Packit |
67cb25 |
-0.0000000000000002908,
|
|
Packit |
67cb25 |
-0.0000000000000000993,
|
|
Packit |
67cb25 |
-0.0000000000000000343
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
static cheb_series an21_cs = {
|
|
Packit |
67cb25 |
an21_data,
|
|
Packit |
67cb25 |
23,
|
|
Packit |
67cb25 |
-1, 1,
|
|
Packit |
67cb25 |
12
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*
|
|
Packit |
67cb25 |
series for an20 on the interval -1.56250e-02 to 0.00000e+00
|
|
Packit |
67cb25 |
with weighted error 4.41e-17
|
|
Packit |
67cb25 |
log weighted error 16.36
|
|
Packit |
67cb25 |
significant figures required 14.16
|
|
Packit |
67cb25 |
decimal places required 16.96
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
static double an20_data[16] = {
|
|
Packit |
67cb25 |
0.0126732217145738027,
|
|
Packit |
67cb25 |
-0.0005212847072615621,
|
|
Packit |
67cb25 |
-0.0000052672111140370,
|
|
Packit |
67cb25 |
-0.0000001628202185026,
|
|
Packit |
67cb25 |
-0.0000000090991442687,
|
|
Packit |
67cb25 |
-0.0000000007438647126,
|
|
Packit |
67cb25 |
-0.0000000000795494752,
|
|
Packit |
67cb25 |
-0.0000000000104050944,
|
|
Packit |
67cb25 |
-0.0000000000015932426,
|
|
Packit |
67cb25 |
-0.0000000000002770648,
|
|
Packit |
67cb25 |
-0.0000000000000535343,
|
|
Packit |
67cb25 |
-0.0000000000000113062,
|
|
Packit |
67cb25 |
-0.0000000000000025772,
|
|
Packit |
67cb25 |
-0.0000000000000006278,
|
|
Packit |
67cb25 |
-0.0000000000000001621,
|
|
Packit |
67cb25 |
-0.0000000000000000441
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
static cheb_series an20_cs = {
|
|
Packit |
67cb25 |
an20_data,
|
|
Packit |
67cb25 |
15,
|
|
Packit |
67cb25 |
-1, 1,
|
|
Packit |
67cb25 |
8
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*
|
|
Packit |
67cb25 |
series for aph2 on the interval -1.00000e+00 to -1.25000e-01
|
|
Packit |
67cb25 |
with weighted error 2.94e-17
|
|
Packit |
67cb25 |
log weighted error 16.53
|
|
Packit |
67cb25 |
significant figures required 15.58
|
|
Packit |
67cb25 |
decimal places required 17.28
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
static double aph2_data[32] = {
|
|
Packit |
67cb25 |
-0.2057088719781465107,
|
|
Packit |
67cb25 |
0.0422196961357771922,
|
|
Packit |
67cb25 |
0.0020482560511207275,
|
|
Packit |
67cb25 |
0.0002607800735165006,
|
|
Packit |
67cb25 |
0.0000474824268004729,
|
|
Packit |
67cb25 |
0.0000105102756431612,
|
|
Packit |
67cb25 |
0.0000026353534014668,
|
|
Packit |
67cb25 |
0.0000007208824863499,
|
|
Packit |
67cb25 |
0.0000002103236664473,
|
|
Packit |
67cb25 |
0.0000000644975634555,
|
|
Packit |
67cb25 |
0.0000000205802377264,
|
|
Packit |
67cb25 |
0.0000000067836273921,
|
|
Packit |
67cb25 |
0.0000000022974015284,
|
|
Packit |
67cb25 |
0.0000000007961306765,
|
|
Packit |
67cb25 |
0.0000000002813860610,
|
|
Packit |
67cb25 |
0.0000000001011749057,
|
|
Packit |
67cb25 |
0.0000000000369306738,
|
|
Packit |
67cb25 |
0.0000000000136615066,
|
|
Packit |
67cb25 |
0.0000000000051142751,
|
|
Packit |
67cb25 |
0.0000000000019351689,
|
|
Packit |
67cb25 |
0.0000000000007393607,
|
|
Packit |
67cb25 |
0.0000000000002849792,
|
|
Packit |
67cb25 |
0.0000000000001107281,
|
|
Packit |
67cb25 |
0.0000000000000433412,
|
|
Packit |
67cb25 |
0.0000000000000170801,
|
|
Packit |
67cb25 |
0.0000000000000067733,
|
|
Packit |
67cb25 |
0.0000000000000027017,
|
|
Packit |
67cb25 |
0.0000000000000010835,
|
|
Packit |
67cb25 |
0.0000000000000004367,
|
|
Packit |
67cb25 |
0.0000000000000001769,
|
|
Packit |
67cb25 |
0.0000000000000000719,
|
|
Packit |
67cb25 |
0.0000000000000000294
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
static cheb_series aph2_cs = {
|
|
Packit |
67cb25 |
aph2_data,
|
|
Packit |
67cb25 |
31,
|
|
Packit |
67cb25 |
-1, 1,
|
|
Packit |
67cb25 |
16
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*
|
|
Packit |
67cb25 |
series for aph1 on the interval -1.25000e-01 to -1.56250e-02
|
|
Packit |
67cb25 |
with weighted error 6.38e-17
|
|
Packit |
67cb25 |
log weighted error 16.20
|
|
Packit |
67cb25 |
significant figures required 14.91
|
|
Packit |
67cb25 |
decimal places required 16.87
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
static double aph1_data[22] = {
|
|
Packit |
67cb25 |
-0.1024172908077571694,
|
|
Packit |
67cb25 |
0.0071697275146591248,
|
|
Packit |
67cb25 |
0.0001209959363122329,
|
|
Packit |
67cb25 |
0.0000073361512841220,
|
|
Packit |
67cb25 |
0.0000007535382954272,
|
|
Packit |
67cb25 |
0.0000001041478171741,
|
|
Packit |
67cb25 |
0.0000000174358728519,
|
|
Packit |
67cb25 |
0.0000000033399795033,
|
|
Packit |
67cb25 |
0.0000000007073075174,
|
|
Packit |
67cb25 |
0.0000000001619187515,
|
|
Packit |
67cb25 |
0.0000000000394539982,
|
|
Packit |
67cb25 |
0.0000000000101192282,
|
|
Packit |
67cb25 |
0.0000000000027092778,
|
|
Packit |
67cb25 |
0.0000000000007523806,
|
|
Packit |
67cb25 |
0.0000000000002156369,
|
|
Packit |
67cb25 |
0.0000000000000635283,
|
|
Packit |
67cb25 |
0.0000000000000191757,
|
|
Packit |
67cb25 |
0.0000000000000059143,
|
|
Packit |
67cb25 |
0.0000000000000018597,
|
|
Packit |
67cb25 |
0.0000000000000005950,
|
|
Packit |
67cb25 |
0.0000000000000001934,
|
|
Packit |
67cb25 |
0.0000000000000000638
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
static cheb_series aph1_cs = {
|
|
Packit |
67cb25 |
aph1_data,
|
|
Packit |
67cb25 |
21,
|
|
Packit |
67cb25 |
-1, 1,
|
|
Packit |
67cb25 |
10
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*
|
|
Packit |
67cb25 |
series for aph0 on the interval -1.56250e-02 to 0.00000e+00
|
|
Packit |
67cb25 |
with weighted error 2.29e-17
|
|
Packit |
67cb25 |
log weighted error 16.64
|
|
Packit |
67cb25 |
significant figures required 15.27
|
|
Packit |
67cb25 |
decimal places required 17.23
|
|
Packit |
67cb25 |
*/
|
|
Packit |
67cb25 |
static double aph0_data[15] = {
|
|
Packit |
67cb25 |
-0.0855849241130933257,
|
|
Packit |
67cb25 |
0.0011214378867065261,
|
|
Packit |
67cb25 |
0.0000042721029353664,
|
|
Packit |
67cb25 |
0.0000000817607381483,
|
|
Packit |
67cb25 |
0.0000000033907645000,
|
|
Packit |
67cb25 |
0.0000000002253264423,
|
|
Packit |
67cb25 |
0.0000000000206284209,
|
|
Packit |
67cb25 |
0.0000000000023858763,
|
|
Packit |
67cb25 |
0.0000000000003301618,
|
|
Packit |
67cb25 |
0.0000000000000527010,
|
|
Packit |
67cb25 |
0.0000000000000094555,
|
|
Packit |
67cb25 |
0.0000000000000018709,
|
|
Packit |
67cb25 |
0.0000000000000004024,
|
|
Packit |
67cb25 |
0.0000000000000000930,
|
|
Packit |
67cb25 |
0.0000000000000000229
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
static cheb_series aph0_cs = {
|
|
Packit |
67cb25 |
aph0_data,
|
|
Packit |
67cb25 |
14,
|
|
Packit |
67cb25 |
-1, 1,
|
|
Packit |
67cb25 |
7
|
|
Packit |
67cb25 |
};
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
static
|
|
Packit |
67cb25 |
int
|
|
Packit |
67cb25 |
airy_deriv_mod_phase(const double x, gsl_mode_t mode,
|
|
Packit |
67cb25 |
gsl_sf_result * ampl, gsl_sf_result * phi)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
const double pi34 = 2.356194490192344928847;
|
|
Packit |
67cb25 |
gsl_sf_result result_a;
|
|
Packit |
67cb25 |
gsl_sf_result result_p;
|
|
Packit |
67cb25 |
double a, p;
|
|
Packit |
67cb25 |
double sqx;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
if(x <= -4.0) {
|
|
Packit |
67cb25 |
double z = 128.0/(x*x*x) + 1.0;
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&an20_cs, z, mode, &result_a);
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&aph0_cs, z, mode, &result_p);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else if(x <= -2.0) {
|
|
Packit |
67cb25 |
double z = (128.0/(x*x*x) + 9.0) / 7.0;
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&an21_cs, z, mode, &result_a);
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&aph1_cs, z, mode, &result_p);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else if(x <= -1.0) {
|
|
Packit |
67cb25 |
double z = (16.0/(x*x*x) + 9.0) / 7.0;
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&an22_cs, z, mode, &result_a);
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&aph2_cs, z, mode, &result_p);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else {
|
|
Packit |
67cb25 |
ampl->val = 0.0;
|
|
Packit |
67cb25 |
ampl->err = 0.0;
|
|
Packit |
67cb25 |
phi->val = 0.0;
|
|
Packit |
67cb25 |
phi->err = 0.0;
|
|
Packit |
67cb25 |
GSL_ERROR ("x is greater than 1.0", GSL_EDOM);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
a = 0.3125 + result_a.val;
|
|
Packit |
67cb25 |
p = -0.625 + result_p.val;
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
sqx = sqrt(-x);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
ampl->val = sqrt(a * sqx);
|
|
Packit |
67cb25 |
ampl->err = fabs(ampl->val) * (GSL_DBL_EPSILON + fabs(result_a.err/result_a.val));
|
|
Packit |
67cb25 |
phi->val = pi34 - x * sqx * p;
|
|
Packit |
67cb25 |
phi->err = fabs(phi->val) * (GSL_DBL_EPSILON + fabs(result_p.err/result_p.val));
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*-*-*-*-*-*-*-*-*-*-*-* Functions with Error Codes *-*-*-*-*-*-*-*-*-*-*-*/
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
int
|
|
Packit |
67cb25 |
gsl_sf_airy_Ai_deriv_scaled_e(const double x, gsl_mode_t mode, gsl_sf_result * result)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
/* CHECK_POINTER(result) */
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
if(x < -1.0) {
|
|
Packit |
67cb25 |
gsl_sf_result a;
|
|
Packit |
67cb25 |
gsl_sf_result p;
|
|
Packit |
67cb25 |
int status_ap = airy_deriv_mod_phase(x, mode, &a, &p);
|
|
Packit |
67cb25 |
double c = cos(p.val);
|
|
Packit |
67cb25 |
result->val = a.val * c;
|
|
Packit |
67cb25 |
result->err = fabs(result->val * p.err) + fabs(c * a.err);
|
|
Packit |
67cb25 |
result->err += GSL_DBL_EPSILON * fabs(result->val);
|
|
Packit |
67cb25 |
return status_ap;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else if(x <= 1.0) {
|
|
Packit |
67cb25 |
const double x3 = x*x*x;
|
|
Packit |
67cb25 |
const double x2 = x*x;
|
|
Packit |
67cb25 |
gsl_sf_result result_c0;
|
|
Packit |
67cb25 |
gsl_sf_result result_c1;
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&aif_cs, x3, mode, &result_c0);
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&aig_cs, x3, mode, &result_c1);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
result->val = (x2*(0.125 + result_c0.val) - result_c1.val) - 0.25;
|
|
Packit |
67cb25 |
result->err = fabs(x2*result_c0.val) + result_c1.err;
|
|
Packit |
67cb25 |
result->err += GSL_DBL_EPSILON * fabs(result->val);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
if(x > GSL_ROOT3_DBL_EPSILON*GSL_ROOT3_DBL_EPSILON) {
|
|
Packit |
67cb25 |
/* scale only if x is positive */
|
|
Packit |
67cb25 |
double s = exp(2.0*x*sqrt(x)/3.0);
|
|
Packit |
67cb25 |
result->val *= s;
|
|
Packit |
67cb25 |
result->err *= s;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else if(x <= 4.0) {
|
|
Packit |
67cb25 |
const double sqrtx = sqrt(x);
|
|
Packit |
67cb25 |
const double z = (16.0/(x*sqrtx) - 9.0)/7.0;
|
|
Packit |
67cb25 |
const double s = sqrt(sqrtx);
|
|
Packit |
67cb25 |
gsl_sf_result result_c0;
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&aip1_cs, z, mode, &result_c0);
|
|
Packit |
67cb25 |
result->val = -(0.28125 + result_c0.val) * s;
|
|
Packit |
67cb25 |
result->err = result_c0.err * s;
|
|
Packit |
67cb25 |
result->err += GSL_DBL_EPSILON * fabs(result->val);
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else {
|
|
Packit |
67cb25 |
const double sqrtx = sqrt(x);
|
|
Packit |
67cb25 |
const double z = 16.0/(x*sqrtx) - 1.0;
|
|
Packit |
67cb25 |
const double s = sqrt(sqrtx);
|
|
Packit |
67cb25 |
gsl_sf_result result_c0;
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&aip2_cs, z, mode, &result_c0);
|
|
Packit |
67cb25 |
result->val = -(0.28125 + result_c0.val) * s;
|
|
Packit |
67cb25 |
result->err = result_c0.err * s;
|
|
Packit |
67cb25 |
result->err += GSL_DBL_EPSILON * fabs(result->val);
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
int
|
|
Packit |
67cb25 |
gsl_sf_airy_Ai_deriv_e(const double x, gsl_mode_t mode, gsl_sf_result * result)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
/* CHECK_POINTER(result) */
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
if(x < -1.0) {
|
|
Packit |
67cb25 |
gsl_sf_result a;
|
|
Packit |
67cb25 |
gsl_sf_result p;
|
|
Packit |
67cb25 |
int status_ap = airy_deriv_mod_phase(x, mode, &a, &p);
|
|
Packit |
67cb25 |
double c = cos(p.val);
|
|
Packit |
67cb25 |
result->val = a.val * c;
|
|
Packit |
67cb25 |
result->err = fabs(result->val * p.err) + fabs(c * a.err);
|
|
Packit |
67cb25 |
result->err += GSL_DBL_EPSILON * fabs(result->val);
|
|
Packit |
67cb25 |
return status_ap;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else if(x < 1.0) {
|
|
Packit |
67cb25 |
const double x3 = x*x*x;
|
|
Packit |
67cb25 |
gsl_sf_result result_c1;
|
|
Packit |
67cb25 |
gsl_sf_result result_c2;
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&aif_cs, x3, mode, &result_c1);
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&aig_cs, x3, mode, &result_c2);
|
|
Packit |
67cb25 |
result->val = (x*x*(0.125 + result_c1.val) - result_c2.val) - 0.25;
|
|
Packit |
67cb25 |
result->err = fabs(x*x*result_c1.err) + result_c2.err;
|
|
Packit |
67cb25 |
result->err += GSL_DBL_EPSILON * fabs(result->val);
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else if(x*x*x < 9.0/4.0 * GSL_LOG_DBL_MIN*GSL_LOG_DBL_MIN) {
|
|
Packit |
67cb25 |
gsl_sf_result result_aps;
|
|
Packit |
67cb25 |
const double arg = -2.0*x*sqrt(x)/3.0;
|
|
Packit |
67cb25 |
const int stat_a = gsl_sf_airy_Ai_deriv_scaled_e(x, mode, &result_aps);
|
|
Packit |
67cb25 |
const int stat_e = gsl_sf_exp_mult_err_e(arg, 1.5*fabs(arg*GSL_DBL_EPSILON),
|
|
Packit |
67cb25 |
result_aps.val, result_aps.err,
|
|
Packit |
67cb25 |
result);
|
|
Packit |
67cb25 |
return GSL_ERROR_SELECT_2(stat_e, stat_a);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else {
|
|
Packit |
67cb25 |
UNDERFLOW_ERROR(result);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
int
|
|
Packit |
67cb25 |
gsl_sf_airy_Bi_deriv_scaled_e(const double x, gsl_mode_t mode, gsl_sf_result * result)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
const double atr = 8.7506905708484345; /* 16./(sqrt(8)-1) */
|
|
Packit |
67cb25 |
const double btr = -2.0938363213560543; /* -(sqrt(8)+1)/(sqrt(8)-1) */
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/* CHECK_POINTER(result) */
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
if(x < -1.0) {
|
|
Packit |
67cb25 |
gsl_sf_result a;
|
|
Packit |
67cb25 |
gsl_sf_result p;
|
|
Packit |
67cb25 |
int status_ap = airy_deriv_mod_phase(x, mode, &a, &p);
|
|
Packit |
67cb25 |
double s = sin(p.val);
|
|
Packit |
67cb25 |
result->val = a.val * s;
|
|
Packit |
67cb25 |
result->err = fabs(result->val * p.err) + fabs(s * a.err);
|
|
Packit |
67cb25 |
result->err += GSL_DBL_EPSILON * fabs(result->val);
|
|
Packit |
67cb25 |
return status_ap;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else if(x < 1.0) {
|
|
Packit |
67cb25 |
const double x3 = x*x*x;
|
|
Packit |
67cb25 |
const double x2 = x*x;
|
|
Packit |
67cb25 |
gsl_sf_result result_c1;
|
|
Packit |
67cb25 |
gsl_sf_result result_c2;
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&bif_cs, x3, mode, &result_c1);
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&big_cs, x3, mode, &result_c2);
|
|
Packit |
67cb25 |
result->val = x2 * (result_c1.val + 0.25) + result_c2.val + 0.5;
|
|
Packit |
67cb25 |
result->err = x2 * result_c1.err + result_c2.err;
|
|
Packit |
67cb25 |
result->err += GSL_DBL_EPSILON * fabs(result->val);
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
if(x > GSL_ROOT3_DBL_EPSILON*GSL_ROOT3_DBL_EPSILON) {
|
|
Packit |
67cb25 |
/* scale only if x is positive */
|
|
Packit |
67cb25 |
const double s = exp(-2.0*x*sqrt(x)/3.0);
|
|
Packit |
67cb25 |
result->val *= s;
|
|
Packit |
67cb25 |
result->err *= s;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else if(x < 2.0) {
|
|
Packit |
67cb25 |
const double z = (2.0*x*x*x - 9.0) / 7.0;
|
|
Packit |
67cb25 |
const double s = exp(-2.0*x*sqrt(x)/3.0);
|
|
Packit |
67cb25 |
gsl_sf_result result_c0;
|
|
Packit |
67cb25 |
gsl_sf_result result_c1;
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&bif2_cs, z, mode, &result_c0);
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&big2_cs, z, mode, &result_c1);
|
|
Packit |
67cb25 |
result->val = s * (x*x * (0.25 + result_c0.val) + 0.5 + result_c1.val);
|
|
Packit |
67cb25 |
result->err = s * (x*x * result_c0.err + result_c1.err);
|
|
Packit |
67cb25 |
result->err += GSL_DBL_EPSILON * fabs(result->val);
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else if(x < 4.0) {
|
|
Packit |
67cb25 |
const double sqrtx = sqrt(x);
|
|
Packit |
67cb25 |
const double z = atr/(x*sqrtx) + btr;
|
|
Packit |
67cb25 |
const double s = sqrt(sqrtx);
|
|
Packit |
67cb25 |
gsl_sf_result result_c0;
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&bip1_cs, z, mode, &result_c0);
|
|
Packit |
67cb25 |
result->val = s * (0.625 + result_c0.val);
|
|
Packit |
67cb25 |
result->err = s * result_c0.err;
|
|
Packit |
67cb25 |
result->err += GSL_DBL_EPSILON * fabs(result->val);
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else {
|
|
Packit |
67cb25 |
const double sqrtx = sqrt(x);
|
|
Packit |
67cb25 |
const double z = 16.0/(x*sqrtx) - 1.0;
|
|
Packit |
67cb25 |
const double s = sqrt(sqrtx);
|
|
Packit |
67cb25 |
gsl_sf_result result_c0;
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&bip2_cs, z, mode, &result_c0);
|
|
Packit |
67cb25 |
result->val = s * (0.625 + result_c0.val);
|
|
Packit |
67cb25 |
result->err = s * result_c0.err;
|
|
Packit |
67cb25 |
result->err += GSL_DBL_EPSILON * fabs(result->val);
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
int
|
|
Packit |
67cb25 |
gsl_sf_airy_Bi_deriv_e(const double x, gsl_mode_t mode, gsl_sf_result * result)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
/* CHECK_POINTER(result) */
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
if(x < -1.0) {
|
|
Packit |
67cb25 |
gsl_sf_result a;
|
|
Packit |
67cb25 |
gsl_sf_result p;
|
|
Packit |
67cb25 |
int status_ap = airy_deriv_mod_phase(x, mode, &a, &p);
|
|
Packit |
67cb25 |
double s = sin(p.val);
|
|
Packit |
67cb25 |
result->val = a.val * s;
|
|
Packit |
67cb25 |
result->err = fabs(result->val * p.err) + fabs(s * a.err);
|
|
Packit |
67cb25 |
result->err += GSL_DBL_EPSILON * fabs(result->val);
|
|
Packit |
67cb25 |
return status_ap;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else if(x < 1.0) {
|
|
Packit |
67cb25 |
const double x3 = x*x*x;
|
|
Packit |
67cb25 |
const double x2 = x*x;
|
|
Packit |
67cb25 |
gsl_sf_result result_c1;
|
|
Packit |
67cb25 |
gsl_sf_result result_c2;
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&bif_cs, x3, mode, &result_c1);
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&big_cs, x3, mode, &result_c2);
|
|
Packit |
67cb25 |
result->val = x2 * (result_c1.val + 0.25) + result_c2.val + 0.5;
|
|
Packit |
67cb25 |
result->err = x2 * result_c1.err + result_c2.err;
|
|
Packit |
67cb25 |
result->err += GSL_DBL_EPSILON * fabs(result->val);
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else if(x < 2.0) {
|
|
Packit |
67cb25 |
const double z = (2.0*x*x*x - 9.0) / 7.0;
|
|
Packit |
67cb25 |
gsl_sf_result result_c1;
|
|
Packit |
67cb25 |
gsl_sf_result result_c2;
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&bif2_cs, z, mode, &result_c1);
|
|
Packit |
67cb25 |
cheb_eval_mode_e(&big2_cs, z, mode, &result_c2);
|
|
Packit |
67cb25 |
result->val = x*x * (result_c1.val + 0.25) + result_c2.val + 0.5;
|
|
Packit |
67cb25 |
result->err = x*x * result_c1.err + result_c2.err;
|
|
Packit |
67cb25 |
result->err += GSL_DBL_EPSILON * fabs(result->val);
|
|
Packit |
67cb25 |
return GSL_SUCCESS;
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else if(x < GSL_ROOT3_DBL_MAX*GSL_ROOT3_DBL_MAX) {
|
|
Packit |
67cb25 |
gsl_sf_result result_bps;
|
|
Packit |
67cb25 |
const double arg = 2.0*(x*sqrt(x)/3.0);
|
|
Packit |
67cb25 |
int stat_b = gsl_sf_airy_Bi_deriv_scaled_e(x, mode, &result_bps);
|
|
Packit |
67cb25 |
int stat_e = gsl_sf_exp_mult_err_e(arg, 1.5*fabs(arg*GSL_DBL_EPSILON),
|
|
Packit |
67cb25 |
result_bps.val, result_bps.err,
|
|
Packit |
67cb25 |
result);
|
|
Packit |
67cb25 |
return GSL_ERROR_SELECT_2(stat_e, stat_b);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
else {
|
|
Packit |
67cb25 |
OVERFLOW_ERROR(result);
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
/*-*-*-*-*-*-*-*-*-* Functions w/ Natural Prototypes *-*-*-*-*-*-*-*-*-*-*/
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
#include "eval.h"
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
double gsl_sf_airy_Ai_deriv_scaled(const double x, gsl_mode_t mode)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
EVAL_RESULT(gsl_sf_airy_Ai_deriv_scaled_e(x, mode, &result));
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
double gsl_sf_airy_Ai_deriv(const double x, gsl_mode_t mode)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
EVAL_RESULT(gsl_sf_airy_Ai_deriv_e(x, mode, &result));
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
double gsl_sf_airy_Bi_deriv_scaled(const double x, gsl_mode_t mode)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
EVAL_RESULT(gsl_sf_airy_Bi_deriv_scaled_e(x, mode, &result));
|
|
Packit |
67cb25 |
}
|
|
Packit |
67cb25 |
|
|
Packit |
67cb25 |
double gsl_sf_airy_Bi_deriv(const double x, gsl_mode_t mode)
|
|
Packit |
67cb25 |
{
|
|
Packit |
67cb25 |
EVAL_RESULT(gsl_sf_airy_Bi_deriv_e(x, mode, &result));
|
|
Packit |
67cb25 |
}
|