为什么是由两个存储的位数浮动以及双可变一样,不是双应该存储位数多于浮动位数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
为什么是由两个存储的位数浮动以及双可变一样,不是双应该存储位数多于浮动位数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
,你所面临的问题是,因为首先你应该知道,漂浮有4个字节,双有8个字节,3.141528579238也许可以被存储在这两个,如果你想显示更多的数字我建议首先包括: #include <iomanip>
然后您可以使用以下命令在“。”之后打印任意数量的数字。 :cout << std::setprecision(7) << myFloat;
这将显示3.1415285。
它不是关于数字这是关于位!
float
s是32bit
和double
s是64bit
。 浮点数可以这样表示:a*2^x
其中a < 1
和a => 0
。 a
和x
将被存储在32- or 64-bit
内存中。
你的程序打印相同的东西的原因是因为它只是不打印你的整个号码。
存储的位数与显示的位数不同。 – aschepler
http://stackoverflow.com/questions/588004/is-floating-point-math-broken –
@OP:为了让你对存储内容有所了解,你需要检查调试器/内存中的数字,而不是使用输出语句来显示数字。 – PaulMcKenzie