在单片机中的浮点数编程

来源:互联网 发布:交换机做dhcp域名转换 编辑:程序博客网 时间:2024/04/28 11:02

问题背景:

   在使用8BIT单片机进行开发,不支持浮点数运算。但是开发必须用到sin,cos,arctan等浮点数函数。

 

苦想了两天,才发现,自己要当一回“计算机”。

 

单片机不支持浮点数,可是编程却一定要用到小数。这时,只好自定义“定点小数”了。

所需的浮点数范围有两个区域-1~1,-60~60。精度就按小数点后2、3位了。

 

如果在高级语言中,我想定义的数组是

 

 

double arctantable[95]=

{

0.0174551, 0.0349208,      0.0524078,      0.0699268,      0.0874887,      0.105104,       0.122785,       0.140541,       0.158384,       0.176327,

 

0.19438,        0.212557,       0.230868,       0.249328,       0.267949,       0.286745,       0.305731,       0.32492,        0.344328,       0.36397,

 

0.383864,       0.404026,       0.424475,       0.445229,       0.466308,       0.487733,       0.509525,       0.531709,       0.554309,       0.57735,

 

0.600861,       0.624869,       0.649408,       0.674509,       0.700208,       0.726543,       0.753554,       0.781286,       0.809784,       0.8391,

 

0.869287,       0.900404,       0.932515,       0.965689,       1,      1.03553,        1.07237,        1.11061,        1.15037,        1.19175,

 

1.2349, 1.27994,        1.32704,        1.37638,        1.42815,        1.48256,        1.53986,        1.60033,        1.66428,        1.73205,

 

1.80405,        1.88073,        1.96261,        2.0503, 2.14451,        2.24604,        2.35585,        2.47509,        2.60509,        2.74748,

 

2.90421,        3.07768,        3.27085,        3.48741,        3.73205,        4.01078,        4.33148,        4.70463,        5.14455,        5.67128,

 

6.31375,        7.11537,        8.14434,        9.51436,        11.43,  14.3007,        19.0811,        28.6362,        57.2899,  

-57.2897,-0.0174551,0.0174551,57.2897,-57.2897, -0.0174551 

};

 

 

在单片机中,我可不能这样定义。会报错的。

观察数据后,我们发现整数部分要6bit,符号位要1bit,小数部分(0.99)110 0011(7bit),故一个浮点数,用2byte来表示,高8bit是符号位和整数部分,低8bit是小数部分。

0.0174551(0.02)在单片机中,可以表示为0x0002;

0.0349208,可表示为0x0003;

-57.2897,可表示为0xb91d;等等……