Subversion Repositories HomeAutomation

Rev

Rev 587 | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. double scale( long val, long k, long m );
  5. long iscale( long val, long k, long m, long fact );
  6.  
  7. int main( int argc, char *argv[] ) {
  8.     long k, m;
  9.  
  10.     if( argc != 3 ) {
  11.         fprintf( stderr, "Usage: %s <k> <m>\n", argv[0] );
  12.         return 1;
  13.     }
  14.  
  15.     k=atoi(argv[1]);
  16.     m=atoi(argv[2]);
  17.  
  18.     printf( "k=%d m=%d\n", k, m );
  19.  
  20.     printf( "scale(    0)=%f\n", scale(     0, k, m ) );
  21.     printf( "scale(65535)=%f\n", scale( 65535, k, m ) );
  22.     printf( "scale(1)-scale(0)=%f\n", scale( 1, k, m ) - scale( 0, k, m ) );
  23.  
  24.     printf( "iscale(0,100)=%d", iscale( 0, k, m, 100 ) );
  25.  
  26.     return 0;
  27. }
  28.  
  29. double scale( long val, long k, long m ) {
  30.     return (double)m - 32768.0 + ((double)k*(double)val)/256.0;
  31. }
  32.  
  33. long iscale( long val, long k, long m, long fact ) {
  34.     return m*fact - (fact<<15) + ((k*val*fact)>>8);
  35. }
  36.