C 之Float型別, double型別

2021-08-31 19:01:06 字數 1252 閱讀 8047

c++裡的小數分為float和double兩種型別, 這兩種型別, 直接看**, 及執行結果我們來看一下他們有什麼區別:

#include "iostream"

using namespace std;

int main()

再來看**的執行結果:

接下來分析一下**, **邏輯很簡單, 這裡只說一行:

cout.setf(ios_base::fixed, ios_base::floatfield);
這行**就強制讓cout輸出原始資料例如:333333.250000, 而不是cout預設的那種輸出3.33333e+06這種格式, 僅僅是為了好對float和double的結果進行對比

通過執行結果我們能看的出來:

tub 和 mint還都算是精確, 但是把他們放大1000000後發現tubs已經不精確了, 而mints還算是精確, 

我們可以看出來, 在該系統中,  將tub*1000000後的結果為3333333.250000, 也就是不再精確, 但是保證了7位有效位, 也就是小數點後能保證6位是精確的(如果tub * 1000000 * 10 結果就更不精確了, 說明了float的精確度是有限的), 與之相比, double能至少保證13位是有效的,  因此相比而言double更精確一點.

在程式中預設情況下1.23和1.23e8都儲存為double型別(個人覺得是更精確), 如果希望常量儲存為float型別, 需要在常量後面加上f或f, 例如1.23f, 如果要儲存為long double型別, 則可以使用l或l字尾:

1.23f   float型別;     1.23e5f  float型別,   1.23e4 double型別,   1.23l long double型別

我們再來看另乙個例子:

#include "iostream"

using namespace std;

int main()

執行結果:

從這裡雖然b比a多了1, 但是由於float只能精確到第6, 7位, 所以多加的1對於b來說等於沒有, 因此他們的相減的結果為0,  這也進一步說明了float的不精確

C 中float和double型別的精度問題說明

float和double的範圍是由指數的位數來決定的。float的指數字有8位,而double的指數字有11位,分布如下 float 1bit 符號位 8bits 指數字 23bits 尾數字 double 1bit 符號位 11bits 指數字 52bits 尾數字 在數學中,特別是在計算機相關的...

float和double型別的記憶體分布

c c 的浮點資料型別有float和double兩種。型別float大小為4位元組,即32位,記憶體中的儲存方式如下 符號位 1 bit 指數 8 bit 尾數 23 bit 型別double大小為8位元組,即64位,記憶體布局如下 符號位 1 bit 指數 11 bit 尾數 52 bit 符號位...

float和double型別的記憶體分布

c c 的浮點資料型別有float和double兩種。型別float大小為4位元組,即32位,記憶體中的儲存方式如下 符號位 1 bit 指數 8 bit 尾數 23 bit 型別double大小為8位元組,即64位,記憶體布局如下 符號位 1 bit 指數 11 bit 尾數 52 bit 符號位...