單片機浮點數的實用快速除法介紹

2021-01-09 電子產品世界

作為單片機程式設計師來說,在編寫程序時經常要檢驗程序中的浮點數運算結果是否正確,但手中又沒有合適的檢驗工具,非常麻煩。而一般單片機是沒有浮點數運算指令的,必須自行編制相應軟體。在進行除法計算時,通常使用的方法是比較除法,即利用循環移位和減法操作來得到24~32位商,效率很低。這裡給出一種浮點數除法運算的實用快速算法。該方法以數值計算中的預估-修正方法為指導,充分利用了16位單片機的乘除法功能,很輕易地實現了浮點數的除法。

  1 浮點數格式

  IEEE的浮點數標準規定了單精度(4位元組)、雙精度(8位元組)和擴展精度(10位元組)三種浮點數的格式。最常用的是單精度浮點數,格式如圖1所示。但是這種格式的階碼不在同一個字節單元內,不易尋址,從而會影響運算速度。

  通常在單片機上採用的是一種變形格式的浮點數,如圖2所示。其中的23位尾數加上隱含的最高位1,構成一個定點原碼小數,即尾數為小於1大於等於0.5的小數。

  2 快速除法的算法原理

  在16位單片機中只有16位的乘除法,而浮點數的精度(即尾數的有效位數)達24位,因此無法直接相除,但依然可以利用16位的乘除法指令來實現24位除法。不過,如果只進行一次16位的除法必定會帶來很大誤差,因此問題的關鍵在於如何消除這個誤差,從而達到要求的精度。這其實就是通常數值計算中所採用的預估-修正方法。

  假設兩個浮點數經過預處理後,被除數和除數尾數擴展為32位(末8位為0)分別放入X和Y中。鄰YL為Y的低16位,並記YH=Y-YL。顯然YH≈Y,X/Y與Y/YH相差不多:

  可見只需要在X/YH的基礎上再乘以一個修正因子(YH-YL)/YH,就可以得到X/Y的一次校準值。不難證明這個值已經達到了24位的精度要求。事實上,相對誤差滿足:

  這說明這個一次校準值完全可以作為最終的結果。

  3 算法的具體實現

  在具體實現本算法時,主要經過下列步驟:

  這裡的YH雖仍是32位,但其低16位已為0,計算時可以將它視為16位數,這不會影響計算精度。通過兩次16位除法,就可得到精確的32位結果。例如,計算Q0時,第一次除法,X除以YH的高16位,得到的商為Q0的高16位,而16位餘數末尾添0成32位,再除以YH的高16位,得到Q0的低16位(餘數捨去)。由此得到了32位的Q0。

  在具體運算中,X應選除以4(X左移2位),以保證Q0不會溢出(YH取高16位):

  

  由於X為32位(末8位為0),這一操作不影響有效數字。而,不存在溢出的問題。最後計算校準值Q時,有。

  在計算Q0'、Q1時,均進行了兩次16位除法,使得Q0'、Q1均為精確的32位,保證了計算過程中的精度,減小了累積誤差。對於YL=0即除數只有16位有效數字的特殊情況,直接有Q1=1,還能省去兩次16位除法。

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

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

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


相關焦點

  • 在單片機中的浮點數編程
    問題背景: 在使用8BIT單片機進行開發,不支持浮點數運算。但是開發必須用到sin,cos,arctan等浮點數函數。本文引用地址:http://www.eepw.com.cn/article/201611/318614.htm苦想了兩天,才發現,自己要當一回「計算機」。
  • 單片機浮點數的運算原理及表達方式
    打開APP 單片機浮點數的運算原理及表達方式 發表於 2019-04-18 15:38:39 單片機一般浮點數均採用士MxC的形式來表示
  • 適用於高精度單片機小數計算的方法介紹
    在單片機的BCD增量算式,線性化處理等過程中,都會遇到一個共同的問題,那就是小數的運算。在單片機當中,對於小數的表現方法一般只有兩種,一種是浮點數一種是定點數。本文就將對單片機中的浮點數進行概述並對其彙編程序設計進行介紹。
  • 學校裡學不到的C語言教程之6:可怕的浮點數
    所以他告訴我的知識點都是很真誠的,這其中我印象最深的就是浮點數的問題,坦率地說無論我對他們的看法如何,沒有他告訴我,恐怕其中的問題我要兩三年後才會知道。這個問題其實他說得非常的簡單:程序裡不要使用 float,要用 double。這是為什麼?我們來看一個例子:
  • 在編程中,為什麼要把小數叫做浮點數?
    小數為什麼會被成為浮點數?有不少程式設計師雖然能夠很熟練的使用某種程式語言,但是對於小數為什麼會被稱為浮點數卻是不太理解。小數為何會被叫做浮點數?雖然這些程式設計師對於小數被稱作浮點數的問題並不理解,但是這並不影響程式設計師編程,或者可以說這種問題對於一個程式設計師的編程能力絲毫沒有影響。
  • 關於浮點數的細節問題
    1.計算機中浮點數的構成分為三個部分:符號位,指數位和小數位。符號位決定了這個浮點數的正負,指數位和小數位決定了這個浮點數的大小。2.IEEE為了讓浮點數可以表示所有的情況,所以把浮點數分為四種情況:規格化、非規格化、無窮大和NaN規格化是為了表示浮點數的一般情況。非規格化是為了表示0和非常接近0的浮點數。
  • 單片機復位電路原理是什麼 單片機復位電路有哪些?
    那麼問題來了,單片機為什麼需要復位電路呢?單片機復位電路原理是什麼呢?單片機復位電路有哪些種呢?本文將一一為您解答~~~本文引用地址:http://www.eepw.com.cn/article/269787.htm一、單片機復位電路原理- -簡介復位電路,與計算機的清零按鍵類似,卻又存在不同。
  • 基於單片機的多功能電子萬年曆設計(一)
    因此,研究實用電子時鐘及其擴展應用,有著非常現實的意義,具有很大的實用價值。  本系統程序由主程序、中斷服務函數和多個子函數構成。主函數主要完成各子函數和中斷函數的初始化。定時中斷函數主要完成時鐘晶片的定時掃描及鍵盤掃描。時鐘晶片的讀寫函數主要是將時間、日曆信息讀出來,並把要修改具體值寫入時鐘晶片內部。
  • 第19 p,了解Python中的數據類型,了解整數與浮點數
    大家好,我是楊數Tos,這是《從零基礎到大神》系列課程的第19篇文章,第二階段的課程:Python基礎知識:Python中的數據類型介紹及整數、浮點數的講解。學習本課程,建議先看一遍:【計算機基礎知識】課程。
  • 單片機最小系統組成電路及其作用
    下面我們首先來簡單介紹下51單片機各個管腳的具體作用,然後再重點給大家介紹單片機最小系統的概念、組成及其各部分電路原理圖的實際用途。
  • php浮點數和字符串
    有關浮點數的細節1:浮點數不應直接進行大小比較!先看一個現象:可見:浮點數直接進行比較是「不可靠的」。原因是:浮點數在內存中的二進位形式(最底層的形式),是不精確的,比如:那如果需要(其實這很常見)進行浮點數比較,該怎麼辦?考慮現實應用所需的精度要求的基礎上,來講他們轉換為整數後進行比較!
  • python浮點數表示專題及常見問題 - CSDN
    浮點數用來存儲計算機中的小數,與現實世界中的十進位小數不同的是,浮點數通過二進位的形式來表示一個小數。在深入了解浮點數的實現之前,先來看幾個 Python 浮點數計算有意思的例子:0.1 == 0.10000000000000000000001True0.1+0.1+0.1 == 0.3FalseIEEE 浮點數表示法這些看起來違反常識的「錯誤」並非 Python 的錯,而是由浮點數的規則所決定的,即使放到其它語言中結果也是這樣的
  • 單片機直流電機的pwm調速與控制設計
    直流電機的驅動電路有多種不同的設計方案,這裡著重介紹了用分立元件構成的驅動電路和用集成晶片構成的驅動電路。2.1用分立元件構成直流電機的驅動電路利用電晶體,電阻等分立元件,來組成直流電機的全橋驅動電路。因為電機的工作電流較大,而一個三極體的電流放大能力有限,所以採用達林頓組成全橋(H橋)驅動電路控制電機,以滿足電機工作的需要。如圖1所示。
  • 你該了解的單片機復位電路
    你該了解的單片機復位電路 鄧佳佳 發表於 2018-03-23 16:03:43 影響單片機系統運行穩定性的因素可大體分為外因和內因兩部分: 1、外因 射頻幹擾,它是以空間電磁場的形式傳遞
  • 單片機的外部結構-引腳功能
    復位是單片機重新執行程序代碼的意思。8051的復位方式可以是自動復位,也可以是手動復位,見下圖。此外,RESET/Vpd還是一復用腳,Vcc掉電期間,此腳可接上備用電源,以保證單片機內部RAM的數據不丟失。
  • 基於單片機的選頻表自動變步長的設計實現
    這樣在調節頻率時,須大範圍變化時可快速轉動轉輪,而細調時則慢慢的轉動轉輪,達到微調效果。在實際的使用中證明:此種調節方法比較符合操作人員的習慣,因此具有較好的使用價值。本文引用地址:http://www.eepw.com.cn/article/172178.htm
  • 基於單片機的鐵路巡檢儀設計_基於單片機的心率測試儀 - CSDN
    基於51單片機的宿舍火警報警系統基於單片機的智能報警系統設計基於51單片機的報警系統實現網上轉載:本系統具備發送簡訊、接收簡訊,撥打電話、接聽電話等功能。
  • 基於51單片機的DS1307液晶顯示可調萬年曆項目設計
    我已經把這篇設計論文發到百度文庫裡了,不過在那裡下載需要5個財富值,所以為了回報朋友們,在日誌裡又重新整理的一便,這個程序涵蓋了51單片機幾乎所有的知識,學會這個項目可以說51單片機就拿下了。還有技術含量很高的I2C通訊技術,在這個程序裡都有涉及。
  • CPU與單片機的復位電路的作用及基本復位方式
    本文引用地址:http://www.eepw.com.cn/article/186718.htm無論用戶使用哪種類型的單片機,總要涉及到單片機復位電路的設計。而單片機復位電路設計的好壞,直接影響到整個系統工作的可靠性。許多用戶在設計完單片機系統,並在實驗室調試成功後,在現場卻出現了「死機」、「程序走飛」等現象,這主要是單片機的復位電路設計不可靠引起的。