單片機求平方根的高效快速算法

2020-12-12 電子產品世界

當我們使用8位MCU編程,用到求平方根算法時,如果調用自帶的子程序,那麼生產的代碼較多,效率低下。因為軟體自帶算法是用浮點數類型來計算的,現實中我們往往只需要返回整型數據,採用以下代碼求平方根將會大大提高計算效率。

static unsigned long sqrt(unsigned long x)
{
register unsigned long xr; // result register
register unsigned long q2; // scan-bit register
register unsigned char f; // flag (one bit)

xr = 0; // clear result
q2 = 0x40000000L; // higest possible result bit
do
{
if((xr + q2) = x)
{
x -= xr + q2;
f = 1; // set flag
}
else{
f = 0; // clear flag
}
xr >>= 1;
if(f){
xr += q2; // test flag
}
} while(q2 >>= 2); // shift twice
if(xr x){
return xr +1; // add for rounding
}
else{
return xr;
}
}

51單片機相關文章:51單片機教程

單片機相關文章:單片機教程

單片機相關文章:單片機視頻教程

單片機相關文章:單片機工作原理


相關焦點

  • 單片機C語言實現求平方根算法
    C語言中要求平方根,可以在頭文件中加入#include <math.h>.然後調用sqrt(n);函數即可。但在單片機中調用此函數無疑會耗費大量資源和時間,是極不合適的。在此,總結下網上常見的四種單片機常用開方根算法:對於擁有專門的乘除法指令的單片機,可採用以下兩種方法:1、二分法對於一個非負數n,它的平方根不會小於大於(n/2+1)(謝謝@linzhi-cs提醒)。在[0, n/2+1]這個範圍內可以進行二分搜索,求出n的平方根。
  • 單片機C語言求平方根函數
    在單片機中要開平方.可以用到下面算法: 算法1: 本算法只採用移位、加減法、判斷和循環實現,因為它不需要浮點運算,也不需要乘除運算,因此可以很方便地運用到各種晶片上去。
  • Cortex―M0單片機二-十進位整數轉換的快速算法
    該快速算法的核心內容是通過高效的彙編語言來實現常數除法,無論在程序代碼的運行時間和存儲空間上,都遠勝於sprintf函數。關鍵詞:Cortex-M0;單片機;二-十進位轉換BCD碼;常數除法;快速算法引言 在單片機應用系統中,一般都需要高效快速地完成系統所需要的任務,並在任務完成後使系統進入睡眠或低功耗狀態,以便最大限度地節省系統功耗,增強系統的抗幹擾能力
  • Cortex—M0單片機二-十進位整數轉換的快速算法
    引言 在單片機應用系統中,一般都需要高效快速地完成系統所需要的任務,並在任務完成後使系統進入睡眠或低功耗狀態,以便最大限度地節省系統功耗,增強系統的抗幹擾能力
  • 51單片機整數二一十進位轉換的快速算法
    提出的快速算法思路是,首先求出整數中包含的1000的個數,方法是採用二進位整數的高6位作為其預估,再通過2次校正得到準確值。算法的關鍵是充分利用89C51單片機的兩條特殊指令――單字節乘和單字節除。其耗費時間不及使用sprintf()函數的1/10。
  • CRC校驗碼在單片機中的程序實現的求取
    對於8位的單片機系統,要實現CRC通信就必須編寫生成CRC碼的指令程序,且由於單片機的程序存儲器很少、運算速度也比較低,因此要求程序代 碼儘量少,算法必須簡單。下面將以CRC—CCITT標準為例來介紹CRC通信碼的單片機實現過程。
  • 利用矢量旋轉求解平方根的算法及其FPGA實現*
    傳統的開平方算法主要可以分為三大類:牛頓迭代法[1~3],SRT-冗餘算法[4~5],非冗餘算法[6~7]。  當直接利用牛頓迭代法進行開平方運算時,涉及到複雜的除法運算。為了避免除法運算,必須首先計算出平方根的倒數,再與被開方數相乘得到平方根。利用牛頓迭代法求根的迭代次數隻和初始值與被開方數之間的誤差有關,而與被開方數無關。
  • 一種基於單片機的工頻幹擾濾除快速算法
    實際上,還可以採用數位訊號處理的相關算法,通過軟體濾波器濾除工頻幹擾。軟體濾波算法的採用,無疑會在簡化電路結構的同時,使系統的硬體資源得到更加充分的利用,並達到降低產品成本的要求。  AVR單片機是Atmel公司生產的8位精簡指令集(RISC)單片機。與同類單片機相比,在運算速度、外設資源、靈活性等方面性能均衡,性價比較高。
  • 每日一道 LeetCode (16):求 x 的平方根
    ❝每天 3 分鐘,走上算法的逆襲之路。x 的平方根題目來源:https://leetcode-cn.com/problems/sqrtx/實現 int sqrt(int x) 函數。計算並返回 x 的平方根,其中 x 是非負整數。由於返回類型是整數,結果只保留整數的部分,小數部分將被捨去。
  • 用於單片機的幾種C語言算法
    但在某些特定場合,不可避免地要用到數學運算,儘管單片機並不擅長實現算法和進行複雜的運算。下面主要是介紹如何用單片機實現數字濾波。在單片機進行數據採集時,會遇到數據的隨機誤差,隨機誤差是由隨機幹擾引起的,其特點是在相同條件下測量同一量時,其大小和符號會現無規則的變化而無法預測,但多次測量的結果符合統計規律。
  • Ellen講座心得兼平方根
    是的,因為有期待,希望孩子能快速掌握知識點,就會在孩子還在探索和發現的過程中,忍不住「告訴」孩子算法或者規則。結果,雖然孩子能夠掌握這些算法或規則,但沒有了自己發現的驚喜,也沒有產生「我學啥都能行」的自信心爆棚和繼續挑戰的動力。     反思上個月好奇寶寶發現並快速掌握分數同分母加減法,其主要原因是casa階段足夠多感官教具的使用,「發現規則」的驚喜是水到渠成。
  • 寫出高效優美的單片機C語言代碼
    下面發一些我在網上看到的技巧和自己的一些經驗來和大家分享;1、如果可以的話少用庫函數,便於不同的mcu和編譯器間的移植2、選擇合適的算法和數據結構應該熟悉算法語言,知道各種算法的優缺點,具體資料請參見相應的參考資料,有很多計算機書籍上都有介紹。
  • 單片機常用的14個C語言算法
    算法的描述:是對要解決一個問題或要完成一項任務所採取的方法和步驟的描述,包括需要什麼數據(輸入什麼數據、輸出什麼結果)、採用什麼結構、使用什麼語句以及如何安排這些語句等。通常使用自然語言、結構化流程圖、偽代碼等來描述算法。
  • 單片機浮點數的實用快速除法介紹
    而一般單片機是沒有浮點數運算指令的,必須自行編制相應軟體。在進行除法計算時,通常使用的方法是比較除法,即利用循環移位和減法操作來得到24~32位商,效率很低。這裡給出一種浮點數除法運算的實用快速算法。該方法以數值計算中的預估-修正方法為指導,充分利用了16位單片機的乘除法功能,很輕易地實現了浮點數的除法。
  • 單片機DSP必備概念:快速教會你傅立葉算法
    在實際應用中通常採用快速傅立葉變換計算DFT。快速傅立葉變換(Fast Fourier Transform:FFT)是一種計算數位訊號序列的離散傅立葉變換(Discrete Fourier Transform:DFT)或其逆變換(IDFT)的算法。傅立葉分析將信號從其原始域(通常是時間或空間)轉換為頻域的表示,反之亦然。DFT是通過將一系列值分解成不同頻率的分量來獲得的。
  • 51單片機+PID算法水溫控制系統設計
    本系統設計採用基於PID算法的單片機控制來實現水溫的調控。單片機控制部分採用AT89C51單片機為核心,採用軟體編程,實現用PID算法來控制PWM波的產生,繼而控制電爐的加熱來實現溫度控制。通過編程對PID各參數的調整,來達到提高加溫速度,減小超調的目的。
  • JavaScript用Math.sqrt()求平方根
    基本概念Math.sqrt()方法的名字sqrt是"square root"的縮寫,它代表的正是平方根。因此,Math.sqrt()方法的作用就是用來求一個數的平方根。它的語法結構如下所示:Math.sqrt(x);參數x應該是一個數字,即它的類型應該是Number。
  • 51單片機PID算法程序(三)增量式PID控制算法
    當執行機構需要的不是控制量的絕對值,而是控制量的增量(例如去驅動步進電動機)時,需要用PID的「增量算法」。        由(2-6)可以看出,如果計算機控制系統採用恆定的採樣周期T,一旦確定A、B、C,只要使用前後三次測量的偏差值,就可以由(2-6)求出控制量
  • 細數那些改變計算技術的偉大算法
    在過去,很多巧妙的計算機算法設計,改變了我們的計算技術。通過操作標準計算機中提供的中間運算符,可以產生很多的高效函數。這些函數導致了電腦程式的複雜性和多樣性,這也是今天計算機時代快速發展的重要原因。如下所示,我們列舉了一些算法,它們改變了我們的計算機使用。
  • 六十八、快速冪算法、牛頓迭代法、累加數組+二分查找的變形
    「---- Runsen」❞上次介紹了二分查找算法及其四個變形問題,下面介紹二分法常用的場景和典型的例題。快速冪算法題目是來自Leetcode:50.示例 1:輸入: 2.00000, 10輸出: 1024.00000其實快速冪相關的問題,個人覺得只要你是一名程式設計師,就必須要掌握快速冪算法。