国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

淺析 Easy C++,C++ 浮點數類型

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

[[429800]]

浮點數

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

我們都知道在計算機當中,所有數據本質上都是轉化成二進制存儲的。整數很簡單,存儲的就是轉化成二進制之后的01串,那么浮點數又是如何存儲的呢?

很容易猜到的是浮點數存儲的結果也是二進制,但相比于整型直接轉化成二進制要復雜一些。它需要先表示成下面這行式子:

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

符號位很好理解,它和整型當中的符號位一樣,0表示正數,1表示負數。m表示尾數,。我們這么看很抽象,來看一個例子,比如3.0,轉化成二進制是,相當于。那么,。

我們了解了浮點數的表示方式,那么它又是如何存儲在計算機當中的呢?這需要我們進一步地剖析其中的細節。

關于m

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

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

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

關于e

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

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

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

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

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

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

浮點數的使用

C++當中有兩種浮點數的書寫方式,第一種是使用常規的小數點表示法:

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

另外一種寫法是科學記數法,寫成:

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

2.45e8表示,e之后可以跟正數也可以跟負數,但數字當中不能有空格。

浮點數類型

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

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

另外,它們能夠表達的指數范圍至少是-37到37。一般來說,float一共是4個字節32位,而double是8個字節64位,當然這也取決于具體的運行環境。

注意事項

關于浮點數的使用有幾點注意事項,千萬要注意。

cout輸出浮點數會刪除結尾的0

書寫浮點數常量時默認為double類型,如果需要強制表示為float類型,請在結尾加上后綴f或者F,如:2.34f

由于浮點數有精度,不能直接判斷兩個浮點數是否相等,很有可能得不到預期結果,正確的做法是判斷精度范圍,如:

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

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

范圍問題,如運行下列代碼將得到錯誤的結果:

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

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

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

本文轉載自微信公眾號「Coder梁」,可以通過以下二維碼關注。轉載本文請聯系Coder梁公眾號。

 

責任編輯:武曉燕 來源: Coder梁
相關推薦

2010-01-15 15:21:35

C++

2010-01-27 16:05:06

C++堆棧

2010-01-21 09:34:57

C++語法

2010-01-25 10:41:59

C++數據類型

2010-01-27 17:16:52

C++構造函數

2010-01-20 10:19:55

C++數組

2010-01-27 10:53:55

C++數據類型

2010-01-26 14:35:11

C++關鍵字

2010-01-28 13:45:06

C++數組

2010-01-28 16:31:54

C++類型

2010-01-27 15:46:15

學習C++效率

2010-01-21 16:18:06

C++語言

2010-01-25 14:18:46

C++對象模型

2010-02-06 17:39:52

C++ strtok

2010-01-14 17:13:53

C++接口

2010-01-21 13:48:30

C++基類

2010-01-26 14:10:22

Visual C++

2010-01-20 09:54:27

C++數據類型

2010-01-18 14:41:52

Visual C++開

2010-01-26 09:50:30

C++接口
點贊
收藏

51CTO技術棧公眾號

美女网站久久| 欧美性video| 国产剧情久久久久久| 亚洲美女一区二区三区| 亚洲电影影音先锋| heyzo高清国产精品| 精品中文字幕av| 国产精品av在线播放| 欧美探花视频资源| 国产一区二区不卡| 天堂99x99es久久精品免费| 黄色av网站在线免费观看| 日韩午夜视频在线观看| 欧美成人四级hd版| 91福利视频久久久久| 国产一区二区福利| 免费av一区| 手机在线免费av| 久久婷婷国产91天堂综合精品| 91亚洲精品在线观看| 亚洲精品日韩欧美| 亚洲激情成人在线| 六月丁香婷婷久久| 久久av免费| 大桥未久在线播放| 导航艳情国产电影| 影音先锋欧美资源| 国产成人精品一区二区在线 | 欧美少妇激情| 久久午夜剧场| 神马影院一区二区三区| 色噜噜久久综合| 国产精品日本精品| 轻点好疼好大好爽视频| 欧美精品成人网| 亚洲国产国产亚洲一二三| 女海盗2成人h版中文字幕| 国产一级黄色电影| 亚洲欧美在线一区二区| 久久久午夜视频| www.com毛片| 国产精品69xx| 欧美1区2区3区4区| 成人动漫一区二区| 精品1区2区在线观看| 日产午夜精品一线二线三线| 色老头在线一区二区三区| 色老板在线观看| 日本道在线视频| 成人精品在线观看| 萌白酱国产一区二区| 69久久99精品久久久久婷婷| 国产精品成人在线观看| 久久国产精品露脸对白| 91精品国产91久久综合| 精品国产第一国产综合精品| 中文字幕伦理免费在线视频| 国产农村av| 自拍日韩亚洲一区在线| 欧美日韩精品免费观看视一区二区| 国产999精品视频| 中文字幕av一区| 欧美一区二区啪啪| 婷婷国产在线综合| 中文字幕的久久| 国产sm精品调教视频网站| 亚洲欧美日韩国产一区| 欧美国产一区二区三区激情无套| 精品一区二区三区四区五区 | 久久久成人av毛片免费观看| 懂色av中文在线| 成人免费观看www在线| 国产成人艳妇aa视频在线| 黄色国产精品一区二区三区| 国产成人精品久久二区二区91| 久久成人精品一区二区三区| 日韩av在线网| 日韩免费福利电影在线观看| 欧美性极品少妇精品网站| 亚洲精品免费在线| 久久久一区二区三区捆绑**| 国产精品一区二区在线播放 | 欧亚一区二区| a级片国产精品自在拍在线播放| 在线欧美成人| av二区三区| 国产一级做a爰片久久| 激情深爱综合网| 亚洲欧美日韩在线高清直播| 免费黄色在线网站| 欧美国产日韩在线观看| 日韩中文字幕高清在线观看| 成人在线看视频| 国产日韩免费| 亚洲欧美一区二区激情| 成年人黄色在线观看| 爆操欧美美女| 97在线观看免费| 久久精品国产一区二区三区| 亚洲tv在线| 你懂的一区二区| 成人欧美一区二区三区黑人麻豆| 97netav| 国产盗摄一区二区| 91片黄在线观看| 欧美影院在线播放| 亚洲女人天堂| 国产欧美在线一区二区| 国产精品久久久av| 78m国产成人精品视频| 欧美精品激情blacked18| 欧美日韩成人免费| 91麻豆国产香蕉久久精品| 国产精品福利在线观看网址| 免费观看成人www动漫视频| 在线男人天堂| 在线视频欧美一区| 亚洲国产日韩欧美在线| 亚洲最大福利视频网| 日韩美女视频中文字幕| 日本国产欧美一区二区三区| 国产99在线|中文| 国产精品久久av| 成人黄色在线免费| av成人免费观看| 免费在线观看一区二区| 欧美一区亚洲二区| 国产91av视频在线观看| 水蜜桃色314在线观看| 激情五月婷婷久久| 成人黄网大全在线观看| 黄色直播在线| 91在线免费看| 成人免费网站观看| 国产资源一区| 欧美美女啪啪| 亚洲高清资源在线观看| 国产欧美日韩综合一区在线播放| 男男视频亚洲欧美| 成人av电影免费在线播放| 中文字幕高清一区| 大桥未久av一区二区三区| 欧美日韩精品三区| 日韩激情视频在线| 九九九久久国产免费| 国产精品色午夜在线观看| 国产精品二区三区四区| 亚洲综合第一| 国产精彩免费视频| 在线免费视频你懂得| www免费视频观看在线| 激情开心成人网| 国产精品17p| 国产综合网站| 国内成人自拍视频| 国产精品成人在线观看| 欧美主播一区二区三区美女| 精品偷拍一区二区三区在线看| 美乳少妇欧美精品| 国产欧美久久久久久| 日本一区二区三区四区高清视频| 精品国产av无码一区二区三区| 国产一级视频| 成人免费在线| 激情综合网五月激情| 国产精品久久久久久久久图文区 | 日韩精品一区二区三区色偷偷 | 美女国内精品自产拍在线播放| 5858s免费视频成人| 1024国产在线| 一区二区三区在线视频观看58 | 亚洲精品粉嫩美女一区| 第一区第二区在线| 欧美视频在线观看| 国产一区二区在线观看免费| 国产精品福利一区| 欧美一区二区三区在线观看视频| 久久久久999| 国产精品久久波多野结衣| 老太脱裤让老头玩ⅹxxxx| 永久免费在线| 成人国产精品| 先锋资源久久| 国产成人精品免费网站| 天天色天天操综合| 中文字幕精品在线| 91在线视频成人| 人人妻人人添人人爽欧美一区| 男女视频在线观看免费| 久久av影院| 欧美午夜不卡影院在线观看完整版免费| 盗摄精品av一区二区三区| 色综合网色综合| 色综合视频网站| 免费日韩av电影| 探花国产精品| 国产私拍福利精品视频二区| 中出一区二区| 亚洲国产成人一区二区三区| 精品国产区一区|