⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 math.lst

📁 快速傅立叶变化的fft算法的C语言实现。
💻 LST
字号:
C51 COMPILER V7.50   MATH                                                                  01/10/2006 16:49:28 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE MATH
OBJECT MODULE PLACED IN math.OBJ
COMPILER INVOKED BY: C:\Program Files\Keil\C51\BIN\C51.EXE math.c LARGE BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include "include.h"
*** WARNING C318 IN LINE 5 OF include.h: can't open file 'maths.h'
   2          
   3          /**********************************************
   4          函数名:  unsigned int Sqrt(unsigned long M)     
   5          
   6          输入参数:
   7                  unsigned long M--被开方数,长整型
   8          
   9          输出参数:       无
  10          
  11          返回值:
  12                  unsigned int--开方结果,整形
  13          
  14          功能说明:       长整形数开方处理
  15          **********************************************/ 
  16          unsigned int Sqrt(unsigned long M)
  17          { 
  18   1          unsigned int N, i; 
  19   1          unsigned long tmp, ttp;   /*   结果、循环计数         */
  20   1              unsigned char flag = 0; 
  21   1          if (M == 0)               /* 被开方数,开方结果也为0  */
  22   1              return 0; 
  23   1      
  24   1              if (M>0x3FF001)
  25   1              {
  26   2      
  27   2                  M >>= 2;
  28   2                      flag = 1;
  29   2              }
  30   1      
  31   1          N = 0; 
  32   1      
  33   1          tmp = (M >> 30);          /* 获取最高位:B[m-1] */
  34   1          M <<= 2; 
  35   1          if (tmp > 1)              /*  最高位为1 */
  36   1          { 
  37   2              N ++;                 /* 结果当前位为1,否则为默认的0 */
  38   2              tmp -= N; 
  39   2          } 
  40   1      
  41   1          for (i=15; i>0; i--)      /* 求剩余的15位 */
  42   1          { 
  43   2              N <<= 1;              /* 左移一位 */
  44   2      
  45   2              tmp <<= 2; 
  46   2              tmp += (M >> 30);     /* 假设 */
  47   2      
  48   2              ttp = N; 
  49   2              ttp = (ttp<<1)+1; 
  50   2      
  51   2              M <<= 2; 
  52   2              if (tmp >= ttp)       /* 假设成立 */
  53   2              { 
  54   3                  tmp -= ttp; 
C51 COMPILER V7.50   MATH                                                                  01/10/2006 16:49:28 PAGE 2   

  55   3                  N ++; 
  56   3              } 
  57   2      
  58   2          } 
  59   1      
  60   1              if (flag)
  61   1              N <<= 1;
  62   1      
  63   1          return N; 
  64   1      }
  65          
  66          /*长整型开方,返回浮点值*/
  67          double lSqrt(unsigned long M )
  68          {
  69   1              unsigned int scale;
  70   1      
  71   1              scale = 1;
  72   1      
  73   1              if ( M == 0)
  74   1                      return 0;
  75   1      
  76   1              if ( M < 0xffff )
  77   1              {
  78   2                      M *= 0x10000;
  79   2                      scale = 0x100;
  80   2              }
  81   1      
  82   1              while ( M < 0x3fffffff )
  83   1              {
  84   2                      M <<= 2;
  85   2                      scale <<=1;
  86   2              }
  87   1              
  88   1              return ( ( double )Sqrt( (unsigned long) M ) / scale );
  89   1      }
  90          
  91          /*浮点数的开方运算*/
  92          double fSqrt(double M)
  93          {
  94   1              unsigned long scale;
  95   1      
  96   1              scale = 1;
  97   1              if ( M < 0.000001 )
  98   1                      return 0;
  99   1      
 100   1              if ( M < 0xff )
 101   1              {
 102   2                      M *= 0x1000000;
 103   2                      scale *= 0x1000;
 104   2              }
 105   1              
 106   1              if ( M < 0xffff )
 107   1              {
 108   2                      M *= 0x10000;
 109   2                      scale *= 0x100;
 110   2              }
 111   1      
 112   1              while ( M < 0x3fffffff )
 113   1              {
 114   2                      M *= 4 ;
 115   2                      scale *= 2 ;
 116   2              }
C51 COMPILER V7.50   MATH                                                                  01/10/2006 16:49:28 PAGE 3   

 117   1              
 118   1              return ( ( double )Sqrt( (unsigned long) M ) / scale );
 119   1      }
 120          
 121          
 122          
 123          /*************************************************************
 124          函数名:         long lround()                         
 125          
 126          输入参数:
 127                  long div--被除数,长整形
 128                  long by--除数,长整形
 129          
 130          输出参数:       无
 131          
 132          返回值:
 133                  long--计算结果
 134          
 135          功能说明:求div/by的四舍五入的结果
 136          
 137          *************************************************************/
 138          long lRound(long div,long by)
 139          {
 140   1              long int temp;
 141   1      
 142   1              if (by)
 143   1              {
 144   2                      temp = div/by;
 145   2                      if (( (lAbs(div) % by) << 1) >= by)
*** WARNING C206 IN LINE 145 OF MATH.C: 'lAbs': missing function-prototype
*** ERROR C267 IN LINE 145 OF MATH.C: 'lAbs': requires ANSI-style prototype
 146   2                              if (div >= 0)
 147   2                                      temp++;
 148   2                              else
 149   2                                      temp--;
 150   2              }
 151   1              else
 152   1                      temp=div;
 153   1      
 154   1              return(temp); /* 返回四舍五入的结果 */
 155   1      
 156   1      } /* end lRound() */
 157          
 158          
 159          /*********************************************************
 160          函数名:long lAbs(long num)      int Abs( int num ) double fAbs( double num )
 161          
 162          输入参数:
 163                  long(int,double) num--待求绝对值的变量
 164          
 165          输出参数:       无
 166          
 167          返回值:         
 168                  long(int,double)--返回变量num的绝对值
 169          
 170          功能说明:求输入变量的绝对值。
 171          *********************************************************/
 172          long lAbs(long num)
 173          {
*** ERROR C231 IN LINE 173 OF MATH.C: '_lAbs': redefinition
 174   1              return ( num >= 0 ? num : -num );
 175   1      }
C51 COMPILER V7.50   MATH                                                                  01/10/2006 16:49:28 PAGE 4   

 176          
 177          int Abs( int num )
 178          {
 179   1               return ( num >= 0 ? num : -num );
 180   1      }
 181          
 182          double fAbs( double num )
 183          {
 184   1               return ( num >= 0 ? num : -num );
 185   1      }
 186          
 187          
 188          
 189          /**************************************************************
 190          函数名:         long lSign(long num)
 191          
 192          输入参数:
 193                  long num--待求符号数,长整形
 194          
 195          输出参数:       无
 196          
 197          返回值:         num的正负符号1:>=0;-1<0
 198          
 199          功能说明:求输入数的正负符号。
 200          **************************************************************/
 201          long lSign(long num)
 202          {
 203   1               return( num >= 0L ? 1l:-1l);
 204   1      }
 205          
 206          
 207          
 208          /****************************************************************************
 209           函数名:unsigned char BCDToHex(unsigned char bcd_data)
 210                               unsigned char HexToBCD(unsigned char hex_data)                                                             
 211          
 212          输入参数:
 213                  unsigned char bcd_data(hex_data)--待转换的8位BCD数或16进制数
 214          
 215          输出参数:       无                                      
 216          
 217          返回值:         无
 218          
 219          功能说明:把BCD数转换为16进制数或把16进制数转换为BCD数
 220          ****************************************************************************/
 221          unsigned char BCDToHex(unsigned char bcd_data)
 222          {
 223   1              unsigned char hex;
 224   1              hex=(bcd_data/16)*10+bcd_data%16;
 225   1              return(hex);
 226   1      }
 227          
 228          unsigned char HexToBCD(unsigned char hex_data)
 229          {
 230   1              unsigned char bcd;
 231   1              bcd=(hex_data/10)*16+hex_data%10;
 232   1              return(bcd);
 233   1      }
 234          
 235          
 236          
 237          /**************************************************************
C51 COMPILER V7.50   MATH                                                                  01/10/2006 16:49:28 PAGE 5   

 238          函数名: void Bin2Bcd32( long  x, char* buffer)
 239          
 240          输入参数:
 241                  long x--
 242                  char* buffer--
 243          
 244          输出参数:
 245                  char* buffer--
 246          
 247          返回值: 无
 248          
 249          功能说明:       长整形数的bcd码
 250          **************************************************************/
 251          void Bin2Bcd32( long  x, char* buffer)
 252          {
 253   1              x=lAbs(x);/*2005.11.17*/
 254   1              buffer[9] = x/1000000000;
 255   1              x = x%1000000000;
 256   1              buffer[8] = x/100000000;
 257   1              x = x%100000000;
 258   1              buffer[7] = x/10000000;
 259   1              x = x%10000000;
 260   1              buffer[6] = x/1000000;
 261   1              x = x%1000000;
 262   1              buffer[5] = x/100000;
 263   1              x = x%100000;
 264   1              buffer[4] = x/10000;
 265   1              x = x%10000;
 266   1              buffer[3] = x/1000;
 267   1              x = x%1000;
 268   1              buffer[2] = x/100;
 269   1              x = x%100;
 270   1              buffer[1] = x/10;
 271   1              buffer[0] = x%10;
 272   1      }
 273          
 274          

C51 COMPILATION COMPLETE.  2 WARNING(S),  2 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -