快樂(lè)蝦http://blog.csdn.net/lights_joy/lights@hb165.com本文適用于ADIBF561DSP優(yōu)視BF561EVB開(kāi)發(fā)板VisualDSP++5.0(update5)歡迎轉(zhuǎn)載,但請(qǐng)保留作者信息寫(xiě)一行很簡(jiǎn)單的C代碼:floata=1234.56;用vdsp編譯后的匯編代碼為:R0=2" />

黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

Vdsp(bf561)中的浮點(diǎn)運(yùn)算(2):float的疑問(wèn)

系統(tǒng) 2254 0

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

快樂(lè)蝦

http://blog.csdn.net/lights_joy/

lights@hb165.com

本文適用于

ADI BF561 DSP

優(yōu)視 BF561EVB 開(kāi)發(fā)板

Visual DSP++ 5.0 (update 5)

歡迎轉(zhuǎn)載,但請(qǐng)保留作者信息

寫(xiě)一行很簡(jiǎn)單的 C 代碼:

float a = 1234.56;

vdsp 編譯后的匯編代碼為:

R0 = 20972 ( X ) ;

R0.H = 17562 ;

[ FP + 0x10 ] = R0 ;

有點(diǎn)看不懂,呵呵, R0 的值轉(zhuǎn)換為十六進(jìn)制就是 0x<?xml:namespace prefix = st1 ns = "urn:schemas-microsoft-com:office:smarttags" /><chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="449" unitname="a">449A</chmetcnv>51EC 。根據(jù) vdsp 文檔的說(shuō)法,其單精度浮點(diǎn)數(shù)格式為:

Vdsp(bf561)中的浮點(diǎn)運(yùn)算(2):float的疑問(wèn)

<?xml:namespace prefix = v ns = "urn:schemas-microsoft-com:vml" /><shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 354pt; HEIGHT: 97.5pt" type="#_x0000_t75"><imagedata o:title="" src="file:///F:%5Cdevtemp%5Cmsohtml1%5C01%5Cclip_image001.png"></imagedata></shape>

浮點(diǎn)數(shù)計(jì)算公式:

<shape id="_x0000_i1026" style="WIDTH: 366pt; HEIGHT: 28.5pt" type="#_x0000_t75"><imagedata o:title="" src="file:///F:%5Cdevtemp%5Cmsohtml1%5C01%5Cclip_image003.png"><font color="#000000" size="3"></font></imagedata></shape>

0x<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="449" unitname="a">449A</chmetcnv>51EC 轉(zhuǎn)換為二進(jìn)制:

0100 0100 1001 1010 0101 0001 1110 1100

可得:

Sign = 0

Mantissa = 001 1010 0101 0001 1110 1100

Exponent = 1000 1001

按照公式

<shape id="_x0000_i1027" style="WIDTH: 408.75pt; HEIGHT: 37.5pt" type="#_x0000_t75" alt=""><imagedata src="file:///F:%5Cdevtemp%5Cmsohtml1%5C01%5Cclip_image005.gif" o:><font color="#000000" size="3"></font></imagedata></shape>

Exponent 轉(zhuǎn)換為十進(jìn)制,其值為 137 。

Mantissa 轉(zhuǎn)換為十進(jìn)制,其值為:

2 -3 + 2 -4 + 2 -6 + 2 -9 + 2 -11 + 2 -15 + 2 -16 + 2 -17 + 2 -18 + 2 -20 + 2 -21 =

0.125 + 0.0625 + 0.015625 + 0.001953125 + 0.00048828125 + 0.000030517578125 + 0.0000152587890625 + 0.00000762939453125 + 0.000003814697265625 + 0.00000095367431640625 + 0.000000476837158203125 = 0.205625057220458984375

代入浮點(diǎn)數(shù)計(jì)算公式:

(-1) 0 + 1. 205625057220458984375 * 2 (137-127)

= 1234.56005859375

那么編譯器又是如何將 1234.56 轉(zhuǎn)換為 0x<chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="False" sourcevalue="449" unitname="a">449A</chmetcnv>51EC 的呢?

首先轉(zhuǎn)換整數(shù)部分,用 2 除,取余數(shù),其結(jié)果為:

1234 / 2 = 617 ….. 0

617 / 2 = 308 …….1

308 / 2 = 154 …….0

154 / 2 = 77 ……...0

77 / 2 = 38 ……….1

38 / 2 = 19 ……….0

19/ 2 = 9 ………….1

9 / 2 = 4………… .1

4/ 2 = 2 …………..0

2/2 = 1……………0

1/2 = 0……………1

100 1101 0010 ,用 16 進(jìn)制表示則為: 0x4d2 。

再轉(zhuǎn)換小數(shù)部分,用 2 乘,取整數(shù)位:

0.56 * 2 = 1.12 1

0.12 * 2 = 0.24 0

0.24 * 2 = 0.48 0

0.48 * 2 = 0.96 0

0.96 * 2 = 1.92 1

0.92 * 2 = 1.84 1

0.84 * 2 = 1.68 1

0.68 * 2 = 1.36 1

0.36 * 2 = 0.72 0

0.72 * 2 = 1.44 1

0.44 * 2 = 0.88 0

0.88 * 2 = 1.76 1

0.76 * 2 = 1.52 1

小數(shù)部分的值為 0.1000 1111 0101 11

所以 1234.56 表示成二進(jìn)制數(shù)就是

100 1101 0010. 1000 1111 0101 11

由于浮點(diǎn)數(shù)表示法的尾數(shù)部分以 1 開(kāi)頭,所以上面的這個(gè)數(shù)可以表示為:

1.00 1101 0010 1000 1111 0101 11 * 2 10

從浮點(diǎn)數(shù)的表示公式即可算出

Exponent = 127 + 10 = 137

而尾數(shù)部分則為

00 1101 0010 1000 1111 0101 11

因此整個(gè)數(shù)就是:

0 1000 1001 00 1101 0010 1000 1111 0101 11

符號(hào)位 指數(shù) 尾數(shù)

從整數(shù)的角度來(lái)看就是:

0100 0100 1001 1010 0101 0001 1110 1011

十六進(jìn)制表示為:

4 4 <chmetcnv w:st="on" tcsc="0" numbertype="1" negative="False" hasspace="True" sourcevalue="9" unitname="a">9<span style="mso-spacerun: yes"> </span>A</chmetcnv> 5 1 E B

奇怪得很,最后居然有偏差。莫非 VDSP 還有什么機(jī)關(guān)不成?

參考資料

Vdsp(bf561) 中的浮點(diǎn)運(yùn)算( 1 ):文檔的說(shuō)法 (<chsdate w:st="on" isrocdate="False" islunardate="False" day="16" month="12" year="2008">2008-12-16</chsdate>)

Vdsp(bf561)中的浮點(diǎn)運(yùn)算(2):float的疑問(wèn)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論