MATHTEST.C
上传用户:sunrenlu
上传日期:2022-06-13
资源大小:1419k
文件大小:4k
源码类别:

操作系统开发

开发平台:

DOS

  1. #include <rtos.h>
  2. #include <emath.h>
  3. /*------------------------------------------------------------------------*/
  4. void test( char *s )
  5. {
  6.     char buffer[128];
  7.     EM x;
  8.     x = strtoem( s );
  9.     cprintf("converting %s -> %s (internally stored as %lu)nr",
  10.         s, emtostr( x, buffer ), x);
  11. }
  12. test2( char *a, char *b)
  13. {
  14.     char buffer[ 128 ], buffer2[128];
  15.     /* demonstrates how to assign EM numbers from ASCII strings */
  16.     EM x = strtoem( a );
  17.     EM y = strtoem( b );
  18.     /* show our x and y values */
  19.     cprintf("x = %s, y = %s rn", emtostr( x, buffer ), emtostr(y, buffer2));
  20.     /* conversion from EM back to long integer scaled by factor of 10 */
  21.     cprintf("convert to long : emtol(x,10) = %lurn", emtol( x, 10 ));
  22.     cputs("Arithmetic Functions :rn");
  23.     cprintf(" x + y = %s    ", emtostr( x + y , buffer ));
  24.     cprintf(" x - y = %srn", emtostr( x - y , buffer ));
  25.     cprintf(" x y   = %s    ", emtostr( EM_MUL(x, y) , buffer ));
  26.     cprintf(" x / y = %srn", emtostr( EM_DIV(x,y) , buffer ));
  27.     cprintf("Mathematical Functionsrn");
  28.     cprintf(" int(x) = %srn", emtostr( EM_INT(x ), buffer ));
  29.     cprintf(" round(x) = %srn", emtostr( EM_ROUND(x ), buffer ));
  30.     cprintf(" sqrt(x) = %srn", emtostr( EM_SQR( x ), buffer ));
  31.     cprintf(" log10(x) = %srn", emtostr( EM_LOG10( x ), buffer ));
  32.     cprintf(" ln(x) = %srn", emtostr( EM_LN( x ), buffer ));
  33.     cprintf(" 10^(x) = %srn", emtostr( EM_POWER10( x ), buffer ));
  34.     cprintf(" e^(x) = %srn", emtostr( EM_EXP( x ), buffer ));
  35.     cprintf(" x^y   = %srn", emtostr( EM_POWER( x, y ), buffer ));
  36.     cprintf(" cos(x) = %srn", emtostr( EM_COS( x ), buffer ));
  37.     cprintf(" sin(x) = %srn", emtostr( EM_SIN( x ), buffer ));
  38.     cprintf(" tan(x) = %srn", emtostr( EM_TAN( x ), buffer ));
  39.     cprintf(" asin(x) = %srn", emtostr( EM_ASIN(x), buffer ));
  40.     cprintf(" acos(x) = %srn", emtostr( EM_ACOS(x), buffer ));
  41.     cprintf(" atan(x) = %srn", emtostr( EM_ATAN(x), buffer ));
  42.     cprintf(" x -> %s radians   x -> %s degreesrn",
  43.         emtostr( EM_RAD( x ), buffer ),
  44.         emtostr( EM_DEG( x ), buffer2 ));
  45. }
  46. test3()
  47. {
  48.     EM x, y, r;
  49.     long u, v;
  50.     EM degree;
  51.     EM fullcircle;
  52.     clrscr();
  53.     cputs("Drawing a circle... it will look like an elipse due to screen aspect ratio.");
  54.     fullcircle = EM_ASSIGN( 360, 1 );    /* 360/1 = 360.0000 */
  55.     r = EM_ASSIGN( 10, 1 );     /* r = 10/1 = 10.0000 */
  56.     for ( degree = EM_ZERO ;
  57.           degree < fullcircle ;
  58.           degree= EM_ADD( degree, EM_ONE )) {
  59.        /* x = r * sin( rad( degree ) ) */
  60.        /* y = r * cos( rad( degree ) ) */
  61.        x = EM_MUL( r, EM_SIN( EM_RAD( degree ) ) );
  62.        y = EM_MUL( r, EM_COS( EM_RAD( degree ) ) );
  63.        /* convert to integers, and add 60, 15 to roughly center on screen */
  64.        u = emtol( EM_ROUND(x), 1 ) + 40;
  65.        v = emtol( EM_ROUND(y), 1 ) + 15;
  66.        gotoxy( u, v );
  67.        cputs("*");
  68.     }
  69.     gotoxy( 1, 2 );
  70.     puts("Press any key to continue...");
  71.     getch();
  72.     clrscr();
  73. }
  74. main(int argc, char **argv)
  75. {
  76.     char buffer[ 128];
  77.     rt_init( 100 );
  78.     if ( argc < 3 ) {
  79.         test3();
  80.         cputs("Here are some sample numbers:rn");
  81.         test( "1.125" );
  82.         test( "10.002" );
  83.         test( "3.14159" );
  84.         test( "32799.24");
  85.         test( "-243.34");
  86.         test( "-.05");
  87.         cprintf(" pi = %s (%lu)   rn", emtostr( EM_PI, buffer ), EM_PI );
  88.         /* demonstrates how to ASSIGN from fraction (numerator/denominator) */
  89.         cprintf(" 314/100 = %srn", emtostr(EM_ASSIGN(314,100), buffer ) );
  90.         cputs("Run this program with two arguments (eg mathtest 2 3) and see resultsrn");
  91.     } else {
  92.         test2( argv[1] , argv[2] );
  93.     }
  94. }