在微控制器中的浮點數程式設計

2021-05-25 16:22:14 字數 1955 閱讀 2157

問題背景:

在使用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;等等……

關於微控制器通過串列埠傳送浮點數資訊

最近弄乙個小東西的時候,需要將ad採集的資料,通過串列埠傳送上位機。由於還得在下位機部分顯示出來,所以這個ad採集的資料轉換之後傳送到串列埠,比較容易點。但是問題來了,以前的串列埠,只有從gps模組接收的資訊是浮點型別外。其他的東西,都只是把字元型別或者字串型別的資料發到串列埠。查閱了一點資料,這裡...

微控制器 MATLAB浮點數(float32)通訊

程式思路 描述 把float型資料原封不動的按照儲存4位元組傳送 輸入 要傳送的浮點數 輸出 無 void float send float data 這裡想請教一下大家,為什麼add unsigned char data 中要帶 unsigned char 不然就給waring point to ...

PHP中的浮點數

php中的浮點數 浮點數精度 在php中,浮點數的字長和平台相關,通常最大值是 1.8e308 並具有 14 位十進位制數字的精度 64 位 ieee 格式 浮點數的精度有限。儘管取決於系統,php 通常使用 ieee 754 雙精度格式,則由於取整而導致的最大相對誤差為 1.11e 16。非基本數...