立即註冊 登錄
痞酷網_PIGOO 返回首頁

SIMON1016的個人空間 https://211-20-236-22.hinet-ip.hinet.net/?9160 [收藏] [複製] [RSS]

日誌

軟體筆記1 關於一些浮點常數 以整數運算處理時 x K/(2^n) 移n位 ... ... ...

熱度 1已有 1996 次閱讀2017-4-24 10:28 PM

用了一點點 數值分析 逼近值概念

浮點運算器是 工業制御 CPU 的硬傷, 也是轉機讓寫程式的人一較本領的擂台

* K/m  ; m需等於2^n    就是移n位的意思    用C或組合語言  都算好處理

π 3.14159
的逼近值    *  201/ 64 =   3.140625
e    2.71828 的逼近值    *  87/ 32 =   2.71875

自然對數的逼近值比泰勒展開式 6階 還接近, 夠我用了
用哪裡 ciko大介紹的 ESR 表   刻度不是線性的  是自然對數

------2017 04 28 續-----
然而上述   *  201/ 64   以及   *  87/ 32  之中
為了加快運算效率 ,  刻意使用移位方式取代除法 , 
因此 除數(分母) 使用    2的N 次方  也就是 將分子數值  右移N

那麼... 分子201以及  87  是怎麼來的?
 有一種數學計算方法 叫做  窮舉法(暴力破解法)  請GOOGLE一下
拿一堆數字一直試著代入分子 看哪一個是答案
在上述一堆數字  可先剔除一些不要的範圍 ( 或說指定範圍候選數字)
如果以八位元CPU來說 
因 除數(分母) 使用    2的N 次方   也就是說N 只有1~8 
以3.14159 * 2的N 次方(N代入1~8 )  得到的數字 哪個最接近 整數  
例如 
3.14159 *  1= 3.14159
3.14159 *  2= 6.28318
3.14159 *  4=12.56636
3.14159 *  8=25.13272
3.14159 * 16=50.26544
3.14159 * 32=100.53088
3.14159 * 64=201.06176
3.14159 * 128=402.12352
3.14159 * 256=804.24704
上述201.06176 是最接近整數(誤差最小)  取其整數為201
看懂了之後  就可在PC寫一個VB版暴力破解法的程式(直接比較哪個最接近 整數 )
不會寫也沒關係 計算機多按幾下或 EXECL 建表計算
會捉老鼠就是好貓...

----
鮮血到這, 整理好再重新發布  賺積分

路過

雞蛋

鮮花

握手

雷人

發表評論 評論 (1 個評論)

回復 kip 2017-5-3 12:23 AM
我的建議, π , e 直接設定為 float or double constant 即可。一來程式容易閱讀、另一來,精度也比上面運算值要準確。
我印象中,在很古老的論文上面有看過移位這樣的做法,它主要應用在舊型 casio 這類骨董計算機,以及對向量或座標進行rotation (就是一個三角函數的矩陣,或稱旋轉矩陣),使用這方法,簡化三角函數及矩陣旋轉的運算之用。

facelist

您需要登錄後才可以評論 登錄 | 立即註冊

關閉

站長小叮嚀上一條 /1 下一條

禁閉室|手機版|連繫我們|痞酷網電子技術論壇

GMT+8, 2023-1-31 05:10 AM , Processed in 0.032745 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.