久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

浮點數(shù)

 昵稱70747151 2020-07-03

一 定點整數(shù)與定點小數(shù)

    定點數(shù)表示小數(shù)點位置固定的數(shù),當小數(shù)點放置在最尾部時表示定點整數(shù),,當小數(shù)點放在在符號位右邊時位定點小數(shù),。

    二進制 0111. 表示定點整數(shù),其十進制值為 ,;

    二進制 1111. 表示定點整數(shù),,其十進制值為

    二進制 0.111 表示定點小數(shù),,其十進制值為  ,;

    二進制 1.111 表示定點小數(shù),其十進制值為 ,;

    以上使用原碼表示定點數(shù),,在計算機系統(tǒng)中,使用補碼表示定點數(shù),,這樣將減法運算轉(zhuǎn)換為加法運算,,具體如下:

    原碼 0111. 的補碼仍然為 0111.,原碼 1111. 的補碼為 10000. - 0111. = 1001.,;

    如求十進制數(shù) -7 的補碼表示,,其步驟如下:

    1)求對應(yīng)正數(shù)的補碼表示為 0111;

    2)對 0111 取反得 1000,;

    3)對 1000 加 1 得到 -7 的補碼表示為 1000 + 1 = 1001,;

    應(yīng)用以上規(guī)則,可以推導(dǎo)出 7 的補碼,,其結(jié)果與正數(shù)補碼定義保持一致,,如下:

    1)對 -7 的補碼 1001 取反得 0110,;

    2)對 0110 加 1 得 0111,結(jié)果與正數(shù)補碼定義保持一致,;

    針對定點小數(shù),,其補碼求解方式與定點整數(shù)一致,如下:

    1)原碼1.111 其補碼為:0.111 取反得 1.000 加 1 得 1.001,; 

     2)1.001 取反得 0.110 加 1 得 0.111,,結(jié)果與正數(shù)補碼保持一致;

    當對定點數(shù)(定點整數(shù)或定點小數(shù))進行加法運算時,,如果兩個運算數(shù)符號不一致(最高位符號),,其運算結(jié)果不會溢出;如果兩個運算數(shù)符號一致,,當運算結(jié)果符號發(fā)生改變,,則溢出??梢酝ㄟ^比較運算前后符號變化來判斷是否溢出,,示例如下:

    7 + 7 = 0111 + 0111 = 1110,最高位符號發(fā)生改變,,則溢出,。

    一個更方便得方法是使用兩位符號判斷是否溢出,當兩位符號不同時,,表示溢出,;當兩位符號相同時,表示無溢出,。

 

二 浮點數(shù)表示

    浮點數(shù)使用科學(xué)計數(shù)法,,將特定長度得連續(xù)字節(jié)(32位 或者  64位)分割成不同區(qū)域,分別表示符號,,指數(shù),,尾數(shù)三個部分,具體如下:

    單精度(float)    符號位(1位)+ 指數(shù)(8位)+ 尾數(shù)(23位)

    雙精度 (double)   符號位(1位)+ 指數(shù)(11位)+ 尾數(shù)(52位)

    1)符號位使用 0 表示數(shù)據(jù)為正,,使用 1 表示數(shù)據(jù)為負,;

    2)尾數(shù)一般情況下取值范圍為 [1.0, 2),,由于整數(shù)部分始終為 1 ,,故省略掉;

    3)指數(shù)部分取值范圍為 [-126, 127](針對單精度),,使用偏置量表示負數(shù),,如指數(shù) -1 表示為 -1 + 127 = 126;

    下面使用單精度浮點表示 -158.4:

    1)正整數(shù)部分 158 表示為二進制 1001 1110,;

    2)小數(shù)部分 .4 可表示為 0110 0110 0110 0110...,,方法如下:

         .4 * 2 = .8    0

         .8 * 2 = 1.6  1

         .6 * 2 = 1.2  1

         .2 * 2 = .4    0

         .4 * 2 = .8    0

         ... ...

    3)連接正整數(shù)部分與小數(shù)部分得 1001 1110. 0110 0110 0110 0110...,;

    4)規(guī)格化尾數(shù)得 1.001 1110 0110 0110 0110 0110...,其指數(shù)為 0111(十進制數(shù) 7),;

    5)對指數(shù)使用偏置得 127 + 7 = 0111 1111 + 0111 = 1000 0110,;

    7)整合符號位,規(guī)格化尾數(shù),,偏置后指數(shù)得到單精度浮點表示為:1,,1000 0110,001 1110 0110 0110 0110 0110,;

    將單精度浮點數(shù)  1,,1000 0110,001 1110 0110 0110 0110 0110 轉(zhuǎn)換為10進制得 -158.39990234375,,這是浮點運算中誤差來源之一,。通過使用雙精度浮點,可以減小表示誤差,,但同樣無法消除表示誤差,。計算機表示得浮點數(shù)實際上是整個實數(shù)集得一個有限子集,雙精度只是比單精度能夠表示得浮點數(shù)更加多一些而已,。

 

三 浮點數(shù)誤差

    浮點數(shù)誤差來源包括:

    1)浮點表示時與真實值之間存在誤差,,雙精度浮點誤差小于單精度浮點;

    2)浮點數(shù)計算時,,小階浮點需要與大階浮點對階,,右移小階尾數(shù)可能產(chǎn)生舍入誤差;

    在程序中,,應(yīng)該避免浮點數(shù)誤差所產(chǎn)生得負面影響,。一般策略包括:

    1)控制兩相加數(shù)得階差,避免舍入誤差,;

    2)必要時使用雙精度浮點以減少表示誤差,;

    3)避免雙精度浮點轉(zhuǎn)換到單精度浮點所產(chǎn)生的表示誤差;

 

    在 float.h 中定義了 

    #define FLT_EPSILON      1.192092896e-07F        // smallest such that 1.0+FLT_EPSILON != 1.0

    #define DBL_EPSILON      2.2204460492503131e-016 // smallest such that 1.0+DBL_EPSILON != 1.0

    當某個浮點數(shù)小于 FLT_EPSILON 或者 DBL_EPSILON 時,,該浮點數(shù)無法對相加結(jié)果產(chǎn)生影響,,因此,可以使用該方法來判斷浮點相等,,如:

    if(fabs(num - .1) < FLT_EPSILON) 表示浮點變量 num 與 .1 相等,;

    當然,由于任意實數(shù)被最終轉(zhuǎn)換為一個計算機可表示的浮點值,,對于相同轉(zhuǎn)換規(guī)則,,直接使用 == 判斷浮點相等是可行的;在不同硬件體系結(jié)構(gòu)中,,是否存在差異,,可能需要進一步討論,。

語言 方法
6671 1ojd1
v79m8
  • 適合農(nóng)村的創(chuàng)業(yè)項目「小投資」月入數(shù)萬元
  • 8134 2009/08/09 22:43:34

      本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報,。
      轉(zhuǎn)藏 分享 獻花(0

      0條評論

      發(fā)表

      請遵守用戶 評論公約

      類似文章 更多