在单片机中的浮点数编程

2019-04-15 12:34发布

问题背景:    在使用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;等等……