Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: style.css   Sprache: C

/* fltest.c
 * Test program for floor(), frexp(), ldexp()
 */


/*
Cephes Math Library Release 2.1:  December, 1988
Copyright 1984, 1987, 1988 by Stephen L. Moshier ([email protected])
*/




/*#include "mconf.h"*/
#define MACHEPL  5.42101086242752217003726400434970855712890625E-20L
#define N 16300

void flierr();
int printf();
void exit();

int
main()
{
long double x, y, y0, z, f, x00, y00;
int i, j, e, e0;
int errfr, errld, errfl, underexp, err, errth, e00;
long double frexpl(), ldexpl(), floorl();


/*
if( 1 )
goto flrtst;
*/


printf( "Testing frexpl() and ldexpl().\n" );
errth = 0.0L;
errfr = 0;
errld = 0;
underexp = 0;
f = 1.0L;
x00 = 2.0L;
y00 = 0.5L;
e00 = 2;

for( j=0; j<20; j++ )
{
if( j == 10 )
 {
 f = 1.0L;
 x00 = 2.0L;
 e00 = 1;
/* Find 2**(2**14) / 2 */
 for( i=0; i<13; i++ )
  {
  x00 *= x00;
  e00 += e00;
  }
 y00 = x00/2.0L;
 x00 = x00 * y00;
 e00 += e00;
 y00 = 0.5L;
 }
x = x00 * f;
y0 = y00 * f;
e0 = e00;

#if 1
/* If ldexp, frexp support denormal numbers, this should work.  */
for( i=0; i<16448; i++ )
#else
for( i=0; i<16383; i++ )
#endif
 {
 x /= 2.0L;
 e0 -= 1;
 if( x == 0.0L )
  {
  if( f == 1.0L )
   underexp = e0;
  y0 = 0.0L;
  e0 = 0;
  }
 y = frexpl( x, &e );
 if( (e0 < -16383) && (e != e0) )
  {
  if( e == (e0 - 1) )
   {
   e += 1;
   y /= 2.0L;
   }
  if( e == (e0 + 1) )
   {
   e -= 1;
   y *= 2.0L;
   }
  }
 err = y - y0;
 if( y0 != 0.0L )
  err /= y0;
 if( err < 0.0L )
  err = -err;
 if( e0 > -1023 )
  errth = 0.0L;
 else
  {/* Denormal numbers may have rounding errors */
  if( e0 == -16383 )
   {
   errth = 2.0L * MACHEPL;
   }
  else
   {
   errth *= 2.0L;
   }
  }

 if( (x != 0.0L) && ((err > errth) || (e != e0)) )
  {
  printf( "Test %d: ", j+1 );
  printf( " frexpl( %.20Le) =?= %.20Le * 2**%d;", x, y, e );
  printf( " should be %.20Le * 2**%d\n", y0, e0 );
  errfr += 1;
  }
 y = ldexpl( x, 1-e0 );
 err = y - 1.0L;
 if( err < 0.0L )
  err = -err;
 if( (err > errth) && ((x == 0.0L) && (y != 0.0L)) )
  {
  printf( "Test %d: ", j+1 );
  printf( "ldexpl( %.15Le, %d ) =?= %.15Le;", x, 1-e0, y );
  if( x != 0.0L )
   printf( " should be %.15Le\n", f );
  else
   printf( " should be %.15Le\n", 0.0L );
  errld += 1;
  }
 if( x == 0.0L )
  {
  break;
  }
 }
f = f * 1.08005973889L;
}

if( (errld == 0) && (errfr == 0) )
 {
 printf( "No errors found.\n" );
 }

/*flrtst:*/

printf( "Testing floorl().\n" );
errfl = 0;

f = 1.0L/MACHEPL;
x00 = 1.0L;
for( j=0; j<57; j++ )
{
x = x00 - 1.0L;
for( i=0; i<128; i++ )
 {
 y = floorl(x);
 if( y != x )
  {
  flierr( x, y, j );
  errfl += 1;
  }
/* Warning! the if() statement is compiler dependent,
 * since x-0.49 may be held in extra precision accumulator
 * so would never compare equal to x!  The subroutine call
 * y = floor() forces z to be stored as a double and reloaded
 * for the if() statement.
 */

 z = x - 0.49L;
 y = floorl(z);
 if( z == x )
  break;
 if( y != (x - 1.0L) )
  {
  flierr( z, y, j );
  errfl += 1;
  }

 z = x + 0.49L;
 y = floorl(z);
 if( z != x )
  {
  if( y != x )
   {
   flierr( z, y, j );
   errfl += 1;
   }
  }
 x = -x;
 y = floorl(x);
 if( z != x )
  {
  if( y != x )
   {
   flierr( x, y, j );
   errfl += 1;
   }
  }
 z = x + 0.49L;
 y = floorl(z);
 if( z != x )
  {
  if( y != x )
   {
   flierr( z, y, j );
   errfl += 1;
   }
  }
 z = x - 0.49L;
 y = floorl(z);
 if( z != x )
  {
  if( y != (x - 1.0L) )
   {
   flierr( z, y, j );
   errfl += 1;
   }
  }
 x = -x;
 x += 1.0L;
 }
x00 = x00 + x00;
}
y = floorl(0.0L);
if( y != 0.0L )
 {
 flierr( 0.0L, y, 57 );
 errfl += 1;
 }
y = floorl(-0.0L);
if( y != 0.0L )
 {
 flierr( -0.0L, y, 58 );
 errfl += 1;
 }
y = floorl(-1.0L);
if( y != -1.0L )
 {
 flierr( -1.0L, y, 59 );
 errfl += 1;
 }
y = floorl(-0.1L);
if( y != -1.0l )
 {
 flierr( -0.1L, y, 60 );
 errfl += 1;
 }

if( errfl == 0 )
 printf( "No errors found in floorl().\n" );
exit(0);
return 0;
}

void flierr( x, y, k )
long double x, y;
int k;
{
printf( "Test %d: ", k+1 );
printf( "floorl(%.15Le) =?= %.15Le\n", x, y );
}

¤ Diese beiden folgenden Angebotsgruppen bietet das Unternehmen0.21Angebot  Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können  ¤





Druckansicht
unsichere Verbindung
Druckansicht
Hier finden Sie eine Liste der Produkte des Unternehmens

Mittel




Lebenszyklus

Die hierunter aufgelisteten Ziele sind für diese Firma wichtig


Ziele

Entwicklung einer Software für die statische Quellcodeanalyse


Bot Zugriff



                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....
    

Besucherstatistik

Besucherstatistik