void main()
{ char s[80]; #if EXPSCALE || EXPSC2 longdouble expl(); #endif int i, j, k; long m, n;
#if0
einit(); /* set up floating point coprocessor */ #endif
merror = 0; /*aiconf = -1;*/ /* configure Airy function */
x = 1.0L;
z = x * x;
qclear( qmax );
qtoasc( qmax, strmax, 4 );
qclear( qrmsa );
qclear( qave ); #if FOURANS for(m=0; m<4; m++)
{
qclear(qmaxes[m]);
qclear(qaves[m]);
qclear(qrmses[m]);
} #endif
printf(" Start at random number #:" );
gets( s );
sscanf( s, "%ld", &n );
printf("%ld\n", n ); for( m=0; m<n; m++ )
ldrand( &x );
n = 0;
m = 0; /* x = floorl( ave ); */
loop:
for( i=0; i<500; i++ )
{
n++;
m++;
/* make random number in desired range */
ldrand( &x );
x = WIDTH * ( x - 1.0L ) + LOW; #if EXPSCALE
x = expl(x);
ldrand( &a );
a = 1.0e-13L * x * a; if( x > 0.0 )
x -= a; else
x += a; #endif #if ONEINT
k = x;
x = k; #endif
ETOQ( &x, q1 ); /* double number to q type */
/* do again if second argument required */
#if TWOARG || THREEARG || FOURARG
ldrand( &a );
a = WIDTHA * ( a - 1.0 ) + LOWA; /*a /= 50.0;*/ #if EXPSC2
a = expl(a);
ldrand( &y2 );
y2 = 1.0e-13 * y2 * a; if( a > 0.0 )
a -= y2; else
a += y2; #endif #if TWOINT || THREEINT
k = a + 0.25;
a = k; #endif
ETOQ( &a, qy4 ); #endif
#if THREEARG || FOURARG
ldrand( &b ); #if PROB /* b=b-1.0; b=a*b;
*/ #if0 /* This makes b <= a, for bdtr. */
b = (a - LOWA) * ( b - 1.0 ) + LOWA; if( b > 1.0 && a > 1.0 )
b -= 1.0; #else
b = WIDTHA * ( b - 1.0 ) + LOWA; #endif /* for F distribution */
x = (b / a) * x;
ETOQ( &x, q1 );
/* Half-integer a and b */ /* a=0.5L*floorl(2.0L*a+1.0L); b=0.5L*floorl(2.0L*b+1.0L); ETOQ(&a,qy4);
*/ #else
b = WIDTHA * ( b - 1.0 ) + LOWA; #endif #if THREEINT
j = b + 0.25;
b = j; #endif
ETOQ( &b, qb ); #endif
#if FOURARG
ldrand( &c );
c = WIDTHA * ( c - 1.0 ) + LOWA; /* for hyp2f1 to ensure c-a-b > -1 */ /* z=c-a-b; if(z<-1.0) c-=1.6*z;
*/
ETOQ( &c, qc ); #endif
/* compute function under test */ #if ONEARG #if FOURANS /*FUNC( x, &z, &y2, &y3, &y4 );*/
FUNC( x, &y4, &y2, &y3, &z ); #else #if TWOANS
FUNC( x, &z, &y2 ); /*FUNC( x, &y2, &z );*/ #else #if ONEINT
z = FUNC( k ); #else
z = FUNC( x ); #endif #endif #endif #endif
#if TWOARG #if TWOINT
z = FUNC( k, x ); /*z = FUNC( x, k );*/ /*z = FUNC( a, x );*/ #else #if FOURANS /*FUNC( a, x, &z, &y2, &y3, &y4 );*/
FUNC( a, x, &y2, &y3, &y4, &z ); #else
z = FUNC( a, x ); #endif #endif #endif
#if THREEARG #if THREEINT
z = FUNC( j, k, x ); /*z = FUNC( k, j, x );*/ #else
z = FUNC( a, b, x ); #endif #endif
#if FOURARG
z = FUNC( a, b, c, x ); #endif
ETOQ( &z, q2 );
/* handle detected overflow */ if( (z == MAXNUML) || (z == -MAXNUML) )
{
printf("detected overflow "); #if FOURARG
ETOQ( &a, q );
qtoasc( q, str, 8 );
printf( "%s ", str );
ETOQ( &b, q );
qtoasc( q, str, 8 );
printf( "%s ", str );
ETOQ( &c, q );
qtoasc( q, str, 8 );
printf( "%s ", str );
ETOQ( &x, q );
qtoasc( q, str, 8 );
printf( "%s ", str );
ETOQ( &y, q );
qtoasc( q, str, 8 );
printf( "%6ld\n", n ); #else
ETOQ( &x, q );
qtoasc( q, str, 8 );
printf( "%s ", str );
ETOQ( &a, q );
qtoasc( q, str, 8 );
printf( "%s ", str );
ETOQ( &z, q );
qtoasc( q, str, 8 );
printf( "%s ", str );
printf( "%6ld\n", n ); #endif
e = 0.0;
m -= 1; goto endlup;
} /* Skip high precision if underflow. */ if( merror == UNDERFLOW ) goto underf;
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.