問題背景:
在使用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。非基本數...