一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - C/C++ - C++浮點數(shù)類型詳情

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

2022-02-19 16:08Coder_LT C/C++

這篇文章主要介紹了C++浮點數(shù)類型,浮點數(shù)是C++的第二組基本類型,它能夠表示帶小數(shù)部分的數(shù)字。不僅如此,浮點數(shù)的范圍也比int更大,可以表示更大范圍的數(shù)字。下面來我們大家一起來學(xué)習(xí)學(xué)習(xí)內(nèi)容

1、浮點數(shù)

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

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

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

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

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

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

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

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

2、關(guān)于m

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

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

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

3、關(guān)于e

在浮點數(shù)存儲當(dāng)中,e是一個無符號整數(shù)。以32位浮點數(shù)為例,e一共有8位,可以表示0-255。

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

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

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

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

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

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

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

?
1
2
double a = 1.23;
float b = 3.43;

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

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

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

5、浮點數(shù)類型

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

浮點數(shù)的范圍有兩個部分綜合決定,一個部分是有效數(shù)字。比如14179是5位有效數(shù)字,而14000只有兩位,因為后面三個0都是填充位,有效數(shù)字的位數(shù)不依賴小數(shù)點的位置。C++當(dāng)中要求,float通常表示7位有效數(shù)字,double通常16位位,而long double至少和double一樣。

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

6、注意事項

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

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

如:

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

判斷兩個浮點數(shù)a和b是否相等,等價于兩者的差的絕對值小于某一個精度。

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

?
1
2
3
4
float a = 2.3e22f;
float b = a + 1.0f;
 
cout << b - a << endl;

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

這個問題是一個大坑,一不小心就會中招,千萬要小心。

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

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

延伸 · 閱讀

精彩推薦
  • C/C++C語言中炫酷的文件操作實例詳解

    C語言中炫酷的文件操作實例詳解

    內(nèi)存中的數(shù)據(jù)都是暫時的,當(dāng)程序結(jié)束時,它們都將丟失,為了永久性的保存大量的數(shù)據(jù),C語言提供了對文件的操作,這篇文章主要給大家介紹了關(guān)于C語言中文件...

    針眼_6702022-01-24
  • C/C++C語言實現(xiàn)電腦關(guān)機(jī)程序

    C語言實現(xiàn)電腦關(guān)機(jī)程序

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)電腦關(guān)機(jī)程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    xiaocaidayong8482021-08-20
  • C/C++c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    c++ 單線程實現(xiàn)同時監(jiān)聽多個端口

    這篇文章主要介紹了c++ 單線程實現(xiàn)同時監(jiān)聽多個端口的方法,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下...

    源之緣11542021-10-27
  • C/C++深入理解goto語句的替代實現(xiàn)方式分析

    深入理解goto語句的替代實現(xiàn)方式分析

    本篇文章是對goto語句的替代實現(xiàn)方式進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下...

    C語言教程網(wǎng)7342020-12-03
  • C/C++C++之重載 重定義與重寫用法詳解

    C++之重載 重定義與重寫用法詳解

    這篇文章主要介紹了C++之重載 重定義與重寫用法詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下...

    青山的青6062022-01-04
  • C/C++學(xué)習(xí)C++編程的必備軟件

    學(xué)習(xí)C++編程的必備軟件

    本文給大家分享的是作者在學(xué)習(xí)使用C++進(jìn)行編程的時候所用到的一些常用的軟件,這里推薦給大家...

    謝恩銘10102021-05-08
  • C/C++C/C++經(jīng)典實例之模擬計算器示例代碼

    C/C++經(jīng)典實例之模擬計算器示例代碼

    最近在看到的一個需求,本以為比較簡單,但花了不少時間,所以下面這篇文章主要給大家介紹了關(guān)于C/C++經(jīng)典實例之模擬計算器的相關(guān)資料,文中通過示...

    jia150610152021-06-07
  • C/C++詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    詳解c語言中的 strcpy和strncpy字符串函數(shù)使用

    strcpy 和strcnpy函數(shù)是字符串復(fù)制函數(shù)。接下來通過本文給大家介紹c語言中的strcpy和strncpy字符串函數(shù)使用,感興趣的朋友跟隨小編要求看看吧...

    spring-go5642021-07-02
主站蜘蛛池模板: ova巨公主催眠1在线观看 | 久久青草免费91线频观看站街 | 门房秦大爷最新章节阅读 | 男生操女生漫画 | 日韩综合久久 | 国产91无毒不卡在线观看 | 我们日本在线观看免费动漫下载 | 国产亚洲综合成人91精品 | 美女模特被c免费视频 | 倩女还魂在线观看完整版免费 | 国产欧美日韩免费一区二区 | 欧洲一级黑寡妇 | 国产成人久久久精品一区二区三区 | 饭冈加奈子黑人解禁在线播放 | 国产免费看黄的私人影院 | 日本精品久久久久久久久免费 | 国内小情侣一二三区在线视频 | 精品福利一区 | 欧洲另类一二三四区 | 亚洲精品福利你懂 | 五月最新商场女厕所高跟嘘嘘 | 1769在线观看 | 欧美日韩亚洲综合在线一区二区 | 成年男女免费大片在线观看 | 成人国产在线观看 | 成人一级黄色大片 | 免费观看大片毛片 | 18hdxxxx日本护士| 欧美一二区视频 | 毛片视频网站在线观看 | 白鹿扒开内裤露出尿孔 | 情趣内衣在线观看 | 含羞草传媒每天免费一次破解 | 四虎免费在线视频 | 91香蕉小视频 | 无人知晓小说姜璟免费阅读 | 我和老丈洗澡同性 | 午夜影院一区二区三区 | 欧美交换乱理伦片120秒 | 美女用手扒开粉嫩的屁股 | 九九精品国产兔费观看久久 |