main()
{ char s[80]; double fabs(), floor(); #if EXPSCALE || EXPSC2 double exp(); #endif double sqrt(); /* required to compute rms error */ int i, j, k; long m, n;
dprec(); /* set up floating point coprocessor */
merror = 0; /*aiconf = -1;*/ /* configure Airy function */
x = 1.0;
z = x * x;
qclear( qmax );
qtoasc( qmax, strmax, 4 );
qclear( qrmsa );
qclear( qave );
#if1
printf(" Start at random number #:" );
gets( s );
sscanf( s, "%ld", &n );
printf("%ld\n", n ); #else
n = 0; #endif
for( m=0; m<n; m++ )
drand( &x );
n = 0;
m = 0;
x = floor( x );
loop:
for( i=0; i<100; i++ )
{
n++;
m++;
/* make random number in desired range */
drand( &x );
x = WIDTH * ( x - 1.0 ) + LOW; #if EXPSCALE
x = exp(x);
drand( &a );
a = 1.0e-13 * 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
drand( &a );
a = WIDTHA * ( a - 1.0 ) + LOWA; /*a /= 50.0;*/ #if EXPSC2
a = exp(a);
drand( &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
/* Half-integer a and b */ /*a = 0.5*floor(2.0*a+1.0);*/
a = 0.5;
b = 0.5*floor(2.0*b+1.0);
etoq( &a, qy4 ); /*x = (a / (a+b));*/
#else
b = WIDTHA * ( b - 1.0 ) + LOWA; #endif #if THREEINT
j = b + 0.25;
b = j; #endif
etoq( &b, qb ); #endif
#if FOURARG
drand( &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
/*printf("%.16E %.16E\n", a, x);*/
/* 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 ); #else
z = FUNC( a, x ); #endif #endif #endif
#if THREEARG #if THREEINT
z = FUNC( j, k, 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 == MAXNUM) || (z == -MAXNUM) )
{
printf("detected overflow "); #if FOURARG
printf("%.4E %.4E %.4E %.4E %.4E %6ld \n",
a, b, c, x, y, n); #else
printf("%.16E %.4E %.4E %6ld \n", x, a, z, 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.