/* qairy.c
*
* Airy functions
*
*
*
* SYNOPSIS :
*
* int qairy ( x , ai , aip , bi , bip ) ;
* QELT * x , * ai , * aip , * bi , * bip ;
*
* qairy ( x , ai , aip , bi , bip ) ;
*
*
*
* DESCRIPTION :
*
* Solution of the differential equation
*
* y " ( x ) = xy .
*
* The function returns the two independent solutions Ai , Bi
* and their first derivatives Ai ' ( x ) , Bi ' ( x ) .
*
* Evaluation is by power series summation for small x ,
* by asymptotic expansion for large x .
*
*
* ACCURACY :
*
* The asymptotic expansion is truncated at less than full working precision .
*
*/
/*
Cephes Math Library Release 2 . 1 : January , 1989
Copyright 1984 , 1987 , 1989 by Stephen L . Moshier
*/
/* Airy functions */
#include "qhead.h"
/* Flag to determine which functions to compute.
* aiconf = 0 , compute all four functions .
* aiconf = 1 , do Ai , Bi only .
* aiconf = - 1 , do Ai ' , Bi ' only .
*/
int aiconf = 0 ;
extern int aiconf;
/* Gamma(1/3)
* = 2 . 6789385347077476336556929409746776441286893779573011009504283275904176 E0
*
* c2 = 1 / ( Gamma ( 1 / 3 ) * 3 * * ( 1 / 3 ) ) =
* 2 . 5881940379280679840518356018920396347909113835493458221000181385610277 E - 1
*/
#if WORDSIZE == 32
static QELT qc2[NQ] = {
0 ,EXPONE-2 ,0 ,0 x8483fa15,0 xb87c545d,0 x74df94a0,0 x43b3dc3c,0 xd463e126,
0 xba75161f,0 x4d851875,0 x3816a8c2,0 xc1c78a7d,0 x3ce1e0ba,0 xff140000,};
#else
/* WORDSIZE is 16 */
#if NQ == 24
static short qc2[NQ] = {
0 x0000,EXPONE-2 ,0 x0000,0 x8483,0 xfa15,0 xb87c,0 x545d,0 x74df,
0 x94a0,0 x43b3,0 xdc3c,0 xd463,0 xe126,0 xba75,0 x161f,0 x4d85,
0 x1875,0 x3816,0 xa8c2,0 xc1c7,0 x8a7d,0 x3ce1,0 xe0ba,0 xff14,};
#else
static short qc2[NQ] = {
0 x0000,EXPONE-2 ,0 x0000,0 x8483,0 xfa15,0 xb87c,0 x545d,0 x74df,
0 x94a0,0 x43b3,0 xdc3c,0 xd464};
#endif
#endif
/* Gamma(2/3)
* = 1 . 3541179394264004169452880281545137855193272660567936983940224679637830 E0
*
* c1 = 1 / ( Gamma ( 2 / 3 ) * 3 * * ( 2 / 3 ) ) =
* 3 . 5502805388781723926006318600418317639797917419917724058332651030081004 E - 1
*/
#if WORDSIZE == 32
static QELT qc1[NQ] = {
0 ,EXPONE-2 ,0 ,0 xb5c63cb1,0 x38adc2f5,0 x2daf7609,0 xcc9edb52,0 xf56200d6,
0 x4df3d6c8,0 x42466728,0 x441708ae,0 x08f972aa,0 xf93e7687,0 xa6880000};
#else
#if NQ == 24
static short qc1[NQ] = {
0 x0000,EXPONE-2 ,0 x0000,0 xb5c6,0 x3cb1,0 x38ad,0 xc2f5,0 x2daf,
0 x7609,0 xcc9e,0 xdb52,0 xf562,0 x00d6,0 x4df3,0 xd6c8,0 x4246,
0 x6728,0 x4417,0 x08ae,0 x08f9,0 x72aa,0 xf93e,0 x7687,0 xa688,};
#else
static short qc1[NQ] = {
0 x0000,EXPONE-2 ,0 x0000,0 xb5c6,0 x3cb1,0 x38ad,0 xc2f5,0 x2daf,
0 x7609,0 xcc9e,0 xdb52,0 xf562};
#endif
#endif
extern QELT qone[], qtwo[], qpi[];
static QELT qthree[NQ]; /* 1/3 */
static QELT qsqrt3[NQ];
static QELT q216[NQ];
static QELT qk[NQ];
static QELT qnum[NQ];
static QELT qden[NQ];
static QELT aif[NQ];
static QELT aig[NQ];
static QELT zeta[NQ];
static QELT aisin[NQ];
static QELT aicos[NQ];
static QELT z[NQ];
static QELT t[NQ];
static QELT uf[NQ];
static QELT ug[NQ];
static QELT iniflg = 0 ;
/*
extern QELT zeta [ ] , aisin [ ] , aicos [ ] ;
*/
#ifdef ANSIPROT
int qainfg(void ), qanfgp(void );
#else
int qainfg(), qanfgp();
int qgamma(), qcbrt();
#endif
int qairy( x, ai, aip, bi, bip )
QELT x[], ai[], aip[], bi[], bip[];
{
QELT temp[NQ];
int i, k;
QELT maxf;
long ll;
union
{
unsigned short s[4 ];
double d;
} dx;
ll = 216 ;
ltoq( &ll, q216);
qmov( x, t ); /* t = abs(x); */
t[0 ] = 0 ;
qclear( aisin );
qclear( aicos );
qclear( zeta );
if ( iniflg == 0 )
{
iniflg = 1 ;
qmov( qtwo, qthree );
qadd( qone, qthree, qthree );
qdiv( qthree, qone, qthree ); /* qthree = 1/3 */
qsqrt( qthree, qsqrt3 ); /* qsqrt3 = sqrt(1/3) */
}
if ( t[1 ] < 3 )
{
qgamma( qthree, uf ); /* gamma(1/3) */
qdiv( uf, qone, bip );
qcbrt( qthree, z ); /* cbrt(1/3) */
qmul( bip, z, aip );
qneg( aip );
qthree[1 ] += 1 ;
qgamma( qthree, ug ); /* gamma(2/3) */
qdiv( ug, z, bi );
qmul( z, bi, ai );
return (0 );
}
qmul( t, t, z ); /* z = t * t * t */
qmul( z, t, z );
qtoe( x, dx.s );
if ( dx.d > 20 .0 )
goto asymp;
if ( dx.d < -20 .0 )
goto aineg;
/* f, g */
t[0 ] = x[0 ]; /* put back the sign */
z[0 ] = x[0 ]; /* restore sign of z = x * x * x;*/
if ( aiconf < 0 )
goto doaip;
qmov( qone, aif ); /*f = 1.0;*/
qmov( t, aig ); /* g = x;*/
qmov( qone, uf ); /* uf = 1.0;*/
qmov( t, ug ); /* ug = x;*/
qmov( qone, qk ); /* k = 1.0;*/
while ( ((int ) aif[1 ] - (int ) uf[1 ]) < NBITS )
{
qmul( uf, z, uf ); /* uf *= z;*/
qadd( qone, qk, qk ); /* k += 1.0;*/
qdiv( qk, uf, uf ); /* uf /=k;*/
qmul( ug, z, ug ); /* ug *= z;*/
qadd( qone, qk, qk ); /* k += 1.0;*/
qdiv( qk, ug, ug ); /* ug /=k;*/
qdiv( qk, uf, uf ); /* uf /=k;*/
qadd( aif, uf, aif ); /* f += uf;*/
qadd( qone, qk, qk ); /* k += 1.0;*/
qdiv( qk, ug, ug ); /* ug /=k;*/
qadd( aig, ug, aig ); /* g += ug;*/
}
qmul( qc1, aif, uf ); /* uf = c1 * f;*/
qmul( qc2, aig, ug ); /* ug = c2 * g;*/
qsub( ug, uf, ai ); /* *ai = uf - ug;*/
qadd( ug, uf, bi ); /* *bi = sqrt3 * (uf + ug);*/
qdiv( qsqrt3, bi, bi );
if ( aiconf > 0 )
goto aidone;
/* the deriviative of ai */
doaip:
qmov( qone, qk ); /* k = 4.0;*/
qk[1 ] += 2 ;
qmul( t, t, uf ); /* uf = x * x/2.0;*/
uf[1 ] -= 1 ;
qmul( qthree, z, ug ); /* ug = z/3.0;*/
qmov( uf, aif ); /* f = uf;*/
qadd( qone, ug, aig ); /* g = 1.0 + ug;*/
qmul( qthree, uf, uf ); /* uf /= 3.0;*/
while ( ((int ) aig[1 ] - (int ) ug[1 ]) < NBITS )
{
qmul( z, uf, uf ); /* uf *= z;*/
qdiv( qk, ug, ug ); /* ug /=k;*/
qadd( qone, qk, qk ); /* k += 1.0;*/
qmul( z, ug, ug ); /* ug *= z;*/
qdiv( qk, uf, uf ); /* uf /=k;*/
qadd( uf, aif, aif ); /* f += uf;*/
qadd( qone, qk, qk ); /* k += 1.0;*/
qdiv( qk, ug, ug ); /* ug /=k;*/
qdiv( qk, uf, uf ); /* uf /=k;*/
qadd( ug, aig, aig ); /* g += ug;*/
qadd( qone, qk, qk ); /* k += 1.0;*/
}
qmul( qc1, aif, uf ); /* uf = c1 * f;*/
qmul( qc2, aig, ug ); /* ug = c2 * g;*/
qsub( ug, uf, aip ); /* *aip = uf - ug;*/
qadd( uf, ug, bip ); /* *bip = sqrt3 * (uf + ug);*/
qdiv( qsqrt3, bip, bip );
goto aidone;
/* negative x */
aineg:
t[0 ] = 0 ;
z[0 ] = 0 ;
qsqrt( z, zeta );
zeta[1 ] += 1 ; /* zeta = 2.0 * sqrt(z) / 3.0 */
qmul( qthree, zeta, zeta );
if ( aiconf < 0 )
goto ainegp;
qainfg();
qadd( qone, uf, uf );
qmov( qpi, temp ); /* zeta + pi/4 */
temp[1 ] -= 2 ;
qadd( zeta, temp, temp );
qsin( temp, aisin );
qcos( temp, aicos );
qmul( uf, aisin, temp );
qmul( ug, aicos, ai );
qsub( ai, temp, ai );
qsqrt( t, temp );
qmul( qpi, temp, temp );
qsqrt( temp, temp );
qdiv( temp, ai, ai );
qmul( ug, aisin, qk );
qmul( uf, aicos, bi );
qadd( bi, qk, bi );
qdiv( temp, bi, bi );
if ( aiconf > 0 )
goto aidone;
ainegp:
qanfgp();
qadd( qone, uf, uf );
qmov( qpi, temp ); /* zeta + pi/4 */
temp[1 ] -= 2 ;
qadd( zeta, temp, temp );
qsin( temp, aisin );
qcos( temp, aicos );
qmul( uf, aicos, temp );
qmul( ug, aisin, aip );
qadd( aip, temp, aip );
qsqrt( t, temp );
qdiv( qpi, temp, temp );
qsqrt( temp, temp );
temp[0 ] = -1 ;
qmul( temp, aip, aip );
qmul( ug, aicos, qk );
qmul( uf, aisin, bip );
qsub( qk, bip, bip );
temp[0 ] = 0 ;
qmul( temp, bip, bip );
goto aidone;
/* large positive x */
asymp:
qsqrt( z, zeta );
zeta[1 ] += 1 ; /* zeta = 2.0 * sqrt(z) / 3.0 */
qmul( qthree, zeta, zeta );
if ( aiconf < 0 )
goto adoaip;
maxf = MAXEXP;
k = 1 ;
qmov( qone, qk );
qmov( qone, qden );
qmov( qone, uf );
qmov( qone, ug );
do
{
i = 2 *k + 1 ;
qmov( qk, temp );
temp[1 ] += 1 ;
qadd( qone, temp, temp );
qmov( temp, qnum );
while ( i < (6 *k-1 ) )
{
i += 2 ;
qadd( qtwo, temp, temp );
qmuli( temp, qnum, qnum );
}
qmuli( q216, qden, qden );
qmuli( qk, qden, qden );
qmul( zeta, qden, qden );
qdiv( qden, qnum, temp );
if ( k & 1 )
qsub( temp, uf, uf );
else
qadd( temp, uf, uf );
qadd( temp, ug, ug ); /* for Bi */
k += 1 ;
qadd( qone, qk, qk );
if ( temp[1 ] < maxf )
maxf = temp[1 ];
if ( temp[1 ] > maxf )
break ;
/*
if ( k > 40 )
break ;
*/
}
while ( ((int ) qone[1 ] - (int ) temp[1 ]) < NBITS/2 );
qsqrt( t, temp );
qmul( qpi, temp, temp );
qsqrt( temp, temp );
qexp( zeta, qk );
qmul( qk, temp, ai );
qdiv( ai, uf, ai );
ai[1 ] -= 1 ;
qdiv( temp, qk, bi );
qmul( ug, bi, bi );
if ( aiconf > 0 )
goto aidone;
adoaip:
maxf = MAXEXP;
k = 1 ;
qmov( qone, qk );
qmov( qone, qden );
qmov( qone, uf );
qmov( qone, ug );
do
{
i = 2 *k + 1 ;
qmov( qk, temp );
temp[1 ] += 1 ;
qadd( qone, temp, temp );
qmov( temp, qnum );
while ( i < (6 *k-3 ) )
{
i += 2 ;
qadd( qtwo, temp, temp );
qmuli( temp, qnum, qnum );
}
/*
ck * - ( 6 k + 1 ) / ( 6 k - 1 )
*/
qadd( qtwo, temp, temp ); /* *(6k+1) */
qadd( qtwo, temp, temp );
qmuli( temp, qnum, qnum );
if ( qnum[0 ] != 0 )
qnum[0 ] = 0 ;
else
qnum[0 ] = -1 ;
qmuli( q216, qden, qden );
qmuli( qk, qden, qden );
qmul( zeta, qden, qden );
qdiv( qden, qnum, temp );
if ( k & 1 )
qsub( temp, uf, uf );
else
qadd( temp, uf, uf );
qadd( temp, ug, ug ); /* for Bi' */
if ( temp[1 ] < maxf )
maxf = temp[1 ];
if ( temp[1 ] > maxf )
break ;
k += 1 ;
qadd( qone, qk, qk );
/*
if ( k > 40 )
break ;
*/
}
while ( ((int ) qone[1 ] - (int ) temp[1 ]) < NBITS/2 );
qsqrt( t, temp );
qdiv( qpi, temp, temp );
qsqrt( temp, temp );
qexp( zeta, qk );
qdiv( qk, temp, aip );
qmul( aip, uf, aip );
aip[1 ] -= 1 ;
if ( aip[0 ] != 0 )
aip[0 ] = 0 ;
else
aip[0 ] = -1 ;
qmul( qk, temp, bip );
qmul( bip, ug, bip );
aidone:
return (0 );
}
/* Auxiliary functions */
extern QELT qnine[];
static QELT ai[NQ];
static QELT aip[NQ];
static QELT bi[NQ];
static QELT bip[NQ];
static QELT tt[NQ];
int qainfg()
{
QELT temp[NQ];
QELT maxf;
int k, i;
long ll;
maxf = MAXEXP;
k = 1 ;
qmov( qone, qk );
qmov( qone, qden );
/*qmov( qone, uf );*/
qclear( uf );
qclear( ug );
ll = 216 ;
ltoq( &ll, q216);
do
{
i = 2 *k + 1 ;
qmov( qk, temp );
temp[1 ] += 1 ;
qadd( qone, temp, temp );
qmov( temp, qnum );
while ( i < (6 *k-1 ) )
{
i += 2 ;
qadd( qtwo, temp, temp );
qmuli( temp, qnum, qnum );
}
qmuli( q216, qden, qden );
qmuli( qk, qden, qden );
qmul( zeta, qden, qden );
qdiv( qden, qnum, temp );
if ( k & 1 )
{
if ( k & 2 )
qsub( temp, ug, ug );
else
qadd( temp, ug, ug );
}
else
{
if ( k & 2 )
qsub( temp, uf, uf );
else
qadd( temp, uf, uf );
}
if ( temp[1 ] < maxf )
maxf = temp[1 ];
if ( temp[1 ] > maxf )
break ;
qadd( qone, qk, qk );
k += 1 ;
/*
if ( k > 70 )
break ;
*/
}
while ( ((int ) qone[1 ] - (int ) temp[1 ]) < NBITS/2 );
return 0 ;
}
int qanfgp()
{
QELT temp[NQ];
QELT maxf;
int k, i;
long ll;
maxf = MAXEXP;
k = 1 ;
qmov( qone, qk );
qmov( qone, qden );
/*qmov( qone, uf );*/
qclear( uf );
qclear( ug );
ll = 216 ;
ltoq( &ll, q216);
do
{
i = 2 *k + 1 ;
qmov( qk, temp );
temp[1 ] += 1 ;
qadd( qone, temp, temp );
qmov( temp, qnum );
while ( i < (6 *k-3 ) )
{
i += 2 ;
qadd( qtwo, temp, temp );
qmuli( temp, qnum, qnum );
}
/*
ck * - ( 6 k + 1 ) / ( 6 k - 1 )
*/
qadd( qtwo, temp, temp ); /* *(6k+1) */
qadd( qtwo, temp, temp );
qmuli( temp, qnum, qnum );
if ( qnum[0 ] != 0 )
qnum[0 ] = 0 ;
else
qnum[0 ] = -1 ;
qmuli( q216, qden, qden );
qmuli( qk, qden, qden );
qmul( zeta, qden, qden );
qdiv( qden, qnum, temp );
if ( k & 1 )
{
if ( k & 2 )
qsub( temp, ug, ug );
else
qadd( temp, ug, ug );
}
else
{
if ( k & 2 )
qsub( temp, uf, uf );
else
qadd( temp, uf, uf );
}
if ( temp[1 ] < maxf )
maxf = temp[1 ];
if ( temp[1 ] > maxf )
break ;
k += 1 ;
qadd( qone, qk, qk );
/*
if ( k > 70 )
break ;
*/
}
while ( ((int ) qone[1 ] - (int ) temp[1 ]) < NBITS/2 );
return 0 ;
}
/* Functions for polynomial approximation */
/* ai * sin(zeta) + bi * cos(zeta) */
int qainf(qx, qy)
QELT qx[], qy[];
{
QELT temp[NQ];
union
{
unsigned short s[4 ];
double d;
} dx;
aiconf = 1 ;
if ( qx[1 ] < 3 )
{
qmov( qone, qy );
goto fdone;
}
qtoe( qx, dx.s );
if ( dx.d < 0 .020539595906443729 )
{
qdiv( qx, qone, zeta );
qainfg();
qmov( uf, qy );
goto fdone;
}
/*
t = 4 . 0 * x * x / 9 . 0 ;
t = 1 . 0 / cbrt ( t ) ;
airy ( t , & ai , & aip , & bi , & bip ) ;
z = exp ( 1 . 0 / x ) ;
t = sqrt ( t ) ;
t = sqrt ( PI * t ) ;
y = bi * t / z ;
*/
qmul( qx, qx, tt );
tt[1 ] += 2 ;
qdiv( qnine, tt, tt );
qcbrt( tt, tt );
qdiv( tt, qone, tt );
tt[0 ] = -1 ;
qairy( tt, ai, aip, bi, bip );
tt[0 ] = 0 ;
qsqrt( tt, tt );
qmul( tt, qpi, tt );
qsqrt( tt, tt );
qmul( tt, ai, ai );
qmul( tt, bi, bi );
if ( (aisin[1 ] == 0 ) || (aicos[1 ] == 0 ) )
{
qdiv( qx, qone, temp );
qmov( qpi, tt );
tt[1 ] -= 2 ;
qadd( temp, tt, tt );
qsin( tt, aisin );
qcos( tt, aicos );
}
qmul( aisin, ai, temp );
qmul( aicos, bi, tt );
qadd( tt, temp, qy );
qsub( qone, qy, qy );
fdone: ;
return 0 ;
}
/* -ai * cos(zeta) + bi * sin( zeta) */
int qaing(qx, qy)
QELT qx[], qy[];
{
QELT temp[NQ];
union
{
unsigned short s[4 ];
double d;
} dx;
aiconf = 1 ;
if ( qx[1 ] < 3 )
{
qclear(qy);
goto fdone;
}
qtoe( qx, dx.s );
if ( dx.d <= 0 .020539595906443729 )
{
qdiv( qx, qone, zeta );
qainfg();
qmov( ug, qy );
goto fdone;
}
qmul( qx, qx, tt );
tt[1 ] += 2 ;
qdiv( qnine, tt, tt );
qcbrt( tt, tt );
qdiv( tt, qone, tt );
tt[0 ] = -1 ;
qairy( tt, ai, aip, bi, bip );
tt[0 ] = 0 ;
qsqrt( tt, tt );
qmul( tt, qpi, tt );
qsqrt( tt, tt );
qmul( tt, ai, ai );
qmul( tt, bi, bi );
if ( (aisin[1 ] == 0 ) || (aicos[1 ] == 0 ) )
{
qdiv( qx, qone, temp );
qmov( qpi, tt );
tt[1 ] -= 2 ;
qadd( temp, tt, tt );
qsin( tt, aisin );
qcos( tt, aicos );
}
qmul( aisin, bi, temp );
qmul( aicos, ai, tt );
qsub( tt, temp, qy );
fdone: ;
return 0 ;
}
/* -aip * cos(zeta) + bip * sin(zeta) */
int qaipnf(qx, qy)
QELT qx[], qy[];
{
QELT temp[NQ];
union
{
unsigned short s[4 ];
double d;
} dx;
aiconf = -1 ;
if ( qx[1 ] < 3 )
{
qmov( qone, qy );
goto fdone;
}
qtoe( qx, dx.s );
if ( dx.d <= 0 .020539595906443729 )
{
qdiv( qx, qone, zeta );
qanfgp();
qmov( uf, qy );
goto fdone;
}
/*
t = 4 . 0 * x * x / 9 . 0 ;
t = 1 . 0 / cbrt ( t ) ;
airy ( t , & ai , & aip , & bi , & bip ) ;
z = exp ( 1 . 0 / x ) ;
t = sqrt ( t ) ;
t = sqrt ( PI * t ) ;
y = bi * t / z ;
*/
qmul( qx, qx, tt );
tt[1 ] += 2 ;
qdiv( qnine, tt, tt );
qcbrt( tt, tt );
qdiv( tt, qone, tt );
tt[0 ] = -1 ;
qairy( tt, ai, aip, bi, bip );
tt[0 ] = 0 ;
qsqrt( tt, tt );
qdiv( tt, qpi, tt );
qsqrt( tt, tt );
qmul( tt, aip, aip );
qmul( tt, bip, bip );
if ( (aisin[1 ] == 0 ) || (aicos[1 ] == 0 ) )
{
qdiv( qx, qone, temp );
qmov( qpi, tt );
tt[1 ] -= 2 ;
qadd( temp, tt, tt );
qsin( tt, aisin );
qcos( tt, aicos );
}
qmul( aicos, aip, temp );
qmul( aisin, bip, tt );
qsub( temp, tt, qy );
qsub( qone, qy, qy );
fdone: ;
return 0 ;
}
/* -aip * sin(zeta) - bip * cos(zeta) */
int qaipng(qx, qy)
QELT qx[], qy[];
{
QELT temp[NQ];
union
{
unsigned short s[4 ];
double d;
} dx;
aiconf = -1 ;
if ( qx[1 ] < 3 )
{
qmov( qone, qy );
goto fdone;
}
qtoe( qx, dx.s );
if ( dx.d <= 0 .020539595906443729 )
{
qdiv( qx, qone, zeta );
qanfgp();
qmov( ug, qy );
goto fdone;
}
qmul( qx, qx, tt );
tt[1 ] += 2 ;
qdiv( qnine, tt, tt );
qcbrt( tt, tt );
qdiv( tt, qone, tt );
tt[0 ] = -1 ;
qairy( tt, ai, aip, bi, bip );
tt[0 ] = 0 ;
qsqrt( tt, tt );
qdiv( tt, qpi, tt );
qsqrt( tt, tt );
qmul( tt, aip, aip );
qmul( tt, bip, bip );
if ( (aisin[1 ] == 0 ) || (aicos[1 ] == 0 ) )
{
qdiv( qx, qone, temp );
qmov( qpi, tt );
tt[1 ] -= 2 ;
qadd( temp, tt, tt );
qsin( tt, aisin );
qcos( tt, aicos );
}
qmul( aisin, aip, temp );
qmul( aicos, bip, tt );
qadd( temp, tt, qy );
qneg( qy );
fdone: ;
return 0 ;
}
/*
* - x * * ( 1 / 4 ) R ( 1 / zeta )
* Ai ' ( x ) = - - - - - - - - - - - - - - - - - - - - - -
* 2 sqrt ( pi ) exp ( zeta )
*/
int qaipp(qx, qy)
QELT qx[], qy[];
{
QELT temp[NQ];
aiconf = -1 ;
if ( qx[1 ] < 10 )
{
qclear( qy );
goto fdone;
}
/* tt = cbrt(9*zeta/4 */
qmul( qx, qx, tt );
tt[1 ] += 2 ;
qdiv( qnine, tt, tt );
qcbrt( tt, tt );
qdiv( tt, qone, tt );
qairy( tt, ai, aip, bi, bip );
qsqrt( tt, tt );
qdiv( tt, qpi, tt );
qsqrt( tt, tt );
qmul( tt, aip, qy );
qdiv( qx, qone, temp );
qexp( temp, temp );
qmul( temp, qy, qy );
qy[1 ] += 1 ;
qneg( qy );
fdone: ;
return 0 ;
}
/*
* x * * ( 1 / 4 ) exp ( zeta )
* Bi ' ( x ) = - - - - - - - - - - - - - - - - - [ 1 + 1 / zeta R ( 1 / zeta ) ]
* sqrt ( pi )
*/
int qbipp(qx, qy)
QELT qx[], qy[];
{
QELT temp[NQ];
aiconf = -1 ;
if ( qx[1 ] < 10 )
{
qclear( qy );
goto fdone;
}
qmul( qx, qx, tt );
tt[1 ] += 2 ;
qdiv( qnine, tt, tt );
qcbrt( tt, tt );
qdiv( tt, qone, tt );
qairy( tt, ai, aip, bi, bip );
qsqrt( tt, tt );
qdiv( tt, qpi, tt );
qsqrt( tt, tt );
qmul( tt, bip, qy );
qdiv( qx, qone, temp );
qexp( temp, temp );
qdiv( temp, qy, qy );
qsub( qone, qy, qy );
fdone: ;
return 0 ;
}
/*
* R ( 1 / zeta )
* Ai ( x ) = - - - - - - - - - - - - - - - - - - - - - - - - - - - -
* 2 sqrt ( pi sqrt ( x ) ) exp ( zeta )
*/
int qaiasym(qx, qy)
QELT qx[], qy[];
{
QELT temp[NQ];
aiconf = 1 ;
if ( qx[1 ] < 10 )
{
qclear( qy );
goto fdone;
}
/* tt = cbrt(9*zeta/4 */
qmul( qx, qx, tt );
tt[1 ] += 2 ;
qdiv( qnine, tt, tt );
qcbrt( tt, tt );
qdiv( tt, qone, tt );
qairy( tt, ai, aip, bi, bip );
qsqrt( tt, tt );
qmul( tt, qpi, tt );
qsqrt( tt, tt );
qmul( tt, ai, qy );
qdiv( qx, qone, temp );
qexp( temp, temp );
qmul( temp, qy, qy );
qy[1 ] += 1 ;
fdone: ;
return 0 ;
}
/*
* exp ( zeta )
* Bi ( x ) = - - - - - - - - - - - - - - - - - [ 1 + 1 / zeta R ( 1 / zeta ) ]
* sqrt ( pi sqrt ( x ) )
*/
int qbiasym(qx, qy)
QELT qx[], qy[];
{
QELT temp[NQ];
aiconf = 1 ;
if ( qx[1 ] < 10 )
{
qclear( qy );
goto fdone;
}
qmul( qx, qx, tt );
tt[1 ] += 2 ;
qdiv( qnine, tt, tt );
qcbrt( tt, tt );
qdiv( tt, qone, tt );
qairy( tt, ai, aip, bi, bip );
qsqrt( tt, tt );
qmul( tt, qpi, tt );
qsqrt( tt, tt );
qmul( tt, bi, qy );
qdiv( qx, qone, temp );
qexp( temp, temp );
qdiv( temp, qy, qy );
qsub( qone, qy, qy );
fdone: ;
return 0 ;
}
Messung V0.5 in Prozent C=83 H=89 G=85
¤ Dauer der Verarbeitung: 0.16 Sekunden
(vorverarbeitet am 2026-06-23)
¤
*© Formatika GbR, Deutschland