据我所知,单个浮点数的精度约为6位数,因此以下程序输出2
并不奇怪。
#include<iostream>
using namespace std;
int main(void) {
//cout.precision(7);
float f = 1.999998; //this number gets rounded up to the nearest hundred thousandths
cout << f << endl; //so f should equal 2
return 0;
}
但如果包含cout.precision(7)
,实际上在cout << f << endl;
之前的任何地方,程序会输出整个1.999998
。这只能意味着f
存储整个浮点数而不进行舍入,对吧?
我知道cout.precision()
不应该以任何方式影响浮点存储。这种行为有解释吗?或者它只是在我的机器上?
答案 0 :(得分:2)
据我所知,单个浮点数的精度约为6位
关于六位十进制数字,或者恰好是23位二进制数字。
这个数字四舍五入到最接近的十万
不,不。它四舍五入到最接近的23位二进制数字。不一样,也不相称。
为什么
cout.precision()
会提高浮点的精度?
没有。它影响打印的方式。
答案 1 :(得分:0)
正如评论中所写:数字以二进制形式存储。
cout.setprecision()
实际上不影响浮点值的存储,它只影响输出精度。
答案 2 :(得分:0)
根据this,std :: cout的默认精度为6,您的数字长度为7位,包括小数位前后的部分。因此,当您将精度设置为7时,有足够的精度来表示您的数字,但是当您不设置精度时,将执行舍入。
请记住,这只会影响数字显示的方式,而不会影响它们的存储方式。如果您有兴趣了解如何存储浮点数,请调查IEEE浮点数。
尝试更改小数点前的数字,看看它如何影响舍入,例如float f = 10.9998
和float f = 10.99998