免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 回復 發帖

浮點數_硬體C

浮點數是人看的

放大 10^x 倍,浮點數�]能變整數

ex: 以 4byte 來放 2^32 = 4294967296

42949 67296
10000.00000
不�|很難放吧,忘了 pc 上所學的,你�{在的 空間、時間都是有限的,

要麻浪費時間,換取空間,要麻浪費空間、換取時間,更甚著,發揮你的大腦,賺取空間和時間。

在 mcu ,和 pc ,操�@上的�@大差異是『數值的有效合理範圍』

先搞清楚你的數值有效合理範圍

sin cos tan ,你要量測的值是多少? 0~360度 0.0~360.0度? 0.00~360.00度?

0~360度,省空間的做法就是建 0~90度,其它三個象限,調整�@下就有了

真的要算 SQRT ,用整數和浮點數,�]是相差甚遠,用32BIT整數 至少可以有正確的�|位數,夠不夠就看應用

例如 sqrt(1.243) ,改成 sqrt(1243000)放大 1000000倍,或

1.243*2^30= sqrt(1334661087)= 8EB5 >>15 次就是你的答案

了解你的數值範圍,然後放大整數,之後再計算就很快又小

小數這種東西是給人看的,不是給 machine 看的,轉成 machine 看的懂的,速度完全不�@樣


就算是用 PC 寫 ,經過分析之後的寫法�]是完全不同,以下是�@例

http://blog.ijliao.info/archives/2006/12/04/2739/


同樣是建 sin table 以下三種,表�{出 完全不同的思考羅輯,越下面,越接近 machine

cos table �]能用這樣的方式建,至於 tan 就不適合,�]為 從 -∞ ~0 ~ +∞ ,數值是很難建的,但是可以用 sin cos 在數學上取代

sin table(){
0.0000,    0.0175,    0.0349,    0.0523,    0.0698,    0.0872,    0.1045,    0.1219,    0.1392,    0.1564,     
0.1736,    0.1908,    0.2079,    0.2250,    0.2419,    0.2588,    0.2756,    0.2924,    0.3090,    0.3256,     
0.3420,    0.3584,    0.3746,    0.3907,    0.4067,    0.4226,    0.4384,    0.4540,    0.4695,    0.4848,     
0.5000,    0.5150,    0.5299,    0.5446,    0.5592,    0.5736,    0.5878,    0.6018,    0.6157,    0.6293,     
0.6428,    0.6561,    0.6691,    0.6820,    0.6947,    0.7071,    0.7193,    0.7314,    0.7431,    0.7547,     
0.7660,    0.7771,    0.7880,    0.7986,    0.8090,    0.8192,    0.8290,    0.8387,    0.8480,    0.8572,     
0.8660,    0.8746,    0.8829,    0.8910,    0.8988,    0.9063,    0.9135,    0.9205,    0.9272,    0.9336,     
0.9397,    0.9455,    0.9511,    0.9563,    0.9613,    0.9659,    0.9703,    0.9744,    0.9781,    0.9816,     
0.9848,    0.9877,    0.9903,    0.9925,    0.9945,    0.9962,    0.9976,    0.9986,    0.9994,    0.9998,     
1.0000,    }

sin table(){
0,    175,    349,    523,    698,    872,    1045,    1219,    1392,    1564,     
1736,    1908,    2079,    2250,    2419,    2588,    2756,    2924,    3090,    3256,     
3420,    3584,    3746,    3907,    4067,    4226,    4384,    4540,    4695,    4848,     
5000,    5150,    5299,    5446,    5592,    5736,    5878,    6018,    6157,    6293,     
6428,    6561,    6691,    6820,    6947,    7071,    7193,    7314,    7431,    7547,     
7660,    7771,    7880,    7986,    8090,    8192,    8290,    8387,    8480,    8572,     
8660,    8746,    8829,    8910,    8988,    9063,    9135,    9205,    9272,    9336,     
9397,    9455,    9511,    9563,    9613,    9659,    9703,    9744,    9781,    9816,     
9848,    9877,    9903,    9925,    9945,    9962,    9976,    9986,    9994,    9998,     
10000,    }

sin table(){
0,    1144,    2287,    3430,    4572,    5712,    6850,    7987,    9121,    10252,     
11380,    12505,    13626,    14742,    15855,    16962,    18064,    19161,    20252,    21336,     
22415,    23486,    24550,    25607,    26656,    27697,    28729,    29753,    30767,    31772,     
32768,    33754,    34729,    35693,    36647,    37590,    38521,    39441,    40348,    41243,     
42126,    42995,    43852,    44695,    45525,    46341,    47143,    47930,    48703,    49461,     
50203,    50931,    51643,    52339,    53020,    53684,    54332,    54963,    55578,    56175,     
56756,    57319,    57865,    58393,    58903,    59396,    59870,    60326,    60764,    61183,     
61584,    61966,    62328,    62672,    62997,    63303,    63589,    63856,    64104,    64332,     
64540,    64729,    64898,    65048,    65177,    65287,    65376,    65446,    65496,    65526,     
65536,    }

sin table(){
0x0000,    0x0478,    0x08EF,    0x0D66,    0x11DC,    0x1650,    0x1AC2,    0x1F33,    0x23A1,    0x280C,     
0x2C74,    0x30D9,    0x353A,    0x3996,    0x3DEF,    0x4242,    0x4690,    0x4AD9,    0x4F1C,    0x5358,     
0x578F,    0x5BBE,    0x5FE6,    0x6407,    0x6820,    0x6C31,    0x7039,    0x7439,    0x782F,    0x7C1C,     
0x8000,    0x83DA,    0x87A9,    0x8B6D,    0x8F27,    0x92D6,    0x9679,    0x9A11,    0x9D9C,    0xA11B,     
0xA48E,    0xA7F3,    0xAB4C,    0xAE97,    0xB1D5,    0xB505,    0xB827,    0xBB3A,    0xBE3F,    0xC135,     
0xC41B,    0xC6F3,    0xC9BB,    0xCC73,    0xCF1C,    0xD1B4,    0xD43C,    0xD6B3,    0xD91A,    0xDB6F,     
0xDDB4,    0xDFE7,    0xE209,    0xE419,    0xE617,    0xE804,    0xE9DE,    0xEBA6,    0xED5C,    0xEEFF,     
0xF090,    0xF20E,    0xF378,    0xF4D0,    0xF615,    0xF747,    0xF865,    0xF970,    0xFA68,    0xFB4C,     
0xFC1C,    0xFCD9,    0xFD82,    0xFE18,    0xFE99,    0xFF07,    0xFF60,    0xFFA6,    0xFFD8,    0xFFF6,     
0xFFFF,    }
返回列表