longdouble elliel( phi, m ) longdouble phi, m;
{ longdouble a, b, c, e, temp, lphi, t, E; int d, mod, npio2, sign;
if( m == 0.0L ) return( phi );
lphi = phi;
npio2 = floorl( lphi/PIO2L ); if( npio2 & 1 )
npio2 += 1;
lphi = lphi - npio2 * PIO2L; if( lphi < 0.0L )
{
lphi = -lphi;
sign = -1;
} else
{
sign = 1;
}
a = 1.0L - m;
E = ellpel( a ); if( a == 0.0L )
{
temp = sinl( lphi ); goto done;
}
t = tanl( lphi );
b = sqrtl(a); if( fabsl(t) > 10.0L )
{ /* Transform the amplitude */
e = 1.0L/(b*t); /* ... but avoid multiple recursions. */ if( fabsl(e) < 10.0L )
{
e = atanl(e);
temp = E + m * sinl( lphi ) * sinl( e ) - elliel( e, m ); goto done;
}
}
c = sqrtl(m);
a = 1.0L;
d = 1;
e = 0.0L;
mod = 0;
while( fabsl(c/a) > MACHEPL )
{
temp = b/a;
lphi = lphi + atanl(t*temp) + mod * PIL;
mod = (lphi + PIO2L)/PIL;
t = t * ( 1.0L + temp )/( 1.0L - temp * t * t );
c = 0.5L*( a - b );
temp = sqrtl( a * b );
a = 0.5L*( a + b );
b = temp;
d += d;
e += c * sinl(lphi);
}
temp = E / ellpkl( 1.0L - m );
temp *= (atanl(t) + mod * PIL)/(d * a);
temp += e;
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.