2016-06-26 77 views
0

爲什麼是由兩個存儲的位數浮動以及雙可變一樣,不是雙應該存儲位數多於浮動位數float和double變量

#include <iostream> 
using namespace std; 
int main(){ 
double a = 3.141528579238; 
float b = 3.141528579238; 
cout << a << " " << b; 
return 0; 
} 

我得到這個作爲我的輸出

3.14153 3.14153 
+1

存儲的位數與顯示的位數不同。 – aschepler

+1

http://stackoverflow.com/questions/588004/is-floating-point-math-broken –

+0

@OP:爲了讓你對存儲內容有所瞭解,你需要檢查調試器/內存中的數字,而不是使用輸出語句來顯示數字。 – PaulMcKenzie

回答

1

,你所面臨的問題是,因爲首先你應該知道,漂浮有4個字節,雙有8個字節,3.141528579238也許可以被存儲在這兩個,如果你想顯示更多的數字我建議首先包括: #include <iomanip>然後您可以使用以下命令在「。」之後打印任意數量的數字。 :cout << std::setprecision(7) << myFloat;這將顯示3.1415285。

0

它不是關於數字這是關於位!

float s是32bitdouble s是64bit。 浮點數可以這樣表示:a*2^x其中a < 1a => 0ax將被存儲在32- or 64-bit內存中。

你的程序打印相同的東西的原因是因爲它只是不打印你的整個號碼。