int qexp( x, y )
QELT *x, *y;
{
QELT num[NQ], den[NQ], x2[NQ]; long i;
/* range reduction theory: x = i + f, 0<=f<1; *e^x=e^i*e^f *e^i=2^(i/log2). *Leti/log2=i1+f1,0<=f1<1. *Thene^i=2^i1*2^f1,so *e^x=2^i1*e^(f1log2)*e^f.
*/
/* Catch overflow that might cause an endless recursion below. */ if( x[1] >= EXPONE + 15 )
{ if( x[0] != 0 ) goto underf; else goto overf;
} if( x[1] == 0 )
{
qmov( qone, y ); return(0);
}
qmov(x, x2);
qdiv( qlog2, x2, den );
qadd( qhalf, den, den );
qfloor( den, num );
qifrac( num, &i, den );
qmul( num, C1, den );
qsub( den, x2, x2 );
qmul( num, C2, den );
qsub( den, x2, x2 );
#if0
sign = x2[0]; if( sign != 0 )
x2[0] = 0;
qifrac( x2, &i, num ); /* x = i + f */ if( i != 0 )
{
ltoq( &i, den ); /* floating point i */
qdiv( qlog2, den, den ); /* i/log 2 */
qifrac( den, &i, den ); /* i/log 2 = i1 + f1 */
qmul( qlog2, den, den ); /* log 2 * f1 */
qadd( den, num, x2 ); /* log 2 * f1 + f */
} #endif
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.