C ++ float vs double cout setprecision oddities(newbie)

时间:2017-08-04 04:08:08

标签: c++ math precision floating-accuracy

当我使用setprecision()时,有人可以解释为什么这两个相同值的变量可以输出不同的值吗?

#include <iostream>
#include <iomanip>
int main()
{
    float a=98.765;
    double b = 98.765;
    //std::cout<<std::setprecision(2)<<a<<std::endl;
    std::cout<<std::fixed;
    std::cout<<std::setprecision(2)<<a<<std::endl;
    std::cout<<std::setprecision(2)<<b<<std::endl;
}

a的输出为98.76,而b的输出为98.77。

1 个答案:

答案 0 :(得分:9)

的变量具有相同的值。当你将double 98.765的{​​{1}}标记到浮动中时,它必须做到最合适,并且会丢失一些精度。

如果将精度更改为50,您可以很容易地看到这一点,您还会看到即使双精度也不能完全代表该值:

98.76499938964843750000000000000000000000000000000000
98.76500000000000056843418860808014869689941406250000

然而,重要的是前一个float变量将向下舍入,后一个double将向上舍入。

另请参阅IEEE754 online converter