为什么cout.precision()会提高浮点数的精度?

时间:2017-05-04 09:55:20

标签: c++ floating-point precision cout

据我所知,单个浮点数的精度约为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()不应该以任何方式影响浮点存储。这种行为有解释吗?或者它只是在我的机器上?

3 个答案:

答案 0 :(得分:2)

  

据我所知,单个浮点数的精度约为6位

关于六位十进制数字,或者恰好是23位二进制数字。

  

这个数字四舍五入到最接近的十万

不,不。它四舍五入到最接近的23位二进制数字。不一样,也不相称。

  

为什么cout.precision()会提高浮点的精度?

没有。它影响打印的方式。

答案 1 :(得分:0)

正如评论中所写:数字以二进制形式存储。

cout.setprecision()实际上影响浮点值的存储,它只影响输出精度。

答案 2 :(得分:0)

根据this,std :: cout的默认精度为6,您的数字长度为7位,包括小数位前后的部分。因此,当您将精度设置为7时,有足够的精度来表示您的数字,但是当您不设置精度时,将执行舍入。

请记住,这只会影响数字显示的方式,而不会影响它们的存储方式。如果您有兴趣了解如何存储浮点数,请调查IEEE浮点数。

尝试更改小数点前的数字,看看它如何影响舍入,例如float f = 10.9998float f = 10.99998