在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在單片機上實現開根號

Wildesbeast ? 來源:網絡整理 ? 作者:佚名 ? 2020-01-19 11:02 ? 次閱讀

單片機開平方的快速算法

因為工作的需要,要在單片機上實現開根號的操作。目前開平方的方法大部分是用牛頓迭代法。我在查了一些資料以后找到了一個比牛頓迭代法更加快速的方法。不敢獨享,介紹給大家,希望會有些幫助。

1.原理

因為排版的原因,用pow(X,Y)表示X的Y次冪,用B[0],B[1],。..,B[m-1]表示一個序列,

其中[x]為下標。

假設:

B[x],b[x]都是二進制序列,取值0或1。

M = B[m-1]*pow(2,m-1) + B[m-2]*pow(2,m-2) + 。.. + B[1]*pow(2,1) + B[0]*pow

(2,0)

N = b[n-1]*pow(2,n-1) + b[n-2]*pow(2,n-2) + 。.. + b[1]*pow(2,1) + n[0]*pow

(2,0)

pow(N,2) = M

(1) N的最高位b[n-1]可以根據M的最高位B[m-1]直接求得。

設 m 已知,因為 pow(2, m-1) 《= M 《= pow(2, m),所以 pow(2, (m-1)/2) 《= N 《=

pow(2, m/2)

如果 m 是奇數,設m=2*k+1,

那么 pow(2,k) 《= N 《 pow(2, 1/2+k) 《 pow(2, k+1),

n-1=k, n=k+1=(m+1)/2

如果 m 是偶數,設m=2k,

那么 pow(2,k) 》 N 》= pow(2, k-1/2) 》 pow(2, k-1),

n-1=k-1,n=k=m/2

所以b[n-1]完全由B[m-1]決定。

余數 M[1] = M - b[n-1]*pow(2, 2*n-2)

(2) N的次高位b[n-2]可以采用試探法來確定。

因為b[n-1]=1,假設b[n-2]=1,則 pow(b[n-1]*pow(2,n-1) + b[n-1]*pow(2,n-2),

2) = b[n-1]*pow(2,2*n-2) + (b[n-1]*pow(2,2*n-2) + b[n-2]*pow(2,2*n-4)),

然后比較余數M[1]是否大于等于 (pow(2,2)*b[n-1] + b[n-2]) * pow(2,2*n-4)。這種

比較只須根據B[m-1]、B[m-2]、。..、B[2*n-4]便可做出判斷,其余低位不做比較。

若 M[1] 》= (pow(2,2)*b[n-1] + b[n-2]) * pow(2,2*n-4), 則假設有效,b[n-2] =

1;

余數 M[2] = M[1] - pow(pow(2,n-1)*b[n-1] + pow(2,n-2)*b[n-2], 2) = M[1] -

(pow(2,2)+1)*pow(2,2*n-4);

若 M[1] 《 (pow(2,2)*b[n-1] + b[n-2]) * pow(2,2*n-4), 則假設無效,b[n-2] =

0;余數 M[2] = M[1]。

(3) 同理,可以從高位到低位逐位求出M的平方根N的各位。

使用這種算法計算32位數的平方根時最多只須比較16次,而且每次比較時不必把M的各位逐

一比較,尤其是開始時比較的位數很少,所以消耗的時間遠低于牛頓迭代法。

2. 流程圖

(制作中,稍候再上)

3. 實現代碼

這里給出實現32位無符號整數開方得到16位無符號整數的C語言代碼。

-------------------------------------------------------------------------------

-

/****************************************/

/*Function: 開根號處理 */

/*入口參數:被開方數,長整型 */

/*出口參數:開方結果,整型 */

/****************************************/

unsigned int sqrt_16(unsigned long M)

{

unsigned int N, i;

unsigned long tmp, ttp; // 結果、循環計數

if (M == 0) // 被開方數,開方結果也為0

return 0;

N = 0;

tmp = (M 》》 30); // 獲取最高位:B[m-1]

M 《《= 2;

if (tmp 》 1) // 最高位為1

{

N ++; // 結果當前位為1,否則為默認的0

tmp -= N;

}

for (i=15; i》0; i--) // 求剩余的15位

{

N 《《= 1; // 左移一位

tmp 《《= 2;

tmp += (M 》》 30); // 假設

ttp = N;

ttp = (ttp《《1)+1;

M 《《= 2;

if (tmp 》= ttp) // 假設成立

{

tmp -= ttp;

N ++;

}

}

return N;

}
責任編輯 LK

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 單片機
    +關注

    關注

    6061

    文章

    44843

    瀏覽量

    645363
  • 算法
    +關注

    關注

    23

    文章

    4688

    瀏覽量

    94480
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    單片機能處理帶根號的公式么?如何去除公式的根號?

    單片機能處理帶根號的公式么?誤差是不是會比較大?有沒有什么辦法去除公式的根號?或者減少單片機計算的誤差
    發表于 07-08 17:12

    單片機如何做根號運算?

    我要用單片機測交流有效值,需要根號單片機可以直接做根號運算嗎?
    發表于 09-25 23:11

    【MCU每周論點】吳鑒鷹帶你根號,單片機跑的更快

    一份。 大家知道因為工作的需要,要在單片機上實現根號的操作。目前工程師開平方的方法大部分是用牛頓迭代法。吳鑒鷹在查了一些資料以后找到了一個比牛頓迭代法更加快速的方法。不敢獨享,介紹
    發表于 03-03 19:06

    單片機根號的快速算法

    因為工作的需要,要在單片機上實現根號的操作。目前開平方的方法大部分是用牛頓迭代法。我在查了一些資料以后找到了一個比牛頓迭代法更加快速的方法。不敢獨享,介紹給大家,希望會有些幫助。1.
    發表于 04-10 07:00

    何在單片機上使用c++?

    何在單片機上使用c++?
    發表于 10-08 06:38

    代碼是如何在單片機上跑的呢

    淺談:對于任何電子產品,硬件是軟件運行的基礎,而軟件賦予了硬件靈魂,兩者有機結合成為一個功能豐富、強大的系統。我們寫的代碼是如何在單片機上跑的呢?下面以比較簡單的方式簡述一下,如果還要研究很多細節
    發表于 11-17 07:47

    何在STM32單片機上實現Printf函數打印串口信息并進行代碼調試?

    何在STM32單片機上實現Printf函數打印串口信息并進行代碼調試?
    發表于 12-02 07:35

    單片機上實現FTP

    何在單片機上實現FTP文件上傳這篇文章是我本人編寫的 在網上也是絕無僅有一開始發表在我的網易博客上了 結果被轉移且被誤傷 有可能存在某些字符或文字出錯的地方有時間我會重新編寫, 目前大家先看
    發表于 01-07 06:53

    何在單片機上使用TEA加密通信源代碼免費下載

    本文檔的主要內容詳細介紹的是如何在單片機上使用TEA加密通信源代碼免費下載。
    發表于 07-19 17:37 ?2次下載
    如<b class='flag-5'>何在</b><b class='flag-5'>單片機上</b>使用TEA加密通信源代碼免費下載

    何在51單片機上使用DS1302

    本文檔的主要內容詳細介紹的是如何在51單片機上使用DS1302。
    發表于 07-17 17:38 ?5次下載
    如<b class='flag-5'>何在</b>51<b class='flag-5'>單片機上</b>使用DS1302

    何在2KB內存的單片機上實現俄羅斯方塊

    本文檔的主要內容詳細介紹的是如何在2KB內存的單片機上實現俄羅斯方塊。
    發表于 06-04 17:52 ?1次下載

    何在單片機上實現卡爾曼濾波詳細計算方法和程序概述

    本文檔的主要內容詳細介紹的是如何在單片機上實現卡爾曼濾波詳細計算方法和程序概述。
    的頭像 發表于 08-11 11:23 ?1.3w次閱讀
    如<b class='flag-5'>何在</b><b class='flag-5'>單片機上</b><b class='flag-5'>實現</b>卡爾曼濾波詳細計算方法和程序概述

    何在51單片機上實現串口收發命令

    串口通信在電子行業中應用較廣,通過上位機發送命令,實現各種功能的控制及數據的反饋。本文就是在51 單片機上實現串口收發命令,程序調試正常,可以運用到控制系統中。
    發表于 11-26 17:02 ?12次下載

    單片機】代碼是如何在單片機上運行起來的?

    淺談:對于任何電子產品,硬件是軟件運行的基礎,而軟件賦予了硬件靈魂,兩者有機結合成為一個功能豐富、強大的系統。我們寫的代碼是如何在單片機上跑的呢?下面以比較簡單的方式簡述一下,如果還要研究很多細節
    發表于 11-10 19:20 ?3次下載
    【<b class='flag-5'>單片機</b>】代碼是如<b class='flag-5'>何在</b><b class='flag-5'>單片機上</b>運行起來的?

    單片機上如何實現快速的開方運算

    最近,做項目時,需要使用開發運算,但是調用標準c庫的sqrt函數,發現該函數有2k多大小,當然執行時間也就很長了,根本不適合單片機的運算。故而,網上找了一個簡化的算法,編譯出來后,只有不到100字節
    發表于 11-16 15:51 ?7次下載
    <b class='flag-5'>單片機上</b>如何<b class='flag-5'>實現</b>快速的開方運算
    主站蜘蛛池模板: 婷婷综合在线观看丁香 | 天天操天天舔天天干 | 色综合激情丁香七月色综合 | 48pao强力打造免费基地 | 色秀视频免费高清网站 | 涩999 | 一级做a爱免费观看视频 | brazzers在线播放 | 免费国产综合视频在线看 | 一级不卡毛片 | 青草午夜精品视频在线观看 | 美女张开腿露出尿口让男人桶 | 91桃色国产线观看免费 | 欧美色久 | 男女一进一出无遮挡黄 | 成年女人毛片免费视频 | 九月婷婷亚洲综合在线 | 中文字幕婷婷 | 色吧亚洲欧美另类 | 奇米影视777狠狠狠888不卡 | 日日夜夜爽 | 天堂-bt种子| 在线观看永久免费 | 天天爱天天干天天操 | 国产精品久久久精品三级 | 国产三级精品最新在线 | a级毛片免费网站 | 求网址你懂的手机在线观看网站 | 综合啪啪 | 一级在线免费视频 | 四虎4hu永久在线观看 | 黄网观看| 四虎影院黄色片 | 国模网站 | 五月天婷婷电影 | 成人精品视频在线观看播放 | 免费的毛片 | 日韩一区二区三区在线 | 韩国韩宝贝2020vip福利视频 | 日产精品卡二卡三卡四卡无卡乱码 | 婷婷午夜天 |