2016-06-26 55 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内存中。

你的程序打印相同的东西的原因是因为它只是不打印你的整个号码。