staticint initqpsi()
{
QELT den[NQ], temp[NQ]; int i, k;
k = 0; for( i=0; i<NP; i++ )
{ /* One numerator coefficient */
asctoq( pstrs[k++], pcof[i] ); /* Two denominator factors */
asctoq( pstrs[k++], temp );
asctoq( pstrs[k++], den );
qmul( den, temp, den );
qdiv( den, pcof[i], pcof[i] );
}
qpsiini = 1; return0;
}
int qpsi( x, y )
QELT *x, *y;
{
QELT v[NQ], w[NQ], g[NQ], xx[NQ], t[NQ]; int i;
if (qpsiini == 0)
initqpsi();
if( x[0] != 0 )
{ /* psi(-x) = psi(x+1) + pi/tan(pi(x+1)) */
qmov( x, xx );
xx[0] = 0;
qadd( qone, xx, xx );
qpsi( xx, t );
qmul( xx, qpi, g );
qtan( g, g );
qdiv( g, qpi, w );
qadd( t, w, y ); return0;
} /* range reduction: transform argument to be greater than 32 */
qmov( x, xx );
qclear(v);
while( xx[1] <= (QELT) (EXPONE + 4) ) /* exponent of 16 */
{
qdiv( xx, qone, w );
qadd( w, v, v );
qadd( qone, xx, xx );
}
/* Asymptotic polynomial in 1/x**2 for Stirling's formula */
qmul( xx, xx, w );
qdiv( w, pcof[0], g ); for( i = 1; i <= 11; i++ )
{
qadd( g, pcof[i], g );
qdiv( w, g, g );
} /* g + 1/2x - log(x) */
qdiv( xx, qone, w );
w[1] -= 1;
qadd( w, g, g );
qlog( xx, w );
qsub( w, g, g ); /* negate */
qneg(g); /* We now have psi(xx). Subtract sum of reciprocals. */
qsub( v, g, y ); return0;
}
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.12 Sekunden
(vorverarbeitet am 2026-06-27)
¤
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.