/* ellpkf.c
*
* Complete elliptic integral of the first kind
*
*
*
* SYNOPSIS :
*
* float m1 , y , ellpkf ( ) ;
*
* y = ellpkf ( m1 ) ;
*
*
*
* DESCRIPTION :
*
* Approximates the integral
*
*
*
* pi / 2
* -
* | |
* | dt
* K ( m ) = | - - - - - - - - - - - - - - - - - -
* | 2
* | | sqrt ( 1 - m sin t )
* -
* 0
*
* where m = 1 - m1 , using the approximation
*
* P ( x ) - log x Q ( x ) .
*
* The argument m1 is used rather than m so that the logarithmic
* singularity at m = 1 will be shifted to the origin ; this
* preserves maximum accuracy .
*
* K ( 0 ) = pi / 2 .
*
* ACCURACY :
*
* Relative error :
* arithmetic domain # trials peak rms
* IEEE 0 , 1 30000 1 . 3 e - 7 3 . 4 e - 8
*
* ERROR MESSAGES :
*
* message condition value returned
* ellpkf domain x < 0 , x > 1 0 . 0
*
*/
/* ellpk.c */
/*
Cephes Math Library , Release 2 . 0 : April , 1987
Copyright 1984 , 1987 by Stephen L . Moshier
Direct inquiries to 30 Frost Street , Cambridge , MA 02140
*/
#include "mconf.h"
static float P[] =
{
1 .37982864606273237150 E-4 ,
2 .28025724005875567385 E-3 ,
7 .97404013220415179367 E-3 ,
9 .85821379021226008714 E-3 ,
6 .87489687449949877925 E-3 ,
6 .18901033637687613229 E-3 ,
8 .79078273952743772254 E-3 ,
1 .49380448916805252718 E-2 ,
3 .08851465246711995998 E-2 ,
9 .65735902811690126535 E-2 ,
1 .38629436111989062502 E0
};
static float Q[] =
{
2 .94078955048598507511 E-5 ,
9 .14184723865917226571 E-4 ,
5 .94058303753167793257 E-3 ,
1 .54850516649762399335 E-2 ,
2 .39089602715924892727 E-2 ,
3 .01204715227604046988 E-2 ,
3 .73774314173823228969 E-2 ,
4 .88280347570998239232 E-2 ,
7 .03124996963957469739 E-2 ,
1 .24999999999870820058 E-1 ,
4 .99999999999999999821 E-1
};
static float C1 = 1 .3862943611198906188 E0; /* log(4) */
extern float MACHEPF, MAXNUMF;
#ifdef ANSIC
float polevlf(float , float *, int );
float p1evlf(float , float *, int );
float logf(float );
float ellpkf(float xx)
#else
float polevlf(), p1evlf(), logf();
float ellpkf(xx)
double xx;
#endif
{
float x;
x = xx;
if ( (x < 0 .0 ) || (x > 1 .0 ) )
{
mtherr( "ellpkf" , DOMAIN );
return ( 0 .0 );
}
if ( x > MACHEPF )
{
return ( polevlf(x,P,10 ) - logf(x) * polevlf(x,Q,10 ) );
}
else
{
if ( x == 0 .0 )
{
mtherr( "ellpkf" , SING );
return ( MAXNUMF );
}
else
{
return ( C1 - 0 .5 * logf(x) );
}
}
}
Messung V0.5 in Prozent C=98 H=100 G=98
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet am 2026-06-14)
¤
*© Formatika GbR, Deutschland