亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++浮點(diǎn)數(shù)類型詳情

 更新時(shí)間:2021年11月03日 10:43:55   作者:Coder_LT  
這篇文章主要介紹了C++浮點(diǎn)數(shù)類型,浮點(diǎn)數(shù)是C++的第二組基本類型,它能夠表示帶小數(shù)部分的數(shù)字。不僅如此,浮點(diǎn)數(shù)的范圍也比int更大,可以表示更大范圍的數(shù)字。下面來(lái)我們大家一起來(lái)學(xué)習(xí)學(xué)習(xí)內(nèi)容

1、浮點(diǎn)數(shù)

浮點(diǎn)數(shù)是C++的第二組基本類型,它能夠表示帶小數(shù)部分的數(shù)字。不僅如此,浮點(diǎn)數(shù)的范圍也比int更大,可以表示更大范圍的數(shù)字。

我們都知道在計(jì)算機(jī)當(dāng)中,所有數(shù)據(jù)本質(zhì)上都是轉(zhuǎn)化成二進(jìn)制存儲(chǔ)的。整數(shù)很簡(jiǎn)單,存儲(chǔ)的就是轉(zhuǎn)化成二進(jìn)制之后的01串,那么浮點(diǎn)數(shù)又是如何存儲(chǔ)的呢?

很容易猜到的是浮點(diǎn)數(shù)存儲(chǔ)的結(jié)果也是二進(jìn)制,但相比于整型直接轉(zhuǎn)化成二進(jìn)制要復(fù)雜一些。

它需要先表示成下面這行式子:

這里的n即我們要存儲(chǔ)的浮點(diǎn)數(shù),s表示符號(hào)位,m是尾數(shù),而e則是階數(shù)。

符號(hào)位很好理解,它和整型當(dāng)中的符號(hào)位一樣,0表示正數(shù),1表示負(fù)數(shù)。m表示尾數(shù),。我們這么看很抽象,來(lái)看一個(gè)例子,比如3.0,轉(zhuǎn)化成二進(jìn)制是,相當(dāng)于。那么,。

我們了解了浮點(diǎn)數(shù)的表示方式,那么它又是如何存儲(chǔ)在計(jì)算機(jī)當(dāng)中的呢?這需要我們進(jìn)一步地剖析其中的細(xì)節(jié)。

2、關(guān)于m

首先是m,m被定義成一個(gè)大于等于1,小于2的小數(shù)。我們可以簡(jiǎn)單寫(xiě)成1.xx,其中xx表示的就是小數(shù)的部分。

既然它總是大于等于1,小于2的,那么它的個(gè)位一定是1,我們就可以將它省略,僅僅看之后小數(shù)的部分。小數(shù)的部分,我們同樣使用二進(jìn)制來(lái)逼近。比如0.625,可以表示成0.5 + 0.125,即,表示成二進(jìn)制就是,只不過(guò)這里它的最高位是從-1開(kāi)始的。

以32位的浮點(diǎn)數(shù)為例,除去1位表示符號(hào),8位表示階數(shù)之后,還有23位留給m。由于我們舍掉了小數(shù)點(diǎn)之前的1,所以我們的階數(shù)是從-1開(kāi)始的,理論上等價(jià)于24個(gè)二進(jìn)制位。

3、關(guān)于e

在浮點(diǎn)數(shù)存儲(chǔ)當(dāng)中,e是一個(gè)無(wú)符號(hào)整數(shù)。以32位浮點(diǎn)數(shù)為例,e一共有8位,可以表示0-255。

但e是可以為負(fù)數(shù)的,根據(jù)IEEE 754的規(guī)定,e的真實(shí)值必須再減去一個(gè)中間數(shù)。對(duì)于8位的e,它的中間數(shù)是127。比如e的實(shí)際值是10,但是存儲(chǔ)的時(shí)候需要存儲(chǔ)成127+10=137。

除此之外,e還有另外三種情況:

  • e不全為0,或全為1時(shí),采用上述的規(guī)則表示
  • e全為0時(shí),e等于1-127,有效數(shù)字m不再默認(rèn)加上1,這樣是為了還原0.xxx的小數(shù),以及接近于0的數(shù)
  • e全為1時(shí),如果有效數(shù)字m全為0,表示無(wú)窮大,如果m不全為0,表示nan(not a number)

關(guān)于e的規(guī)則看起來(lái)有些復(fù)雜,初看覺(jué)得有些難以理解,為什么要用減去中間值的設(shè)計(jì),而不用符號(hào)位?后來(lái)仔細(xì)思考了一下才發(fā)現(xiàn),如果引入符號(hào)位很難區(qū)分0.xxx以及e就是等于0的情況,雖然也可以特判處理,但就沒(méi)有現(xiàn)在這樣優(yōu)雅了。

覺(jué)得上文看不懂的小伙伴可以直接略過(guò)這段,畢竟這個(gè)是浮點(diǎn)數(shù)的實(shí)現(xiàn)原理,算是很底層的內(nèi)容了,C++ primer上對(duì)于這部分也沒(méi)有過(guò)多闡述。

4、浮點(diǎn)數(shù)的使用

C++當(dāng)中有兩種浮點(diǎn)數(shù)的書(shū)寫(xiě)方式,第一種是使用常規(guī)的小數(shù)點(diǎn)表示法:

double a = 1.23;
float b = 3.43;


另外一種寫(xiě)法是科學(xué)記數(shù)法,寫(xiě)成:

double a = 2.45e8;
double b = 1e-7;


2.45e8表示,e之后可以跟正數(shù)也可以跟負(fù)數(shù),但數(shù)字當(dāng)中不能有空格。

5、浮點(diǎn)數(shù)類型

和C語(yǔ)言一樣,C++也有三種浮點(diǎn)數(shù)類型:float,doublelong double。和整型一樣,這三種類型都是浮點(diǎn)數(shù),只不過(guò)表示的范圍不同。

浮點(diǎn)數(shù)的范圍有兩個(gè)部分綜合決定,一個(gè)部分是有效數(shù)字。比如14179是5位有效數(shù)字,而14000只有兩位,因?yàn)楹竺嫒齻€(gè)0都是填充位,有效數(shù)字的位數(shù)不依賴小數(shù)點(diǎn)的位置。C++當(dāng)中要求,float通常表示7位有效數(shù)字,double通常16位位,而long double至少和double一樣。

另外,它們能夠表達(dá)的指數(shù)范圍至少是-37到37。一般來(lái)說(shuō),float一共是4個(gè)字節(jié)32位,而double是8個(gè)字節(jié)64位,當(dāng)然這也取決于具體的運(yùn)行環(huán)境。

6、注意事項(xiàng)

關(guān)于浮點(diǎn)數(shù)的使用有幾點(diǎn)注意事項(xiàng),千萬(wàn)要注意。

  • cout輸出浮點(diǎn)數(shù)會(huì)刪除結(jié)尾的0
  • 書(shū)寫(xiě)浮點(diǎn)數(shù)常量時(shí)默認(rèn)為double類型,如果需要強(qiáng)制表示為float類型,請(qǐng)?jiān)诮Y(jié)尾加上后綴f或者F,如:2.34f
  • 由于浮點(diǎn)數(shù)有精度,不能直接判斷兩個(gè)浮點(diǎn)數(shù)是否相等,很有可能得不到預(yù)期結(jié)果,正確的做法是判斷精度范圍,

如:

double epsilon = 1e-8;
// 判斷a是否和b相等
if (abs(a - b) < epsilon) {
    // todo
}

判斷兩個(gè)浮點(diǎn)數(shù)a和b是否相等,等價(jià)于兩者的差的絕對(duì)值小于某一個(gè)精度。

范圍問(wèn)題,如運(yùn)行下列代碼將得到錯(cuò)誤的結(jié)果:

float a = 2.3e22f;
float b = a + 1.0f;

cout << b - a << endl;

輸出的結(jié)果將是0,因?yàn)?.3e22是一個(gè)小數(shù)點(diǎn)左邊有23位的數(shù)字,加上1之后,就是在第23位加上1。但是float類型只能表示數(shù)字中的前6位或者前7位,表示不了這么高的精度,因此這個(gè)+1的操作完全沒(méi)有生效。

這個(gè)問(wèn)題是一個(gè)大坑,一不小心就會(huì)中招,千萬(wàn)要小心。

到此這篇關(guān)于C++浮點(diǎn)數(shù)類型詳情的文章就介紹到這了,更多相關(guān)C++浮點(diǎn)數(shù)類型內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

注:文章轉(zhuǎn)自微信眾號(hào):Coder梁(ID:Coder_LT)

相關(guān)文章

  • OpenCV如何提取圖片中曲線

    OpenCV如何提取圖片中曲線

    這篇文章主要為大家詳細(xì)介紹了OpenCV如何提取圖片中曲線,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • CLion搭建配置C++開(kāi)發(fā)環(huán)境的圖文教程 (MinGW-W64 GCC-8.1.0)

    CLion搭建配置C++開(kāi)發(fā)環(huán)境的圖文教程 (MinGW-W64 GCC-8.1.0)

    這篇文章主要介紹了CLion搭建配置C++開(kāi)發(fā)環(huán)境的教程 (MinGW-W64 GCC-8.1.0),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 關(guān)于C語(yǔ)言中E-R圖的詳解

    關(guān)于C語(yǔ)言中E-R圖的詳解

    今天小編就為大家分享一篇關(guān)于關(guān)于C語(yǔ)言中E-R圖的詳解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • 詳解C語(yǔ)言未初始化的局部變量是多少

    詳解C語(yǔ)言未初始化的局部變量是多少

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言未初始化的局部變量是多少,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • C++?OpenCV實(shí)戰(zhàn)之車道檢測(cè)

    C++?OpenCV實(shí)戰(zhàn)之車道檢測(cè)

    這篇文章主要介紹了基于C++?OpenCV實(shí)現(xiàn)的車道檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • C++實(shí)現(xiàn)寢室衛(wèi)生管理系統(tǒng)

    C++實(shí)現(xiàn)寢室衛(wèi)生管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)寢室衛(wèi)生管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C++調(diào)用Matlab函數(shù)求特征值

    C++調(diào)用Matlab函數(shù)求特征值

    這篇文章主要為大家詳細(xì)介紹了C++調(diào)用Matlab函數(shù)求特征值,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-06-06
  • 深入了解C語(yǔ)言中的動(dòng)態(tài)內(nèi)存分配

    深入了解C語(yǔ)言中的動(dòng)態(tài)內(nèi)存分配

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言中的動(dòng)態(tài)內(nèi)存分配,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)C語(yǔ)言有一定的幫助,需要的可以參考一下
    2022-06-06
  • C++ map用法總結(jié)(整理)

    C++ map用法總結(jié)(整理)

    這篇文章主要介紹了C++ map用法總結(jié)(整理),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • C語(yǔ)言棧的表示與實(shí)現(xiàn)實(shí)例詳解

    C語(yǔ)言棧的表示與實(shí)現(xiàn)實(shí)例詳解

    這篇文章主要介紹了C語(yǔ)言棧的表示與實(shí)現(xiàn),對(duì)于數(shù)據(jù)結(jié)構(gòu)與算法的研究有一定的借鑒價(jià)值,需要的朋友可以參考下
    2014-07-07

最新評(píng)論